Skip to content

Commit 2c51e37

Browse files
committed
crypto: support SLH-DSA KeyObject, sign, and verify
1 parent e16be2c commit 2c51e37

33 files changed

+557
-2
lines changed

β€Ždeps/ncrypto/ncrypto.ccβ€Ž

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@ constexpr static PQCMapping pqc_mappings[] = {
2525
{"ML-KEM-512", EVP_PKEY_ML_KEM_512},
2626
{"ML-KEM-768", EVP_PKEY_ML_KEM_768},
2727
{"ML-KEM-1024", EVP_PKEY_ML_KEM_1024},
28+
{"SLH-DSA-SHA2-128f", EVP_PKEY_SLH_DSA_SHA2_128F},
29+
{"SLH-DSA-SHA2-128s", EVP_PKEY_SLH_DSA_SHA2_128S},
30+
{"SLH-DSA-SHA2-192f", EVP_PKEY_SLH_DSA_SHA2_192F},
31+
{"SLH-DSA-SHA2-192s", EVP_PKEY_SLH_DSA_SHA2_192S},
32+
{"SLH-DSA-SHA2-256f", EVP_PKEY_SLH_DSA_SHA2_256F},
33+
{"SLH-DSA-SHA2-256s", EVP_PKEY_SLH_DSA_SHA2_256S},
34+
{"SLH-DSA-SHAKE-128f", EVP_PKEY_SLH_DSA_SHAKE_128F},
35+
{"SLH-DSA-SHAKE-128s", EVP_PKEY_SLH_DSA_SHAKE_128S},
36+
{"SLH-DSA-SHAKE-192f", EVP_PKEY_SLH_DSA_SHAKE_192F},
37+
{"SLH-DSA-SHAKE-192s", EVP_PKEY_SLH_DSA_SHAKE_192S},
38+
{"SLH-DSA-SHAKE-256f", EVP_PKEY_SLH_DSA_SHAKE_256F},
39+
{"SLH-DSA-SHAKE-256s", EVP_PKEY_SLH_DSA_SHAKE_256S},
2840
};
2941

