crypto: support ML-DSA KeyObject, sign, and verify

PR-URL: https://github.com/nodejs/node/pull/59259
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Filip Skokan 2025-08-06 22:49:30 +01:00 committed by GitHub
parent 2b4a09ef8b
commit 24e28c41b5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
31 changed files with 1482 additions and 47 deletions

View file

@ -18,13 +18,14 @@ function readKeyPair(publicKeyName, privateKeyName) {
}
const keyFixtures = {
ec: readKeyPair('ec_p256_public', 'ec_p256_private'),
rsa: readKeyPair('rsa_public_2048', 'rsa_private_2048'),
ed25519: readKeyPair('ed25519_public', 'ed25519_private'),
'ec': readKeyPair('ec_p256_public', 'ec_p256_private'),
'rsa': readKeyPair('rsa_public_2048', 'rsa_private_2048'),
'ed25519': readKeyPair('ed25519_public', 'ed25519_private'),
'ml-dsa-44': readKeyPair('ml_dsa_44_public', 'ml_dsa_44_private'),
};
const bench = common.createBenchmark(main, {
keyType: ['rsa', 'ec', 'ed25519'],
keyType: ['rsa', 'ec', 'ed25519', 'ml-dsa-44'],
keyFormat: ['pkcs8', 'spki', 'der-pkcs8', 'der-spki', 'jwk-public', 'jwk-private'],
n: [1e3],
});

View file

@ -6,10 +6,15 @@ const fs = require('fs');
const path = require('path');
const fixtures_keydir = path.resolve(__dirname, '../../test/fixtures/keys/');
function readKey(name) {
return fs.readFileSync(`${fixtures_keydir}/${name}.pem`, 'utf8');
}
const keyFixtures = {
ec: fs.readFileSync(`${fixtures_keydir}/ec_p256_private.pem`, 'utf-8'),
rsa: fs.readFileSync(`${fixtures_keydir}/rsa_private_2048.pem`, 'utf-8'),
ed25519: fs.readFileSync(`${fixtures_keydir}/ed25519_private.pem`, 'utf-8'),
'ec': readKey('ec_p256_private'),
'rsa': readKey('rsa_private_2048'),
'ed25519': readKey('ed25519_private'),
'ml-dsa-44': readKey('ml_dsa_44_private'),
};
const data = crypto.randomBytes(256);
@ -18,7 +23,7 @@ let pems;
let keyObjects;
const bench = common.createBenchmark(main, {
keyType: ['rsa', 'ec', 'ed25519'],
keyType: ['rsa', 'ec', 'ed25519', 'ml-dsa-44'],
mode: ['sync', 'async', 'async-parallel'],
keyFormat: ['pem', 'der', 'jwk', 'keyObject', 'keyObject.unique'],
n: [1e3],
@ -90,6 +95,7 @@ function main({ n, mode, keyFormat, keyType }) {
digest = 'sha256';
break;
case 'ed25519':
case 'ml-dsa-44':
break;
default:
throw new Error('not implemented');

View file

@ -18,9 +18,10 @@ function readKeyPair(publicKeyName, privateKeyName) {
}
const keyFixtures = {
ec: readKeyPair('ec_p256_public', 'ec_p256_private'),
rsa: readKeyPair('rsa_public_2048', 'rsa_private_2048'),
ed25519: readKeyPair('ed25519_public', 'ed25519_private'),
'ec': readKeyPair('ec_p256_public', 'ec_p256_private'),
'rsa': readKeyPair('rsa_public_2048', 'rsa_private_2048'),
'ed25519': readKeyPair('ed25519_public', 'ed25519_private'),
'ml-dsa-44': readKeyPair('ml_dsa_44_public', 'ml_dsa_44_private'),
};
const data = crypto.randomBytes(256);
@ -29,7 +30,7 @@ let pems;
let keyObjects;
const bench = common.createBenchmark(main, {
keyType: ['rsa', 'ec', 'ed25519'],
keyType: ['rsa', 'ec', 'ed25519', 'ml-dsa-44'],
mode: ['sync', 'async', 'async-parallel'],
keyFormat: ['pem', 'der', 'jwk', 'keyObject', 'keyObject.unique'],
n: [1e3],
@ -104,6 +105,7 @@ function main({ n, mode, keyFormat, keyType }) {
digest = 'sha256';
break;
case 'ed25519':
case 'ml-dsa-44':
break;
default:
throw new Error('not implemented');