Skip to content

Commit 3d9111d

Browse files
committed
First round at upgrading to draft-13 with IANA oids and new labels.
1 parent 88725a9 commit 3d9111d

File tree

9 files changed

+360
-462
lines changed

9 files changed

+360
-462
lines changed

pkix/src/main/java/org/bouncycastle/operator/DefaultSignatureAlgorithmIdentifierFinder.java

Lines changed: 38 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.bouncycastle.asn1.eac.EACObjectIdentifiers;
1616
import org.bouncycastle.asn1.edec.EdECObjectIdentifiers;
1717
import org.bouncycastle.asn1.gm.GMObjectIdentifiers;
18+
import org.bouncycastle.asn1.iana.IANAObjectIdentifiers;
1819
import org.bouncycastle.asn1.isara.IsaraObjectIdentifiers;
1920
import org.bouncycastle.asn1.misc.MiscObjectIdentifiers;
2021
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
@@ -309,18 +310,7 @@ private static RSASSAPSSparams createPSSParams(AlgorithmIdentifier hashAlgId, in
309310
addAlgorithm("SHA512WITHPICNIC", BCObjectIdentifiers.picnic_with_sha512);
310311
addAlgorithm("SHA3-512WITHPICNIC", BCObjectIdentifiers.picnic_with_sha3_512);
311312
addAlgorithm("SHAKE256WITHPICNIC", BCObjectIdentifiers.picnic_with_shake256);
312-
313-
addAlgorithm("MLDSA65-RSA3072-PSS-SHA256", MiscObjectIdentifiers.id_MLDSA65_RSA3072_PSS_SHA256);
314-
addAlgorithm("MLDSA65-RSA3072-PKCS15-SHA256", MiscObjectIdentifiers.id_MLDSA65_RSA3072_PKCS15_SHA256);
315-
addAlgorithm("MLDSA65-RSA4096-PSS-SHA384", MiscObjectIdentifiers.id_MLDSA65_RSA4096_PSS_SHA384);
316-
addAlgorithm("MLDSA65-RSA4096-PKCS15-SHA384", MiscObjectIdentifiers.id_MLDSA65_RSA4096_PKCS15_SHA384);
317-
addAlgorithm("MLDSA65-ECDSA-P384-SHA384", MiscObjectIdentifiers.id_MLDSA65_ECDSA_P384_SHA384);
318-
addAlgorithm("MLDSA65-ECDSA-BRAINPOOLP256R1-SHA256", MiscObjectIdentifiers.id_MLDSA65_ECDSA_brainpoolP256r1_SHA256);
319-
addAlgorithm("MLDSA65-ED25519-SHA512", MiscObjectIdentifiers.id_MLDSA65_Ed25519_SHA512);
320-
addAlgorithm("MLDSA87-ECDSA-P384-SHA384", MiscObjectIdentifiers.id_MLDSA87_ECDSA_P384_SHA384);
321-
addAlgorithm("MLDSA87-ECDSA-BRAINPOOLP384R1-SHA384", MiscObjectIdentifiers.id_MLDSA87_ECDSA_brainpoolP384r1_SHA384);
322-
addAlgorithm("MLDSA87-ED448-SHA512", MiscObjectIdentifiers.id_MLDSA87_Ed448_SHA512);
323-
313+
324314
addAlgorithm("HASHMLDSA44-RSA2048-PSS-SHA256", MiscObjectIdentifiers.id_HashMLDSA44_RSA2048_PSS_SHA256);
325315
addAlgorithm("HASHMLDSA44-RSA2048-PKCS15-SHA256", MiscObjectIdentifiers.id_HashMLDSA44_RSA2048_PKCS15_SHA256);
326316
addAlgorithm("HASHMLDSA44-ED25519-SHA512", MiscObjectIdentifiers.id_HashMLDSA44_Ed25519_SHA512);
@@ -336,24 +326,24 @@ private static RSASSAPSSparams createPSSParams(AlgorithmIdentifier hashAlgId, in
336326
addAlgorithm("HASHMLDSA87-ECDSA-BRAINPOOLP384R1-SHA512", MiscObjectIdentifiers.id_HashMLDSA87_ECDSA_brainpoolP384r1_SHA512);
337327
addAlgorithm("HASHMLDSA87-ED448-SHA512", MiscObjectIdentifiers.id_HashMLDSA87_Ed448_SHA512);
338328

339-
addAlgorithm("MLDSA44-RSA2048-PSS-SHA256", MiscObjectIdentifiers.id_MLDSA44_RSA2048_PSS_SHA256);
340-
addAlgorithm("MLDSA44-RSA2048-PKCS15-SHA256", MiscObjectIdentifiers.id_MLDSA44_RSA2048_PKCS15_SHA256);
341-
addAlgorithm("MLDSA44-ED25519-SHA512", MiscObjectIdentifiers.id_MLDSA44_Ed25519_SHA512);
342-
addAlgorithm("MLDSA44-ECDSA-P256-SHA256", MiscObjectIdentifiers.id_MLDSA44_ECDSA_P256_SHA256);
343-
addAlgorithm("MLDSA65-RSA3072-PSS-SHA512", MiscObjectIdentifiers.id_MLDSA65_RSA3072_PSS_SHA512);
344-
addAlgorithm("MLDSA65-RSA3072-PKCS15-SHA512", MiscObjectIdentifiers.id_MLDSA65_RSA3072_PKCS15_SHA512);
345-
addAlgorithm("MLDSA65-RSA4096-PSS-SHA512", MiscObjectIdentifiers.id_MLDSA65_RSA4096_PSS_SHA512);
346-
addAlgorithm("MLDSA65-RSA4096-PKCS15-SHA512", MiscObjectIdentifiers.id_MLDSA65_RSA4096_PKCS15_SHA512);
347-
addAlgorithm("MLDSA65-ECDSA-P256-SHA512", MiscObjectIdentifiers.id_MLDSA65_ECDSA_P256_SHA512);
348-
addAlgorithm("MLDSA65-ECDSA-P384-SHA512", MiscObjectIdentifiers.id_MLDSA65_ECDSA_P384_SHA512);
349-
addAlgorithm("MLDSA65-ECDSA-BRAINPOOLP256R1-SHA512", MiscObjectIdentifiers.id_MLDSA65_ECDSA_brainpoolP256r1_SHA512);
350-
addAlgorithm("MLDSA65-Ed25519-SHA512", MiscObjectIdentifiers.id_MLDSA65_Ed25519_SHA512);
351-
addAlgorithm("MLDSA87-ECDSA-P384-SHA512", MiscObjectIdentifiers.id_MLDSA87_ECDSA_P384_SHA512);
352-
addAlgorithm("MLDSA87-ECDSA-BRAINPOOLP384R1-SHA512", MiscObjectIdentifiers.id_MLDSA87_ECDSA_brainpoolP384r1_SHA512);
353-
addAlgorithm("MLDSA87-ED448-SHAKE256", MiscObjectIdentifiers.id_MLDSA87_Ed448_SHAKE256);
354-
addAlgorithm("MLDSA87-RSA4096-PSS-SHA512", MiscObjectIdentifiers.id_MLDSA87_RSA4096_PSS_SHA512);
355-
addAlgorithm("MLDSA87-ECDSA-P521-SHA512", MiscObjectIdentifiers.id_MLDSA87_ECDSA_P521_SHA512);
356-
addAlgorithm("MLDSA87-RSA3072-PSS-SHA512", MiscObjectIdentifiers.id_MLDSA87_RSA3072_PSS_SHA512);
329+
addAlgorithm("MLDSA44-RSA2048-PSS-SHA256", IANAObjectIdentifiers.id_MLDSA44_RSA2048_PSS_SHA256);
330+
addAlgorithm("MLDSA44-RSA2048-PKCS15-SHA256", IANAObjectIdentifiers.id_MLDSA44_RSA2048_PKCS15_SHA256);
331+
addAlgorithm("MLDSA44-ED25519-SHA512", IANAObjectIdentifiers.id_MLDSA44_Ed25519_SHA512);
332+
addAlgorithm("MLDSA44-ECDSA-P256-SHA256", IANAObjectIdentifiers.id_MLDSA44_ECDSA_P256_SHA256);
333+
addAlgorithm("MLDSA65-RSA3072-PSS-SHA512", IANAObjectIdentifiers.id_MLDSA65_RSA3072_PSS_SHA512);
334+
addAlgorithm("MLDSA65-RSA3072-PKCS15-SHA512", IANAObjectIdentifiers.id_MLDSA65_RSA3072_PKCS15_SHA512);
335+
addAlgorithm("MLDSA65-RSA4096-PSS-SHA512", IANAObjectIdentifiers.id_MLDSA65_RSA4096_PSS_SHA512);
336+
addAlgorithm("MLDSA65-RSA4096-PKCS15-SHA512", IANAObjectIdentifiers.id_MLDSA65_RSA4096_PKCS15_SHA512);
337+
addAlgorithm("MLDSA65-ECDSA-P256-SHA512", IANAObjectIdentifiers.id_MLDSA65_ECDSA_P256_SHA512);
338+
addAlgorithm("MLDSA65-ECDSA-P384-SHA512", IANAObjectIdentifiers.id_MLDSA65_ECDSA_P384_SHA512);
339+
addAlgorithm("MLDSA65-ECDSA-BRAINPOOLP256R1-SHA512", IANAObjectIdentifiers.id_MLDSA65_ECDSA_brainpoolP256r1_SHA512);
340+
addAlgorithm("MLDSA65-Ed25519-SHA512", IANAObjectIdentifiers.id_MLDSA65_Ed25519_SHA512);
341+
addAlgorithm("MLDSA87-ECDSA-P384-SHA512", IANAObjectIdentifiers.id_MLDSA87_ECDSA_P384_SHA512);
342+
addAlgorithm("MLDSA87-ECDSA-BRAINPOOLP384R1-SHA512", IANAObjectIdentifiers.id_MLDSA87_ECDSA_brainpoolP384r1_SHA512);
343+
addAlgorithm("MLDSA87-ED448-SHAKE256", IANAObjectIdentifiers.id_MLDSA87_Ed448_SHAKE256);
344+
addAlgorithm("MLDSA87-RSA4096-PSS-SHA512", IANAObjectIdentifiers.id_MLDSA87_RSA4096_PSS_SHA512);
345+
addAlgorithm("MLDSA87-ECDSA-P521-SHA512", IANAObjectIdentifiers.id_MLDSA87_ECDSA_P521_SHA512);
346+
addAlgorithm("MLDSA87-RSA3072-PSS-SHA512", IANAObjectIdentifiers.id_MLDSA87_RSA3072_PSS_SHA512);
357347

358348
//
359349
// According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field.
@@ -550,16 +540,6 @@ private static RSASSAPSSparams createPSSParams(AlgorithmIdentifier hashAlgId, in
550540
//
551541
// Composite - Draft 13
552542
//
553-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_RSA3072_PSS_SHA256);
554-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_RSA3072_PKCS15_SHA256);
555-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_RSA4096_PSS_SHA384);
556-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_RSA4096_PKCS15_SHA384);
557-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_ECDSA_P384_SHA384);
558-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_ECDSA_brainpoolP256r1_SHA256);
559-
noParams.add(MiscObjectIdentifiers.id_MLDSA87_ECDSA_P384_SHA384);
560-
noParams.add(MiscObjectIdentifiers.id_MLDSA87_ECDSA_brainpoolP384r1_SHA384);
561-
noParams.add(MiscObjectIdentifiers.id_MLDSA87_Ed448_SHA512);
562-
563543
noParams.add(MiscObjectIdentifiers.id_HashMLDSA44_RSA2048_PSS_SHA256);
564544
noParams.add(MiscObjectIdentifiers.id_HashMLDSA44_RSA2048_PKCS15_SHA256);
565545
noParams.add(MiscObjectIdentifiers.id_HashMLDSA44_Ed25519_SHA512);
@@ -578,24 +558,24 @@ private static RSASSAPSSparams createPSSParams(AlgorithmIdentifier hashAlgId, in
578558
//
579559
// ML-DSA Composite version 7
580560
//
581-
noParams.add(MiscObjectIdentifiers.id_MLDSA44_RSA2048_PSS_SHA256);
582-
noParams.add(MiscObjectIdentifiers.id_MLDSA44_RSA2048_PKCS15_SHA256);
583-
noParams.add(MiscObjectIdentifiers.id_MLDSA44_Ed25519_SHA512);
584-
noParams.add(MiscObjectIdentifiers.id_MLDSA44_ECDSA_P256_SHA256);
585-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_RSA3072_PSS_SHA512);
586-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_RSA3072_PKCS15_SHA512);
587-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_RSA4096_PSS_SHA512);
588-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_RSA4096_PKCS15_SHA512);
589-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_ECDSA_P256_SHA512);
590-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_ECDSA_P384_SHA512);
591-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_ECDSA_brainpoolP256r1_SHA512);
592-
noParams.add(MiscObjectIdentifiers.id_MLDSA65_Ed25519_SHA512);
593-
noParams.add(MiscObjectIdentifiers.id_MLDSA87_ECDSA_P384_SHA512);
594-
noParams.add(MiscObjectIdentifiers.id_MLDSA87_ECDSA_brainpoolP384r1_SHA512);
595-
noParams.add(MiscObjectIdentifiers.id_MLDSA87_Ed448_SHAKE256);
596-
noParams.add(MiscObjectIdentifiers.id_MLDSA87_RSA3072_PSS_SHA512);
597-
noParams.add(MiscObjectIdentifiers.id_MLDSA87_RSA4096_PSS_SHA512);
598-
noParams.add(MiscObjectIdentifiers.id_MLDSA87_ECDSA_P521_SHA512);
561+
noParams.add(IANAObjectIdentifiers.id_MLDSA44_RSA2048_PSS_SHA256);
562+
noParams.add(IANAObjectIdentifiers.id_MLDSA44_RSA2048_PKCS15_SHA256);
563+
noParams.add(IANAObjectIdentifiers.id_MLDSA44_Ed25519_SHA512);
564+
noParams.add(IANAObjectIdentifiers.id_MLDSA44_ECDSA_P256_SHA256);
565+
noParams.add(IANAObjectIdentifiers.id_MLDSA65_RSA3072_PSS_SHA512);
566+
noParams.add(IANAObjectIdentifiers.id_MLDSA65_RSA3072_PKCS15_SHA512);
567+
noParams.add(IANAObjectIdentifiers.id_MLDSA65_RSA4096_PSS_SHA512);
568+
noParams.add(IANAObjectIdentifiers.id_MLDSA65_RSA4096_PKCS15_SHA512);
569+
noParams.add(IANAObjectIdentifiers.id_MLDSA65_ECDSA_P256_SHA512);
570+
noParams.add(IANAObjectIdentifiers.id_MLDSA65_ECDSA_P384_SHA512);
571+
noParams.add(IANAObjectIdentifiers.id_MLDSA65_ECDSA_brainpoolP256r1_SHA512);
572+
noParams.add(IANAObjectIdentifiers.id_MLDSA65_Ed25519_SHA512);
573+
noParams.add(IANAObjectIdentifiers.id_MLDSA87_ECDSA_P384_SHA512);
574+
noParams.add(IANAObjectIdentifiers.id_MLDSA87_ECDSA_brainpoolP384r1_SHA512);
575+
noParams.add(IANAObjectIdentifiers.id_MLDSA87_Ed448_SHAKE256);
576+
noParams.add(IANAObjectIdentifiers.id_MLDSA87_RSA3072_PSS_SHA512);
577+
noParams.add(IANAObjectIdentifiers.id_MLDSA87_RSA4096_PSS_SHA512);
578+
noParams.add(IANAObjectIdentifiers.id_MLDSA87_ECDSA_P521_SHA512);
599579
//
600580
// PKCS 1.5 encrypted algorithms
601581
//

