diff options
author | Shigeki Ohtsu <ohtsu@iij.ad.jp> | 2015-04-02 13:30:35 +0900 |
---|---|---|
committer | Shigeki Ohtsu <ohtsu@iij.ad.jp> | 2015-04-04 12:37:26 +0900 |
commit | 3a69b7689bdcbb5602bd0f8083c403eb77cc0db0 (patch) | |
tree | 8904a3b382eda860e6295e7d887e086e6159ea82 /benchmark | |
parent | 1c709f3aa98954b6462bd7feee1f87c1bc94ba67 (diff) | |
download | node-new-3a69b7689bdcbb5602bd0f8083c403eb77cc0db0.tar.gz |
benchmark: add rsa/aes-gcm performance test
PR-URL: https://github.com/iojs/io.js/pull/1325
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'benchmark')
-rw-r--r-- | benchmark/crypto/aes-gcm-throughput.js | 38 | ||||
-rw-r--r-- | benchmark/crypto/rsa-encrypt-decrypt-throughput.js | 45 | ||||
-rw-r--r-- | benchmark/crypto/rsa-sign-verify-throughput.js | 53 |
3 files changed, 136 insertions, 0 deletions
diff --git a/benchmark/crypto/aes-gcm-throughput.js b/benchmark/crypto/aes-gcm-throughput.js new file mode 100644 index 0000000000..65e1713f0e --- /dev/null +++ b/benchmark/crypto/aes-gcm-throughput.js @@ -0,0 +1,38 @@ +var common = require('../common.js'); +var crypto = require('crypto'); +var keylen = {'aes-128-gcm': 16, 'aes-192-gcm': 24, 'aes-256-gcm': 32}; +var bench = common.createBenchmark(main, { + n: [500], + cipher: ['aes-128-gcm', 'aes-192-gcm', 'aes-256-gcm'], + len: [1024, 4 * 1024, 16 * 1024, 64 * 1024, 256 * 1024, 1024 * 1024] +}); + +function main(conf) { + var message = (new Buffer(conf.len)).fill('b'); + var key = crypto.randomBytes(keylen[conf.cipher]); + var iv = crypto.randomBytes(12); + var associate_data = (new Buffer(16)).fill('z'); + bench.start(); + AEAD_Bench(conf.cipher, message, associate_data, key, iv, conf.n, conf.len); +} + +function AEAD_Bench(cipher, message, associate_data, key, iv, n, len) { + var written = n * len; + var bits = written * 8; + var mbits = bits / (1024 * 1024); + + for (var i = 0; i < n; i++) { + var alice = crypto.createCipheriv(cipher, key, iv); + alice.setAAD(associate_data); + var enc = alice.update(message); + alice.final(); + var tag = alice.getAuthTag(); + var bob = crypto.createDecipheriv(cipher, key, iv); + bob.setAuthTag(tag); + bob.setAAD(associate_data); + var clear = bob.update(enc); + bob.final(); + } + + bench.end(mbits); +} diff --git a/benchmark/crypto/rsa-encrypt-decrypt-throughput.js b/benchmark/crypto/rsa-encrypt-decrypt-throughput.js new file mode 100644 index 0000000000..1cd7a5e632 --- /dev/null +++ b/benchmark/crypto/rsa-encrypt-decrypt-throughput.js @@ -0,0 +1,45 @@ +// throughput benchmark in signing and verifying +var common = require('../common.js'); +var crypto = require('crypto'); +var fs = require('fs'); +var path = require('path'); +var fixtures_keydir = path.resolve(__dirname, '../../test/fixtures/keys/'); +var keylen_list = ['1024', '2048', '4096']; +var RSA_PublicPem = {}; +var RSA_PrivatePem = {}; + +keylen_list.forEach(function(key) { + RSA_PublicPem[key] = fs.readFileSync(fixtures_keydir + + '/rsa_public_' + key + '.pem'); + RSA_PrivatePem[key] = fs.readFileSync(fixtures_keydir + + '/rsa_private_' + key + '.pem'); +}); + +var bench = common.createBenchmark(main, { + n: [500], + keylen: keylen_list, + len: [16, 32, 64] +}); + +function main(conf) { + var crypto = require('crypto'); + var message = (new Buffer(conf.len)).fill('b'); + + bench.start(); + StreamWrite(conf.algo, conf.keylen, message, conf.n, conf.len); +} + +function StreamWrite(algo, keylen, message, n, len) { + var written = n * len; + var bits = written * 8; + var kbits = bits / (1024); + + var privateKey = RSA_PrivatePem[keylen]; + var publicKey = RSA_PublicPem[keylen]; + for (var i = 0; i < n; i++) { + var enc = crypto.privateEncrypt(privateKey, message); + var clear = crypto.publicDecrypt(publicKey, enc); + } + + bench.end(kbits); +} diff --git a/benchmark/crypto/rsa-sign-verify-throughput.js b/benchmark/crypto/rsa-sign-verify-throughput.js new file mode 100644 index 0000000000..fd4260417b --- /dev/null +++ b/benchmark/crypto/rsa-sign-verify-throughput.js @@ -0,0 +1,53 @@ +// throughput benchmark in signing and verifying +var common = require('../common.js'); +var crypto = require('crypto'); +var fs = require('fs'); +var path = require('path'); +var fixtures_keydir = path.resolve(__dirname, '../../test/fixtures/keys/'); +var keylen_list = ['1024', '2048']; +var RSA_PublicPem = {}; +var RSA_PrivatePem = {}; + +keylen_list.forEach(function(key) { + RSA_PublicPem[key] = fs.readFileSync(fixtures_keydir + + '/rsa_public_' + key + '.pem'); + RSA_PrivatePem[key] = fs.readFileSync(fixtures_keydir + + '/rsa_private_' + key + '.pem'); +}); + +var bench = common.createBenchmark(main, { + writes: [500], + algo: ['RSA-SHA1', 'RSA-SHA224', 'RSA-SHA256', 'RSA-SHA384', 'RSA-SHA512'], + keylen: keylen_list, + len: [1024, 102400, 2 * 102400, 3 * 102400, 1024 * 1024] +}); + +function main(conf) { + var crypto = require('crypto'); + var message = (new Buffer(conf.len)).fill('b'); + + bench.start(); + StreamWrite(conf.algo, conf.keylen, message, conf.writes, conf.len); +} + +function StreamWrite(algo, keylen, message, writes, len) { + var written = writes * len; + var bits = written * 8; + var kbits = bits / (1024); + + var privateKey = RSA_PrivatePem[keylen]; + var publicKey = RSA_PublicPem[keylen]; + var s = crypto.createSign(algo); + var v = crypto.createVerify(algo); + + while (writes-- > 0) { + s.update(message); + v.update(message); + } + + var sign = s.sign(privateKey, 'binary'); + s.end(); + v.end(); + + bench.end(kbits); +} |