63 lines
1.6 KiB
JavaScript
63 lines
1.6 KiB
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();
|
|
}
|