pkix/src/test/java/org/bouncycastle/openssl/test/CompositeKeyTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import junit.framework.TestCase;
2525
import org.bouncycastle.asn1.cms.ContentInfo;
26+
import org.bouncycastle.asn1.iana.IANAObjectIdentifiers;
2627
import org.bouncycastle.asn1.misc.MiscObjectIdentifiers;
2728
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
2829
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
@@ -474,7 +475,7 @@ public void testMLDSA44andP256()
474475
PrivateKey mldsaPriv = mldsaKp.getPrivate();
475476
PublicKey mldsaPub = mldsaKp.getPublic();
476477

477-
CompositePrivateKey mlecPriv = new CompositePrivateKey(MiscObjectIdentifiers.id_MLDSA44_ECDSA_P256_SHA256, mldsaPriv, ecPriv);
478+
CompositePrivateKey mlecPriv = new CompositePrivateKey(IANAObjectIdentifiers.id_MLDSA44_ECDSA_P256_SHA256, mldsaPriv, ecPriv);
478479

479480
StringWriter sWrt = new StringWriter();
480481
JcaPEMWriter pWrt = new JcaPEMWriter(sWrt);
@@ -519,7 +520,7 @@ public void testMLDSA44andEd25519()
519520
PrivateKey mldsaPriv = mldsaKp.getPrivate();
520521
PublicKey mldsaPub = mldsaKp.getPublic();
521522

