Skip to content

Commit 5ff148f

Browse files
author
royb
committed
added NIST OIDS for ML-KEM, "pure" ML-DSA, "pure" SLH-DSA
1 parent 35b8a44 commit 5ff148f

File tree

23 files changed

+300
-128
lines changed

23 files changed

+300
-128
lines changed

core/src/main/java/org/bouncycastle/asn1/nist/NISTObjectIdentifiers.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,4 +226,56 @@ public interface NISTObjectIdentifiers
226226
static final ASN1ObjectIdentifier id_rsassa_pkcs1_v1_5_with_sha3_384 = sigAlgs.branch("15");
227227
/** 2.16.840.1.101.3.4.3.16 */
228228
static final ASN1ObjectIdentifier id_rsassa_pkcs1_v1_5_with_sha3_512 = sigAlgs.branch("16");
229+
230+
// "pure" ML-DSA
231+
/** 2.16.840.1.101.3.4.3.17 */
232+
static final ASN1ObjectIdentifier id_ml_dsa_44 = sigAlgs.branch("17");
233+
/** 2.16.840.1.101.3.4.3.18 */
234+
static final ASN1ObjectIdentifier id_ml_dsa_65 = sigAlgs.branch("18");
235+
/** 2.16.840.1.101.3.4.3.19 */
236+
static final ASN1ObjectIdentifier id_ml_dsa_87 = sigAlgs.branch("19");
237+
238+
// "pure" SLH-DSA
239+
/** 2.16.840.1.101.3.4.3.20 */
240+
static final ASN1ObjectIdentifier id_slh_dsa_sha2_128s = sigAlgs.branch("20");
241+
/** 2.16.840.1.101.3.4.3.21 */
242+
static final ASN1ObjectIdentifier id_slh_dsa_sha2_128f = sigAlgs.branch("21");
243+
/** 2.16.840.1.101.3.4.3.22 */
244+
static final ASN1ObjectIdentifier id_slh_dsa_sha2_192s = sigAlgs.branch("22");
245+
/** 2.16.840.1.101.3.4.3.23 */
246+
static final ASN1ObjectIdentifier id_slh_dsa_sha2_192f = sigAlgs.branch("23");
247+
/** 2.16.840.1.101.3.4.3.24 */
248+
static final ASN1ObjectIdentifier id_slh_dsa_sha2_256s = sigAlgs.branch("24");
249+
/** 2.16.840.1.101.3.4.3.25 */
250+
static final ASN1ObjectIdentifier id_slh_dsa_sha2_256f = sigAlgs.branch("25");
251+
/** 2.16.840.1.101.3.4.3.26 */
252+
static final ASN1ObjectIdentifier id_slh_dsa_shake_128s = sigAlgs.branch("26");
253+
/** 2.16.840.1.101.3.4.3.27 */
254+
static final ASN1ObjectIdentifier id_slh_dsa_shake_128f = sigAlgs.branch("27");
255+
/** 2.16.840.1.101.3.4.3.28 */
256+
static final ASN1ObjectIdentifier id_slh_dsa_shake_192s = sigAlgs.branch("28");
257+
/** 2.16.840.1.101.3.4.3.29 */
258+
static final ASN1ObjectIdentifier id_slh_dsa_shake_192f = sigAlgs.branch("29");
259+
/** 2.16.840.1.101.3.4.3.30 */
260+
static final ASN1ObjectIdentifier id_slh_dsa_shake_256s = sigAlgs.branch("30");
261+
/** 2.16.840.1.101.3.4.3.31 */
262+
static final ASN1ObjectIdentifier id_slh_dsa_shake_256f = sigAlgs.branch("31");
263+
264+
265+
//
266+
// KEMs - Key-Establishment Mechanisms
267+
//
268+
/**
269+
* 2.16.840.1.101.3.4.4
270+
*/
271+
static final ASN1ObjectIdentifier kems = nistAlgorithm.branch("4");
272+
273+
// ML-KEM
274+
/** 2.16.840.1.101.3.4.4.1 */
275+
static final ASN1ObjectIdentifier id_alg_ml_kem_512 = kems.branch("1");
276+
/** 2.16.840.1.101.3.4.4.2 */
277+
static final ASN1ObjectIdentifier id_alg_ml_kem_768 = kems.branch("2");
278+
/** 2.16.840.1.101.3.4.4.3 */
279+
static final ASN1ObjectIdentifier id_alg_ml_kem_1024 = kems.branch("3");
280+
229281
}

