Further cleanup of sym_encrypted_integrity_protected.js
This commit is contained in:
parent
261db8035d
commit
3bf421206b
|
@ -91,28 +91,24 @@ SymEncryptedIntegrityProtected.prototype.encrypt = function (sessionKeyAlgorithm
|
||||||
|
|
||||||
// This could probably be cleaned up to use less memory
|
// This could probably be cleaned up to use less memory
|
||||||
var tohash = util.concatUint8Array([bytes, mdc]);
|
var tohash = util.concatUint8Array([bytes, mdc]);
|
||||||
|
|
||||||
var hash = crypto.hash.sha1(util.concatUint8Array([prefix, tohash]));
|
var hash = crypto.hash.sha1(util.concatUint8Array([prefix, tohash]));
|
||||||
|
|
||||||
tohash = util.concatUint8Array([tohash, hash]);
|
tohash = util.concatUint8Array([tohash, hash]);
|
||||||
|
|
||||||
// AES optimizations. Native code for node, asmCrypto for browser.
|
if(sessionKeyAlgorithm.substr(0,3) === 'aes') { // AES optimizations. Native code for node, asmCrypto for browser.
|
||||||
if(sessionKeyAlgorithm.substr(0,3) === 'aes') {
|
|
||||||
var blockSize = crypto.cipher[sessionKeyAlgorithm].blockSize;
|
var blockSize = crypto.cipher[sessionKeyAlgorithm].blockSize;
|
||||||
// Node crypto library. Not clear that it is faster than asmCrypto
|
|
||||||
if(nodeCrypto) {
|
if(nodeCrypto) { // Node crypto library. Only loaded if config.useNative === true
|
||||||
var cipherObj = new nodeCrypto.createCipheriv('aes-' + sessionKeyAlgorithm.substr(3,3) + '-cfb',
|
var cipherObj = new nodeCrypto.createCipheriv('aes-' + sessionKeyAlgorithm.substr(3,3) + '-cfb',
|
||||||
new Buffer(key), new Buffer(new Uint8Array(blockSize)));
|
new Buffer(key), new Buffer(new Uint8Array(blockSize)));
|
||||||
this.encrypted = new Uint8Array(cipherObj.update(new Buffer(util.concatUint8Array([prefix, tohash]))));
|
this.encrypted = new Uint8Array(cipherObj.update(new Buffer(util.concatUint8Array([prefix, tohash]))));
|
||||||
}
|
|
||||||
else {
|
} else { // asm.js fallback
|
||||||
this.encrypted = asmCrypto.AES_CFB.encrypt(util.concatUint8Array([prefix, tohash]), key);
|
this.encrypted = asmCrypto.AES_CFB.encrypt(util.concatUint8Array([prefix, tohash]), key);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else {
|
} else {
|
||||||
this.encrypted = crypto.cfb.encrypt(prefixrandom,
|
this.encrypted = crypto.cfb.encrypt(prefixrandom, sessionKeyAlgorithm, tohash, key, false)
|
||||||
sessionKeyAlgorithm, tohash, key, false).subarray(0,
|
.subarray(0, prefix.length + tohash.length);
|
||||||
prefix.length + tohash.length);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -127,24 +123,24 @@ SymEncryptedIntegrityProtected.prototype.encrypt = function (sessionKeyAlgorithm
|
||||||
*/
|
*/
|
||||||
SymEncryptedIntegrityProtected.prototype.decrypt = function (sessionKeyAlgorithm, key) {
|
SymEncryptedIntegrityProtected.prototype.decrypt = function (sessionKeyAlgorithm, key) {
|
||||||
var decrypted;
|
var decrypted;
|
||||||
// AES optimizations. Native code for node, asmCrypto for browser.
|
|
||||||
if(sessionKeyAlgorithm.substr(0,3) === 'aes') {
|
if(sessionKeyAlgorithm.substr(0,3) === 'aes') { // AES optimizations. Native code for node, asmCrypto for browser.
|
||||||
var blockSize = crypto.cipher[sessionKeyAlgorithm].blockSize;
|
var blockSize = crypto.cipher[sessionKeyAlgorithm].blockSize;
|
||||||
// Node crypto library. Not clear that it is faster than asmCrypto
|
|
||||||
if(nodeCrypto) {
|
if(nodeCrypto) { // Node crypto library. Only loaded if config.useNative === true
|
||||||
var decipherObj = new nodeCrypto.createDecipheriv('aes-' + sessionKeyAlgorithm.substr(3,3) + '-cfb',
|
var decipherObj = new nodeCrypto.createDecipheriv('aes-' + sessionKeyAlgorithm.substr(3,3) + '-cfb',
|
||||||
new Buffer(key), new Buffer(new Uint8Array(blockSize)));
|
new Buffer(key), new Buffer(new Uint8Array(blockSize)));
|
||||||
decrypted = new Uint8Array(decipherObj.update(new Buffer(this.encrypted)));
|
decrypted = new Uint8Array(decipherObj.update(new Buffer(this.encrypted)));
|
||||||
}
|
|
||||||
else {
|
} else { // asm.js fallback
|
||||||
decrypted = asmCrypto.AES_CFB.decrypt(this.encrypted, key);
|
decrypted = asmCrypto.AES_CFB.decrypt(this.encrypted, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove random prefix
|
// Remove random prefix
|
||||||
decrypted = decrypted.subarray(blockSize + 2, decrypted.length);
|
decrypted = decrypted.subarray(blockSize + 2, decrypted.length);
|
||||||
}
|
|
||||||
else {
|
} else {
|
||||||
decrypted = crypto.cfb.decrypt(
|
decrypted = crypto.cfb.decrypt(sessionKeyAlgorithm, key, this.encrypted, false);
|
||||||
sessionKeyAlgorithm, key, this.encrypted, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// there must be a modification detection code packet as the
|
// there must be a modification detection code packet as the
|
||||||
|
|
Loading…
Reference in New Issue
Block a user