522-
CompositePrivateKey mlecPriv = new CompositePrivateKey(MiscObjectIdentifiers.id_MLDSA44_Ed25519_SHA512, mldsaPriv, ecPriv);
523+
CompositePrivateKey mlecPriv = new CompositePrivateKey(IANAObjectIdentifiers.id_MLDSA44_Ed25519_SHA512, mldsaPriv, ecPriv);
523524

524525
StringWriter sWrt = new StringWriter();
525526
JcaPEMWriter pWrt = new JcaPEMWriter(sWrt);
@@ -564,7 +565,7 @@ public void testMLDSA87andEd448()
564565
PrivateKey mldsaPriv = mldsaKp.getPrivate();
565566
PublicKey mldsaPub = mldsaKp.getPublic();
566567

567-
CompositePrivateKey mlecPriv = new CompositePrivateKey(MiscObjectIdentifiers.id_MLDSA87_Ed448_SHA512, mldsaPriv, ecPriv);
568+
CompositePrivateKey mlecPriv = new CompositePrivateKey(IANAObjectIdentifiers.id_MLDSA87_Ed448_SHAKE256, mldsaPriv, ecPriv);
568569

569570
StringWriter sWrt = new StringWriter();
570571
JcaPEMWriter pWrt = new JcaPEMWriter(sWrt);