core/src/main/java/org/bouncycastle/pqc/crypto/util/PrivateKeyFactory.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.bouncycastle.asn1.ASN1Sequence;
1414
import org.bouncycastle.asn1.DEROctetString;
1515
import org.bouncycastle.asn1.bc.BCObjectIdentifiers;
16+
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
1617
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
1718
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
1819
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
@@ -224,7 +225,9 @@ else if (algOID.on(BCObjectIdentifiers.pqc_kem_ntru))
224225

225226
return new NTRUPrivateKeyParameters(spParams, keyEnc);
226227
}
227-
else if (algOID.on(BCObjectIdentifiers.pqc_kem_kyber))
228+
else if (algOID.equals(NISTObjectIdentifiers.id_alg_ml_kem_512) ||
229+
algOID.equals(NISTObjectIdentifiers.id_alg_ml_kem_768) ||
230+
algOID.equals(NISTObjectIdentifiers.id_alg_ml_kem_1024))
228231
{
229232
ASN1OctetString kyberKey = ASN1OctetString.getInstance(keyInfo.parsePrivateKey());
230233
KyberParameters kyberParams = Utils.kyberParamsLookup(algOID);
@@ -256,8 +259,8 @@ else if (algOID.on(BCObjectIdentifiers.pqc_kem_sntruprime))
256259
ASN1OctetString.getInstance(keyEnc.getObjectAt(3)).getOctets(),
257260
ASN1OctetString.getInstance(keyEnc.getObjectAt(4)).getOctets());
258261
}
259-
else if (algOID.equals(BCObjectIdentifiers.dilithium2)
260-
|| algOID.equals(BCObjectIdentifiers.dilithium3) || algOID.equals(BCObjectIdentifiers.dilithium5))
262+
else if (algOID.equals(NISTObjectIdentifiers.id_ml_dsa_44)
263+
|| algOID.equals(NISTObjectIdentifiers.id_ml_dsa_65) || algOID.equals(NISTObjectIdentifiers.id_ml_dsa_87))
261264
{
262265
ASN1Encodable keyObj = keyInfo.parsePrivateKey();
263266
DilithiumParameters spParams = Utils.dilithiumParamsLookup(algOID);

core/src/main/java/org/bouncycastle/pqc/crypto/util/PublicKeyFactory.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.bouncycastle.asn1.ASN1Primitive;
1313
import org.bouncycastle.asn1.ASN1Sequence;
1414
import org.bouncycastle.asn1.bc.BCObjectIdentifiers;
15+
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
1516
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
1617
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
1718
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
@@ -87,6 +88,19 @@ public class PublicKeyFactory
8788
converters.put(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig, new LMSConverter());
8889
converters.put(PQCObjectIdentifiers.mcElieceCca2, new McElieceCCA2Converter());
8990
converters.put(BCObjectIdentifiers.sphincsPlus, new SPHINCSPlusConverter());
91+
converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_128s, new SPHINCSPlusConverter());
92+
converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_128f, new SPHINCSPlusConverter());
93+
converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_192s, new SPHINCSPlusConverter());
94+
converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_192f, new SPHINCSPlusConverter());
95+
converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_256s, new SPHINCSPlusConverter());
96+
converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_256f, new SPHINCSPlusConverter());
97+
converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_128s, new SPHINCSPlusConverter());
98+
converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_128f, new SPHINCSPlusConverter());
99+
converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_192s, new SPHINCSPlusConverter());
100+
converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_192f, new SPHINCSPlusConverter());
101+
converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_256s, new SPHINCSPlusConverter());
102+
converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_256f, new SPHINCSPlusConverter());
103+
90104
converters.put(BCObjectIdentifiers.sphincsPlus_sha2_128s_r3, new SPHINCSPlusConverter());
91105
converters.put(BCObjectIdentifiers.sphincsPlus_sha2_128f_r3, new SPHINCSPlusConverter());
92106
converters.put(BCObjectIdentifiers.sphincsPlus_shake_128s_r3, new SPHINCSPlusConverter());
@@ -105,23 +119,10 @@ public class PublicKeyFactory
105119
converters.put(BCObjectIdentifiers.sphincsPlus_shake_256f_r3, new SPHINCSPlusConverter());
106120
converters.put(BCObjectIdentifiers.sphincsPlus_haraka_256s_r3, new SPHINCSPlusConverter());
107121
converters.put(BCObjectIdentifiers.sphincsPlus_haraka_256f_r3, new SPHINCSPlusConverter());
108-
109-
converters.put(BCObjectIdentifiers.sphincsPlus_sha2_128s_r3_simple, new SPHINCSPlusConverter());
110-
converters.put(BCObjectIdentifiers.sphincsPlus_sha2_128f_r3_simple, new SPHINCSPlusConverter());
111-
converters.put(BCObjectIdentifiers.sphincsPlus_shake_128s_r3_simple, new SPHINCSPlusConverter());
112-
converters.put(BCObjectIdentifiers.sphincsPlus_shake_128f_r3_simple, new SPHINCSPlusConverter());
113122
converters.put(BCObjectIdentifiers.sphincsPlus_haraka_128s_r3_simple, new SPHINCSPlusConverter());
114123
converters.put(BCObjectIdentifiers.sphincsPlus_haraka_128f_r3_simple, new SPHINCSPlusConverter());
115-
converters.put(BCObjectIdentifiers.sphincsPlus_sha2_192s_r3_simple, new SPHINCSPlusConverter());
116-
converters.put(BCObjectIdentifiers.sphincsPlus_sha2_192f_r3_simple, new SPHINCSPlusConverter());
117-
converters.put(BCObjectIdentifiers.sphincsPlus_shake_192s_r3_simple, new SPHINCSPlusConverter());
118-
converters.put(BCObjectIdentifiers.sphincsPlus_shake_192f_r3_simple, new SPHINCSPlusConverter());
119124
converters.put(BCObjectIdentifiers.sphincsPlus_haraka_192s_r3_simple, new SPHINCSPlusConverter());
120125
converters.put(BCObjectIdentifiers.sphincsPlus_haraka_192f_r3_simple, new SPHINCSPlusConverter());
121-
converters.put(BCObjectIdentifiers.sphincsPlus_sha2_256s_r3_simple, new SPHINCSPlusConverter());
122-
converters.put(BCObjectIdentifiers.sphincsPlus_sha2_256f_r3_simple, new SPHINCSPlusConverter());
123-
converters.put(BCObjectIdentifiers.sphincsPlus_shake_256s_r3_simple, new SPHINCSPlusConverter());
124-
converters.put(BCObjectIdentifiers.sphincsPlus_shake_256f_r3_simple, new SPHINCSPlusConverter());
125126
converters.put(BCObjectIdentifiers.sphincsPlus_haraka_256s_r3_simple, new SPHINCSPlusConverter());
126127
converters.put(BCObjectIdentifiers.sphincsPlus_haraka_256f_r3_simple, new SPHINCSPlusConverter());
127128

