summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorShigeki Ohtsu <ohtsu@iij.ad.jp>2015-04-02 13:30:35 +0900
committerShigeki Ohtsu <ohtsu@iij.ad.jp>2015-04-04 12:37:26 +0900
commit3a69b7689bdcbb5602bd0f8083c403eb77cc0db0 (patch)
tree8904a3b382eda860e6295e7d887e086e6159ea82 /benchmark
parent1c709f3aa98954b6462bd7feee1f87c1bc94ba67 (diff)
downloadandroid-node-v8-3a69b7689bdcbb5602bd0f8083c403eb77cc0db0.tar.gz
android-node-v8-3a69b7689bdcbb5602bd0f8083c403eb77cc0db0.tar.bz2
android-node-v8-3a69b7689bdcbb5602bd0f8083c403eb77cc0db0.zip
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.js38
-rw-r--r--benchmark/crypto/rsa-encrypt-decrypt-throughput.js45
-rw-r--r--benchmark/crypto/rsa-sign-verify-throughput.js53
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);
+}