prov/src/main/java/org/bouncycastle/jcajce/CompositePrivateKey.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@
1111
import org.bouncycastle.asn1.ASN1EncodableVector;
1212
import org.bouncycastle.asn1.ASN1Encoding;
1313
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
14+
import org.bouncycastle.asn1.ASN1OctetString;
1415
import org.bouncycastle.asn1.DERSequence;
1516
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
17+
import org.bouncycastle.asn1.sec.ECPrivateKey;
1618
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
19+
import org.bouncycastle.asn1.x9.ECNamedCurveTable;
1720
import org.bouncycastle.crypto.util.PrivateKeyFactory;
1821
import org.bouncycastle.crypto.util.PrivateKeyInfoFactory;
22+
import org.bouncycastle.internal.asn1.iana.IANAObjectIdentifiers;
1923
import org.bouncycastle.internal.asn1.misc.MiscObjectIdentifiers;
2024
import org.bouncycastle.jcajce.interfaces.MLDSAPrivateKey;
2125
import org.bouncycastle.jcajce.provider.asymmetric.compositesignatures.CompositeIndex;
@@ -260,13 +264,24 @@ public String getFormat()
260264
*/
261265
public byte[] getEncoded()
262266
{
263-
if (this.algorithmIdentifier.getAlgorithm().on(MiscObjectIdentifiers.id_MLDSA_COMPSIG))
267+
if (this.algorithmIdentifier.getAlgorithm().on(IANAObjectIdentifiers.id_alg))
264268
{
265269
try
266270
{
267271
byte[] mldsaKey = ((MLDSAPrivateKey)keys.get(0)).getSeed();
268272
PrivateKeyInfo pki = PrivateKeyInfoFactory.createPrivateKeyInfo(PrivateKeyFactory.createKey(keys.get(1).getEncoded()));
269273
byte[] tradKey = pki.getPrivateKey().getOctets();
274+
if (keys.get(1).getAlgorithm().contains("Ed"))
275+
{
276+
tradKey = ASN1OctetString.getInstance(tradKey).getOctets();
277+
}
278+
else if (keys.get(1).getAlgorithm().contains("EC"))
279+
{
280+
ECPrivateKey ecPrivateKey = ECPrivateKey.getInstance(tradKey);
281+
282+
tradKey = new ECPrivateKey(ECNamedCurveTable.getByOID(
283+
ASN1ObjectIdentifier.getInstance(ecPrivateKey.getParametersObject())).getCurve().getFieldSize(), ecPrivateKey.getKey(), ecPrivateKey.getParametersObject()).getEncoded();
284+
}
270285
return new PrivateKeyInfo(algorithmIdentifier, Arrays.concatenate(mldsaKey, tradKey)).getEncoded();
271286
}
272287
catch (IOException e)

prov/src/main/java/org/bouncycastle/jcajce/CompositePublicKey.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
1717
import org.bouncycastle.crypto.util.PublicKeyFactory;
1818
import org.bouncycastle.crypto.util.SubjectPublicKeyInfoFactory;
19+
import org.bouncycastle.internal.asn1.iana.IANAObjectIdentifiers;
1920
import org.bouncycastle.internal.asn1.misc.MiscObjectIdentifiers;
2021
import org.bouncycastle.jcajce.provider.asymmetric.compositesignatures.CompositeIndex;
2122
import org.bouncycastle.jcajce.provider.asymmetric.compositesignatures.KeyFactorySpi;
@@ -242,7 +243,7 @@ public String getFormat()
242243
@Override
243244
public byte[] getEncoded()
244245
{
245-
if (this.algorithmIdentifier.getAlgorithm().on(MiscObjectIdentifiers.id_MLDSA_COMPSIG))
246+
if (this.algorithmIdentifier.getAlgorithm().on(IANAObjectIdentifiers.id_alg))
246247
{
247248
try
248249
{

0 commit comments

Comments
 (0)