3042
#endif
@@ -1985,7 +1997,12 @@ int EVPKeyPointer::id(const EVP_PKEY* key) {
19851997
if (key == nullptr) return 0;
19861998
int type = EVP_PKEY_id(key);
19871999
#if OPENSSL_WITH_PQC
2000+
// EVP_PKEY_id returns -1 when EVP_PKEY_* is only implemented in a provider
2001+
// which is the case for all post-quantum NIST algorithms
2002+
// one suggested way would be to use a chain of `EVP_PKEY_is_a`
19882003
// https://github.com/openssl/openssl/issues/27738#issuecomment-3013215870
2004+
// or, this way there are less calls to the OpenSSL provider, just
2005+
// getting the name once
19892006
if (type == -1) {
19902007
const char* type_name = EVP_PKEY_get0_type_name(key);
19912008
if (type_name == nullptr) return -1;
@@ -2540,6 +2557,18 @@ bool EVPKeyPointer::isOneShotVariant() const {
25402557
case EVP_PKEY_ML_DSA_44:
25412558
case EVP_PKEY_ML_DSA_65:
25422559
case EVP_PKEY_ML_DSA_87:
2560+
case EVP_PKEY_SLH_DSA_SHA2_128F:
2561+
case EVP_PKEY_SLH_DSA_SHA2_128S:
2562+
case EVP_PKEY_SLH_DSA_SHA2_192F:
2563+
case EVP_PKEY_SLH_DSA_SHA2_192S:
2564+
case EVP_PKEY_SLH_DSA_SHA2_256F:
2565+
case EVP_PKEY_SLH_DSA_SHA2_256S:
2566+
case EVP_PKEY_SLH_DSA_SHAKE_128F:
2567+
case EVP_PKEY_SLH_DSA_SHAKE_128S:
2568+
case EVP_PKEY_SLH_DSA_SHAKE_192F:
2569+
case EVP_PKEY_SLH_DSA_SHAKE_192S:
2570+
case EVP_PKEY_SLH_DSA_SHAKE_256F:
2571+
case EVP_PKEY_SLH_DSA_SHAKE_256S:
25432572
#endif
25442573
return true;
25452574
default:

β€Ždoc/api/crypto.mdβ€Ž

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2024,6 +2024,9 @@ Other key details might be exposed via this API using additional attributes.
20242024
<!-- YAML
20252025
added: v11.6.0
20262026
changes:
2027+
- version: REPLACEME
2028+
pr-url: https://github.com/nodejs/node/pull/59461
2029+
description: Add support for SLH-DSA keys.
20272030
- version: REPLACEME
20282031
pr-url: https://github.com/nodejs/node/pull/59461
20292032
description: Add support for ML-KEM keys.
@@ -2070,6 +2073,18 @@ types are:
20702073
* `'ml-kem-512'`[^openssl35] (OID 2.16.840.1.101.3.4.4.1)
20712074
* `'ml-kem-768'`[^openssl35] (OID 2.16.840.1.101.3.4.4.2)
20722075
* `'ml-kem-1024'`[^openssl35] (OID 2.16.840.1.101.3.4.4.3)
2076+
* `'slh-dsa-sha2-128f'`[^openssl35] (OID 2.16.840.1.101.3.4.3.21)
2077+
* `'slh-dsa-sha2-128s'`[^openssl35] (OID 2.16.840.1.101.3.4.3.22)
2078+
* `'slh-dsa-sha2-192f'`[^openssl35] (OID 2.16.840.1.101.3.4.3.23)
2079+
* `'slh-dsa-sha2-192s'`[^openssl35] (OID 2.16.840.1.101.3.4.3.24)
2080+
* `'slh-dsa-sha2-256f'`[^openssl35] (OID 2.16.840.1.101.3.4.3.25)
2081+
* `'slh-dsa-sha2-256s'`[^openssl35] (OID 2.16.840.1.101.3.4.3.26)
2082+
* `'slh-dsa-shake-128f'`[^openssl35] (OID 2.16.840.1.101.3.4.3.27)
2083+
* `'slh-dsa-shake-128s'`[^openssl35] (OID 2.16.840.1.101.3.4.3.28)
2084+
* `'slh-dsa-shake-192f'`[^openssl35] (OID 2.16.840.1.101.3.4.3.29)
2085+
* `'slh-dsa-shake-192s'`[^openssl35] (OID 2.16.840.1.101.3.4.3.30)
2086+
* `'slh-dsa-shake-256f'`[^openssl35] (OID 2.16.840.1.101.3.4.3.31)
2087+
* `'slh-dsa-shake-256s'`[^openssl35] (OID 2.16.840.1.101.3.4.3.32)
20732088

20742089
This property is `undefined` for unrecognized `KeyObject` types and symmetric
20752090
keys.
@@ -3669,6 +3684,9 @@ underlying hash function. See [`crypto.createHmac()`][] for more information.
36693684
<!-- YAML
36703685
added: v10.12.0
36713686
changes:
3687+
- version: REPLACEME
3688+
pr-url: https://github.com/nodejs/node/pull/59461
3689+
description: Add support for SLH-DSA key pairs.
36723690
- version: REPLACEME
36733691
pr-url: https://github.com/nodejs/node/pull/59461
36743692
description: Add support for ML-KEM key pairs.
@@ -3706,7 +3724,11 @@ changes:
37063724

37073725
* `type` {string} Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`,
37083726
`'ed448'`, `'x25519'`, `'x448'`, `'dh'`, `'ml-dsa-44'`[^openssl35],
3709-
`'ml-dsa-65'`[^openssl35], or `'ml-dsa-87'`[^openssl35].
3727+
`'ml-dsa-65'`[^openssl35], `'ml-dsa-87'`[^openssl35], `'slh-dsa-sha2-128f'`[^openssl35],
3728+
`'slh-dsa-sha2-128s'`[^openssl35], `'slh-dsa-sha2-192f'`[^openssl35], `'slh-dsa-sha2-192s'`[^openssl35],
3729+
`'slh-dsa-sha2-256f'`[^openssl35], `'slh-dsa-sha2-256s'`[^openssl35], `'slh-dsa-shake-128f'`[^openssl35],
3730+
`'slh-dsa-shake-128s'`[^openssl35], `'slh-dsa-shake-192f'`[^openssl35], `'slh-dsa-shake-192s'`[^openssl35],
3731+
`'slh-dsa-shake-256f'`[^openssl35], `'slh-dsa-shake-256s'`[^openssl35]
37103732
* `options` {Object}
37113733
* `modulusLength` {number} Key size in bits (RSA, DSA).
37123734
* `publicExponent` {number} Public exponent (RSA). **Default:** `0x10001`.
@@ -3795,6 +3817,9 @@ a `Promise` for an `Object` with `publicKey` and `privateKey` properties.
37953817
<!-- YAML
37963818
added: v10.12.0
37973819
changes:
3820+
- version: REPLACEME
3821+
pr-url: https://github.com/nodejs/node/pull/59461
3822+
description: Add support for SLH-DSA key pairs.
37983823
- version: REPLACEME
37993824
pr-url: https://github.com/nodejs/node/pull/59461
38003825
description: Add support for ML-KEM key pairs.
@@ -3827,7 +3852,11 @@ changes:
38273852

38283853
* `type` {string} Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`,
38293854
`'ed448'`, `'x25519'`, `'x448'`, `'dh'`, `'ml-dsa-44'`[^openssl35],
3830-
`'ml-dsa-65'`[^openssl35], or `'ml-dsa-87'`[^openssl35].
3855+
`'ml-dsa-65'`[^openssl35], `'ml-dsa-87'`[^openssl35], `'slh-dsa-sha2-128f'`[^openssl35],
3856+
`'slh-dsa-sha2-128s'`[^openssl35], `'slh-dsa-sha2-192f'`[^openssl35], `'slh-dsa-sha2-192s'`[^openssl35],
3857+
`'slh-dsa-sha2-256f'`[^openssl35], `'slh-dsa-sha2-256s'`[^openssl35], `'slh-dsa-shake-128f'`[^openssl35],
3858+
`'slh-dsa-shake-128s'`[^openssl35], `'slh-dsa-shake-192f'`[^openssl35], `'slh-dsa-shake-192s'`[^openssl35],
3859+
`'slh-dsa-shake-256f'`[^openssl35], `'slh-dsa-shake-256s'`[^openssl35]
38313860
* `options` {Object}
38323861
* `modulusLength` {number} Key size in bits (RSA, DSA).
38333862
* `publicExponent` {number} Public exponent (RSA). **Default:** `0x10001`.
@@ -5451,6 +5480,9 @@ Throws an error if FIPS mode is not available.
54515480
<!-- YAML
54525481
added: v12.0.0
54535482
changes:
5483+
- version: REPLACEME
5484+
pr-url: https://github.com/nodejs/node/pull/59461
5485+
description: Add support for SLH-DSA signing.
54545486
- version: v24.6.0
54555487
pr-url: https://github.com/nodejs/node/pull/59259
54565488
description: Add support for ML-DSA signing.
@@ -5567,6 +5599,9 @@ not introduce timing vulnerabilities.
55675599
<!-- YAML
55685600
added: v12.0.0
55695601
changes:
5602+
- version: REPLACEME
5603+
pr-url: https://github.com/nodejs/node/pull/59461
5604+
description: Add support for SLH-DSA signature verification.
55705605
- version: v24.6.0
55715606
pr-url: https://github.com/nodejs/node/pull/59259
55725607
description: Add support for ML-DSA signature verification.

β€Žlib/internal/crypto/keygen.jsβ€Ž

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@ const {
2525
EVP_PKEY_ML_KEM_1024,
2626
EVP_PKEY_ML_KEM_512,
2727
EVP_PKEY_ML_KEM_768,
28+
EVP_PKEY_SLH_DSA_SHA2_128F,
29+
EVP_PKEY_SLH_DSA_SHA2_128S,
30+
EVP_PKEY_SLH_DSA_SHA2_192F,
31+
EVP_PKEY_SLH_DSA_SHA2_192S,
32+
EVP_PKEY_SLH_DSA_SHA2_256F,
33+
EVP_PKEY_SLH_DSA_SHA2_256S,
34+
EVP_PKEY_SLH_DSA_SHAKE_128F,
35+
EVP_PKEY_SLH_DSA_SHAKE_128S,
36+
EVP_PKEY_SLH_DSA_SHAKE_192F,
37+
EVP_PKEY_SLH_DSA_SHAKE_192S,
38+
EVP_PKEY_SLH_DSA_SHAKE_256F,
39+
EVP_PKEY_SLH_DSA_SHAKE_256S,
2840
EVP_PKEY_X25519,
2941
EVP_PKEY_X448,
3042
OPENSSL_EC_NAMED_CURVE,
@@ -179,6 +191,18 @@ const ids = {
179191
'ml-kem-512': EVP_PKEY_ML_KEM_512,
180192
'ml-kem-768': EVP_PKEY_ML_KEM_768,
181193
'ml-kem-1024': EVP_PKEY_ML_KEM_1024,
194+
'slh-dsa-sha2-128f': EVP_PKEY_SLH_DSA_SHA2_128F,
195+
'slh-dsa-sha2-128s': EVP_PKEY_SLH_DSA_SHA2_128S,
196+
'slh-dsa-sha2-192f': EVP_PKEY_SLH_DSA_SHA2_192F,
197+
'slh-dsa-sha2-192s': EVP_PKEY_SLH_DSA_SHA2_192S,
198+
'slh-dsa-sha2-256f': EVP_PKEY_SLH_DSA_SHA2_256F,
199+
'slh-dsa-sha2-256s': EVP_PKEY_SLH_DSA_SHA2_256S,
200+
'slh-dsa-shake-128f': EVP_PKEY_SLH_DSA_SHAKE_128F,
201+
'slh-dsa-shake-128s': EVP_PKEY_SLH_DSA_SHAKE_128S,
202+
'slh-dsa-shake-192f': EVP_PKEY_SLH_DSA_SHAKE_192F,
203+
'slh-dsa-shake-192s': EVP_PKEY_SLH_DSA_SHAKE_192S,
204+
'slh-dsa-shake-256f': EVP_PKEY_SLH_DSA_SHAKE_256F,
205+
'slh-dsa-shake-256s': EVP_PKEY_SLH_DSA_SHAKE_256S,
182206
};
183207

184208
function createJob(mode, type, options) {
@@ -303,6 +327,18 @@ function createJob(mode, type, options) {
303327
case 'ml-kem-512':
304328
case 'ml-kem-768':
305329
case 'ml-kem-1024':
330+
case 'slh-dsa-sha2-128f':
331+
case 'slh-dsa-sha2-128s':
332+
case 'slh-dsa-sha2-192f':
333+
case 'slh-dsa-sha2-192s':
334+
case 'slh-dsa-sha2-256f':
335+
case 'slh-dsa-sha2-256s':
336+
case 'slh-dsa-shake-128f':
337+
case 'slh-dsa-shake-128s':
338+
case 'slh-dsa-shake-192f':
339+
case 'slh-dsa-shake-192s':
340+
case 'slh-dsa-shake-256f':
341+
case 'slh-dsa-shake-256s':
306342
{
307343
if (ids[type] === undefined) {
308344
throw new ERR_INVALID_ARG_VALUE('type', type, 'must be a supported key type');

β€Žsrc/crypto/crypto_keys.ccβ€Ž

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,30 @@ Local<Value> KeyObjectHandle::GetAsymmetricKeyType() const {
984984
return env()->crypto_ml_kem_768_string();
985985
case EVP_PKEY_ML_KEM_1024:
986986
return env()->crypto_ml_kem_1024_string();
987+
case EVP_PKEY_SLH_DSA_SHA2_128F:
988+
return env()->crypto_slh_dsa_sha2_128f_string();
989+
case EVP_PKEY_SLH_DSA_SHA2_128S:
990+
return env()->crypto_slh_dsa_sha2_128s_string();
991+
case EVP_PKEY_SLH_DSA_SHA2_192F:
992+
return env()->crypto_slh_dsa_sha2_192f_string();
993+
case EVP_PKEY_SLH_DSA_SHA2_192S:
994+
return env()->crypto_slh_dsa_sha2_192s_string();
995+
case EVP_PKEY_SLH_DSA_SHA2_256F:
996+
return env()->crypto_slh_dsa_sha2_256f_string();
997+
case EVP_PKEY_SLH_DSA_SHA2_256S:
998+
return env()->crypto_slh_dsa_sha2_256s_string();
999+
case EVP_PKEY_SLH_DSA_SHAKE_128F:
1000+
return env()->crypto_slh_dsa_shake_128f_string();
1001+
case EVP_PKEY_SLH_DSA_SHAKE_128S:
1002+
return env()->crypto_slh_dsa_shake_128s_string();
1003+
case EVP_PKEY_SLH_DSA_SHAKE_192F:
1004+
return env()->crypto_slh_dsa_shake_192f_string();
1005+
case EVP_PKEY_SLH_DSA_SHAKE_192S:
1006+
return env()->crypto_slh_dsa_shake_192s_string();
1007+
case EVP_PKEY_SLH_DSA_SHAKE_256F:
1008+
return env()->crypto_slh_dsa_shake_256f_string();
1009+
case EVP_PKEY_SLH_DSA_SHAKE_256S:
1010+
return env()->crypto_slh_dsa_shake_256s_string();
9871011
#endif
9881012
default:
9891013
return Undefined(env()->isolate());
@@ -1267,6 +1291,18 @@ void Initialize(Environment* env, Local<Object> target) {
12671291
NODE_DEFINE_CONSTANT(target, EVP_PKEY_ML_KEM_512);
12681292
NODE_DEFINE_CONSTANT(target, EVP_PKEY_ML_KEM_768);
12691293
NODE_DEFINE_CONSTANT(target, EVP_PKEY_ML_KEM_1024);
1294+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHA2_128F);
1295+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHA2_128S);
1296+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHA2_192F);
1297+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHA2_192S);
1298+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHA2_256F);
1299+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHA2_256S);
1300+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHAKE_128F);
1301+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHAKE_128S);
1302+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHAKE_192F);
1303+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHAKE_192S);
1304+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHAKE_256F);
1305+
NODE_DEFINE_CONSTANT(target, EVP_PKEY_SLH_DSA_SHAKE_256S);
12701306
#endif
12711307
NODE_DEFINE_CONSTANT(target, EVP_PKEY_X25519);
12721308
NODE_DEFINE_CONSTANT(target, EVP_PKEY_X448);

