'use strict'; const common = require('../common.js'); const assert = require('assert'); const { hkdf, hkdfSync, } = require('crypto'); const bench = common.createBenchmark(main, { sync: [0, 1], size: [10, 64, 1024], key: ['a', 'secret', 'this-is-a-much-longer-secret'], salt: ['', 'salt'], info: ['', 'info'], hash: ['sha256', 'sha512'], n: [1e4], }); function measureSync(n, size, salt, info, hash, key) { bench.start(); for (let i = 0; i < n; ++i) hkdfSync(hash, key, salt, info, size); bench.end(n); } function measureAsync(n, size, salt, info, hash, key) { let remaining = n; function done(err) { assert.ifError(err); if (--remaining === 0) bench.end(n); } bench.start(); for (let i = 0; i < n; ++i) hkdf(hash, key, salt, info, size, done); } function main({ n, sync, size, salt, info, hash, key }) { if (sync) measureSync(n, size, salt, info, hash, key); else measureAsync(n, size, salt, info, hash, key); }