@@ -193,9 +194,9 @@ public class PublicKeyFactory
193194
converters.put(BCObjectIdentifiers.ntruhrss1373, new NtruConverter());
194195
converters.put(BCObjectIdentifiers.falcon_512, new FalconConverter());
195196
converters.put(BCObjectIdentifiers.falcon_1024, new FalconConverter());
196-
converters.put(BCObjectIdentifiers.kyber512, new KyberConverter());
197-
converters.put(BCObjectIdentifiers.kyber768, new KyberConverter());
198-
converters.put(BCObjectIdentifiers.kyber1024, new KyberConverter());
197+
converters.put(NISTObjectIdentifiers.id_alg_ml_kem_512, new KyberConverter());
198+
converters.put(NISTObjectIdentifiers.id_alg_ml_kem_768, new KyberConverter());
199+
converters.put(NISTObjectIdentifiers.id_alg_ml_kem_1024, new KyberConverter());
199200
converters.put(BCObjectIdentifiers.kyber512_aes, new KyberConverter());
200201
converters.put(BCObjectIdentifiers.kyber768_aes, new KyberConverter());
201202
converters.put(BCObjectIdentifiers.kyber1024_aes, new KyberConverter());
@@ -211,9 +212,9 @@ public class PublicKeyFactory
211212
converters.put(BCObjectIdentifiers.sntrup953, new SNTRUPrimeConverter());
212213
converters.put(BCObjectIdentifiers.sntrup1013, new SNTRUPrimeConverter());
213214
converters.put(BCObjectIdentifiers.sntrup1277, new SNTRUPrimeConverter());
214-
converters.put(BCObjectIdentifiers.dilithium2, new DilithiumConverter());
215-
converters.put(BCObjectIdentifiers.dilithium3, new DilithiumConverter());
216-
converters.put(BCObjectIdentifiers.dilithium5, new DilithiumConverter());
215+
converters.put(NISTObjectIdentifiers.id_ml_dsa_44, new DilithiumConverter());
216+
converters.put(NISTObjectIdentifiers.id_ml_dsa_65, new DilithiumConverter());
217+
converters.put(NISTObjectIdentifiers.id_ml_dsa_87, new DilithiumConverter());
217218
converters.put(BCObjectIdentifiers.dilithium2_aes, new DilithiumConverter());
218219
converters.put(BCObjectIdentifiers.dilithium3_aes, new DilithiumConverter());
219220
converters.put(BCObjectIdentifiers.dilithium5_aes, new DilithiumConverter());

0 commit comments

Comments
 (0)