mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex PR-URL: https://github.com/nodejs/node/pull/66237 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Aviv Keller <me@aviv.sh>
48 lines
1.5 KiB
JavaScript
48 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common.js');
|
|
const fixtures = require('../../test/common/fixtures.js');
|
|
const { createPrivateKey, createPublicKey, subtle } = require('node:crypto');
|
|
|
|
const bench = common.createBenchmark(main, {
|
|
keyType: ['hmac', 'aes-gcm', 'ecdsa-private', 'rsa-private', 'rsa-public'],
|
|
n: [1e5],
|
|
});
|
|
|
|
async function createKey(keyType) {
|
|
switch (keyType) {
|
|
case 'hmac':
|
|
return subtle.importKey(
|
|
'raw', new Uint8Array(32), { name: 'HMAC', hash: 'SHA-256' },
|
|
true, ['sign', 'verify']);
|
|
case 'aes-gcm':
|
|
return subtle.importKey(
|
|
'raw', new Uint8Array(32), 'AES-GCM',
|
|
true, ['encrypt', 'decrypt', 'wrapKey', 'unwrapKey']);
|
|
case 'ecdsa-private':
|
|
return createPrivateKey(fixtures.readKey('ec_p256_private.pem'))
|
|
.toCryptoKey({ name: 'ECDSA', namedCurve: 'P-256' }, true, ['sign']);
|
|
case 'rsa-private':
|
|
return createPrivateKey(fixtures.readKey('rsa_private_2048.pem'))
|
|
.toCryptoKey({ name: 'RSA-PSS', hash: 'SHA-256' }, true, ['sign']);
|
|
case 'rsa-public':
|
|
return createPublicKey(fixtures.readKey('rsa_private_2048.pem'))
|
|
.toCryptoKey({ name: 'RSA-PSS', hash: 'SHA-256' }, true, ['verify']);
|
|
default:
|
|
throw new Error(`Unsupported key type: ${keyType}`);
|
|
}
|
|
}
|
|
|
|
async function main({ n, keyType }) {
|
|
const key = await createKey(keyType);
|
|
let result;
|
|
|
|
bench.start();
|
|
for (let i = 0; i < n; i++)
|
|
result = await subtle.exportKey('jwk', key);
|
|
bench.end(n);
|
|
|
|
if (result.kty === undefined)
|
|
throw new Error('Missing key type');
|
|
}
|