β€Žsrc/env_properties.hβ€Ž

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,18 @@
121121
V(crypto_ml_kem_512_string, "ml-kem-512") \
122122
V(crypto_ml_kem_768_string, "ml-kem-768") \
123123
V(crypto_ml_kem_1024_string, "ml-kem-1024") \
124+
V(crypto_slh_dsa_sha2_128f_string, "slh-dsa-sha2-128f") \
125+
V(crypto_slh_dsa_sha2_128s_string, "slh-dsa-sha2-128s") \
126+
V(crypto_slh_dsa_sha2_192f_string, "slh-dsa-sha2-192f") \
127+
V(crypto_slh_dsa_sha2_192s_string, "slh-dsa-sha2-192s") \
128+
V(crypto_slh_dsa_sha2_256f_string, "slh-dsa-sha2-256f") \
129+
V(crypto_slh_dsa_sha2_256s_string, "slh-dsa-sha2-256s") \
130+
V(crypto_slh_dsa_shake_128f_string, "slh-dsa-shake-128f") \
131+
V(crypto_slh_dsa_shake_128s_string, "slh-dsa-shake-128s") \
132+
V(crypto_slh_dsa_shake_192f_string, "slh-dsa-shake-192f") \
133+
V(crypto_slh_dsa_shake_192s_string, "slh-dsa-shake-192s") \
134+
V(crypto_slh_dsa_shake_256f_string, "slh-dsa-shake-256f") \
135+
V(crypto_slh_dsa_shake_256s_string, "slh-dsa-shake-256s") \
124136
V(crypto_x25519_string, "x25519") \
125137
V(crypto_x448_string, "x448") \
126138
V(crypto_rsa_string, "rsa") \

