Subversion Repositories cryptochat

Rev

View as "text/javascript" | Blame | Last modification | View Log | RSS feed

  1. /*
  2. CryptoJS v3.1.2
  3. code.google.com/p/crypto-js
  4. (c) 2009-2013 by Jeff Mott. All rights reserved.
  5. code.google.com/p/crypto-js/wiki/License
  6. */
  7. /**
  8.  * Counter block mode.
  9.  */
  10. CryptoJS.mode.CTR = (function () {
  11.     var CTR = CryptoJS.lib.BlockCipherMode.extend();
  12.  
  13.     var Encryptor = CTR.Encryptor = CTR.extend({
  14.         processBlock: function (words, offset) {
  15.             // Shortcuts
  16.             var cipher = this._cipher
  17.             var blockSize = cipher.blockSize;
  18.             var iv = this._iv;
  19.             var counter = this._counter;
  20.  
  21.             // Generate keystream
  22.             if (iv) {
  23.                 counter = this._counter = iv.slice(0);
  24.  
  25.                 // Remove IV for subsequent blocks
  26.                 this._iv = undefined;
  27.             }
  28.             var keystream = counter.slice(0);
  29.             cipher.encryptBlock(keystream, 0);
  30.  
  31.             // Increment counter
  32.             counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0
  33.  
  34.             // Encrypt
  35.             for (var i = 0; i < blockSize; i++) {
  36.                 words[offset + i] ^= keystream[i];
  37.             }
  38.         }
  39.     });
  40.  
  41.     CTR.Decryptor = Encryptor;
  42.  
  43.     return CTR;
  44. }());
  45.