node-forge
Version:
JavaScript implementations of network transports, cryptography, ciphers, PKI, message digests, and various utilities.
63 lines (51 loc) • 1.68 kB
JavaScript
var forge = require('../js/forge');
console.log('Times in 1000s of bytes/sec processed.');
aes_128('AES-CBC');
aes_128('AES-CFB');
aes_128('AES-OFB');
aes_128('AES-CTR');
aes_128('AES-GCM');
function aes_128(algorithm) {
console.log('Running ' + algorithm + ' for 5 seconds...');
var size = 1024;
var key = forge.random.getBytesSync(16);
var iv = forge.random.getBytes(algorithm === 'AES-GCM' ? 12 : 16);
var plain = forge.random.getBytesSync(size);
// run for 5 seconds
var start = new Date().getTime();
var now;
var totalEncrypt = 0;
var totalDecrypt = 0;
var cipher;
var count = 0;
var passed = 0;
while(passed < 5000) {
var input = forge.util.createBuffer(plain);
// encrypt, only measuring update() and finish()
cipher = forge.cipher.createCipher(algorithm, key);
cipher.start({iv: iv});
now = new Date().getTime();
cipher.update(input);
cipher.finish();
totalEncrypt += new Date().getTime() - now;
var ciphertext = cipher.output;
var tag = cipher.mode.tag;
count += cipher.output.length();
// decrypt, only measuring update() and finish()
cipher = forge.cipher.createDecipher(algorithm, key);
cipher.start({iv: iv, tag: tag});
now = new Date().getTime();
cipher.update(ciphertext);
if(!cipher.finish()) {
throw new Error('Decryption error.');
}
totalDecrypt += new Date().getTime() - now;
passed = new Date().getTime() - start;
}
count = count / 1000;
totalEncrypt /= 1000;
totalDecrypt /= 1000;
console.log('encrypt: ' + (count / totalEncrypt) + ' k/sec');
console.log('decrypt: ' + (count / totalDecrypt) + ' k/sec');
console.log();
}