β€Žtest/fixtures/keys/Makefileβ€Ž

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,30 @@ all: \
122122
ml_kem_1024_private_seed_only.pem \
123123
ml_kem_1024_private_priv_only.pem \
124124
ml_kem_1024_public.pem \
125+
slh_dsa_sha2_128s_private.pem \
126+
slh_dsa_sha2_128s_public.pem \
127+
slh_dsa_sha2_128f_private.pem \
128+
slh_dsa_sha2_128f_public.pem \
129+
slh_dsa_sha2_192s_private.pem \
130+
slh_dsa_sha2_192s_public.pem \
131+
slh_dsa_sha2_192f_private.pem \
132+
slh_dsa_sha2_192f_public.pem \
133+
slh_dsa_sha2_256s_private.pem \
134+
slh_dsa_sha2_256s_public.pem \
135+
slh_dsa_sha2_256f_private.pem \
136+
slh_dsa_sha2_256f_public.pem \
137+
slh_dsa_shake_128s_private.pem \
138+
slh_dsa_shake_128s_public.pem \
139+
slh_dsa_shake_128f_private.pem \
140+
slh_dsa_shake_128f_public.pem \
141+
slh_dsa_shake_192s_private.pem \
142+
slh_dsa_shake_192s_public.pem \
143+
slh_dsa_shake_192f_private.pem \
144+
slh_dsa_shake_192f_public.pem \
145+
slh_dsa_shake_256s_private.pem \
146+
slh_dsa_shake_256s_public.pem \
147+
slh_dsa_shake_256f_private.pem \
148+
slh_dsa_shake_256f_public.pem \
125149

