corrade-nucleus-nucleons

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 1  →  ?path2? @ 2
/base/000_base/bower_components/cryptojslib/components/mode-cfb.js
@@ -0,0 +1,64 @@
/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
/**
* 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) {
// Shortcut
var iv = this._iv;
 
// Generate keystream
if (iv) {
var keystream = iv.slice(0);
 
// Remove IV for subsequent blocks
this._iv = undefined;
} else {
var keystream = this._prevBlock;
}
cipher.encryptBlock(keystream, 0);
 
// Encrypt
for (var i = 0; i < blockSize; i++) {
words[offset + i] ^= keystream[i];
}
}
 
return CFB;
}());