Spaces:
Runtime error
Runtime error
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* Cipher Feedback block mode. | |
*/ | |
CryptoJS.mode.CFB = (function () { | |
var CFB = CryptoJS.lib.BlockCipherMode.extend(); | |
CFB.Encryptor = CFB.extend({ | |
processBlock: function (words, offset) { | |
// Shortcuts | |
var cipher = this._cipher; | |
var blockSize = cipher.blockSize; | |
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); | |
// Remember this block to use with next block | |
this._prevBlock = words.slice(offset, offset + blockSize); | |
} | |
}); | |
CFB.Decryptor = CFB.extend({ | |
processBlock: function (words, offset) { | |
// Shortcuts | |
var cipher = this._cipher; | |
var blockSize = cipher.blockSize; | |
// Remember this block to use with next block | |
var thisBlock = words.slice(offset, offset + blockSize); | |
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); | |
// This block becomes the previous block | |
this._prevBlock = thisBlock; | |
} | |
}); | |
function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { | |
var keystream; | |
// Shortcut | |
var iv = this._iv; | |
// Generate keystream | |
if (iv) { | |
keystream = iv.slice(0); | |
// Remove IV for subsequent blocks | |
this._iv = undefined; | |
} else { | |
keystream = this._prevBlock; | |
} | |
cipher.encryptBlock(keystream, 0); | |
// Encrypt | |
for (var i = 0; i < blockSize; i++) { | |
words[offset + i] ^= keystream[i]; | |
} | |
} | |
return CFB; | |
}()); | |
return CryptoJS.mode.CFB; | |
})); |