126150
#
127151
# Create Certificate Authority: ca1
@@ -879,6 +903,78 @@ ed448_private.pem:
879903
ed448_public.pem: ed448_private.pem
880904
openssl pkey -in ed448_private.pem -pubout -out ed448_public.pem
881905

906+
slh_dsa_sha2_128s_private.pem:
907+
openssl genpkey -algorithm slh-dsa-sha2-128s -out slh_dsa_sha2_128s_private.pem
908+
909+
slh_dsa_sha2_128s_public.pem: slh_dsa_sha2_128s_private.pem
910+
openssl pkey -in slh_dsa_sha2_128s_private.pem -pubout -out slh_dsa_sha2_128s_public.pem
911+
912+
slh_dsa_sha2_128f_private.pem:
913+
openssl genpkey -algorithm slh-dsa-sha2-128f -out slh_dsa_sha2_128f_private.pem
914+
915+
slh_dsa_sha2_128f_public.pem: slh_dsa_sha2_128f_private.pem
916+
openssl pkey -in slh_dsa_sha2_128f_private.pem -pubout -out slh_dsa_sha2_128f_public.pem
917+
918+
slh_dsa_sha2_192s_private.pem:
919+
openssl genpkey -algorithm slh-dsa-sha2-192s -out slh_dsa_sha2_192s_private.pem
920+
921+
slh_dsa_sha2_192s_public.pem: slh_dsa_sha2_192s_private.pem
922+
openssl pkey -in slh_dsa_sha2_192s_private.pem -pubout -out slh_dsa_sha2_192s_public.pem
923+
924+
slh_dsa_sha2_192f_private.pem:
925+
openssl genpkey -algorithm slh-dsa-sha2-192f -out slh_dsa_sha2_192f_private.pem
926+
927+
slh_dsa_sha2_192f_public.pem: slh_dsa_sha2_192f_private.pem
928+
openssl pkey -in slh_dsa_sha2_192f_private.pem -pubout -out slh_dsa_sha2_192f_public.pem
929+
930+
slh_dsa_sha2_256s_private.pem:
931+
openssl genpkey -algorithm slh-dsa-sha2-256s -out slh_dsa_sha2_256s_private.pem
932+
933+
slh_dsa_sha2_256s_public.pem: slh_dsa_sha2_256s_private.pem
934+
openssl pkey -in slh_dsa_sha2_256s_private.pem -pubout -out slh_dsa_sha2_256s_public.pem
935+
936+
slh_dsa_sha2_256f_private.pem:
937+
openssl genpkey -algorithm slh-dsa-sha2-256f -out slh_dsa_sha2_256f_private.pem
938+
939+
slh_dsa_sha2_256f_public.pem: slh_dsa_sha2_256f_private.pem
940+
openssl pkey -in slh_dsa_sha2_256f_private.pem -pubout -out slh_dsa_sha2_256f_public.pem
941+
942+
slh_dsa_shake_128s_private.pem:
943+
openssl genpkey -algorithm slh-dsa-shake-128s -out slh_dsa_shake_128s_private.pem
944+
945+
slh_dsa_shake_128s_public.pem: slh_dsa_shake_128s_private.pem
946+
openssl pkey -in slh_dsa_shake_128s_private.pem -pubout -out slh_dsa_shake_128s_public.pem
947+
948+
slh_dsa_shake_128f_private.pem:
949+
openssl genpkey -algorithm slh-dsa-shake-128f -out slh_dsa_shake_128f_private.pem
950+
951+
slh_dsa_shake_128f_public.pem: slh_dsa_shake_128f_private.pem
952+
openssl pkey -in slh_dsa_shake_128f_private.pem -pubout -out slh_dsa_shake_128f_public.pem
953+
954+
slh_dsa_shake_192s_private.pem:
955+
openssl genpkey -algorithm slh-dsa-shake-192s -out slh_dsa_shake_192s_private.pem
956+
957+
slh_dsa_shake_192s_public.pem: slh_dsa_shake_192s_private.pem
958+
openssl pkey -in slh_dsa_shake_192s_private.pem -pubout -out slh_dsa_shake_192s_public.pem
959+
960+
slh_dsa_shake_192f_private.pem:
961+
openssl genpkey -algorithm slh-dsa-shake-192f -out slh_dsa_shake_192f_private.pem
962+
963+
slh_dsa_shake_192f_public.pem: slh_dsa_shake_192f_private.pem
964+
openssl pkey -in slh_dsa_shake_192f_private.pem -pubout -out slh_dsa_shake_192f_public.pem
965+
966+
slh_dsa_shake_256s_private.pem:
967+
openssl genpkey -algorithm slh-dsa-shake-256s -out slh_dsa_shake_256s_private.pem
968+
969+
slh_dsa_shake_256s_public.pem: slh_dsa_shake_256s_private.pem
970+
openssl pkey -in slh_dsa_shake_256s_private.pem -pubout -out slh_dsa_shake_256s_public.pem
971+
972+
slh_dsa_shake_256f_private.pem:
973+
openssl genpkey -algorithm slh-dsa-shake-256f -out slh_dsa_shake_256f_private.pem
974+
975+
slh_dsa_shake_256f_public.pem: slh_dsa_shake_256f_private.pem
976+
openssl pkey -in slh_dsa_shake_256f_private.pem -pubout -out slh_dsa_shake_256f_public.pem
977+
882978
ml_dsa_44_private.pem:
883979
openssl genpkey -algorithm ml-dsa-44 -out ml_dsa_44_private.pem
884980

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MFICAQAwCwYJYIZIAWUDBAMVBECSzBw9GGOCapA9uSDmWwzK5By75k4dJZt9GEv7
3+
aWL4AaTAj1duAUPpfzUlsf0d8m4lfHy9jWFFVRm/lzWoT3XK
4+
-----END PRIVATE KEY-----
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MDAwCwYJYIZIAWUDBAMVAyEApMCPV24BQ+l/NSWx/R3ybiV8fL2NYUVVGb+XNahP
3+
dco=
4+
-----END PUBLIC KEY-----
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MFICAQAwCwYJYIZIAWUDBAMUBEBW0ndyA81L0ztiRuOj7qOh5x71MsGmGPZuq1oP
3+
LhR+9pUy5kK0mnqETDzlxw84Inja0BQ5haLCB5dVeguERf4t
4+
-----END PRIVATE KEY-----

0 commit comments

Comments
Β (0)