Skip to content

Commit 51499c0

Browse files
panvaanonrig
authored andcommitted
crypto: support ML-KEM in Web Cryptography
PR-URL: nodejs/node#59569 Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 8d768f2 commit 51499c0

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/ncrypto.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2312,21 +2312,34 @@ DataPointer EVPKeyPointer::rawPublicKey() const {
23122312
#if OPENSSL_WITH_PQC
23132313
DataPointer EVPKeyPointer::rawSeed() const {
23142314
if (!pkey_) return {};
2315+
2316+
// Determine seed length and parameter name based on key type
2317+
size_t seed_len;
2318+
const char* param_name;
2319+
23152320
switch (id()) {
23162321
case EVP_PKEY_ML_DSA_44:
23172322
case EVP_PKEY_ML_DSA_65:
23182323
case EVP_PKEY_ML_DSA_87:
2324+
seed_len = 32; // ML-DSA uses 32-byte seeds
2325+
param_name = OSSL_PKEY_PARAM_ML_DSA_SEED;
2326+
break;
2327+
case EVP_PKEY_ML_KEM_512:
2328+
case EVP_PKEY_ML_KEM_768:
2329+
case EVP_PKEY_ML_KEM_1024:
2330+
seed_len = 64; // ML-KEM uses 64-byte seeds
2331+
param_name = OSSL_PKEY_PARAM_ML_KEM_SEED;
23192332
break;
23202333
default:
23212334
unreachable();
23222335
}
23232336

2324-
size_t seed_len = 32;
23252337
if (auto data = DataPointer::Alloc(seed_len)) {
23262338
const Buffer<unsigned char> buf = data;
23272339
size_t len = data.size();
2340+
23282341
if (EVP_PKEY_get_octet_string_param(
2329-
get(), OSSL_PKEY_PARAM_ML_DSA_SEED, buf.data, len, &seed_len) != 1)
2342+
get(), param_name, buf.data, len, &seed_len) != 1)
23302343
return {};
23312344
return data;
23322345
}

0 commit comments

Comments
 (0)