Skip to content

Commit f82ae92

Browse files
author
gefeili
committed
Merge branch 'main' into pqc-snova
2 parents bfa82f1 + 46e0360 commit f82ae92

File tree

7 files changed

+58
-88
lines changed

7 files changed

+58
-88
lines changed

core/src/main/java/org/bouncycastle/asn1/bc/BCObjectIdentifiers.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -429,20 +429,7 @@ public interface BCObjectIdentifiers
429429
ASN1ObjectIdentifier hqc128 = pqc_kem_hqc.branch("1");
430430
ASN1ObjectIdentifier hqc192 = pqc_kem_hqc.branch("2");
431431
ASN1ObjectIdentifier hqc256 = pqc_kem_hqc.branch("3");
432-
433-
/**
434-
* ML-KEM/ML-DSA seed parameters algorithms - temporary
435-
*/
436-
//TODO: delete before release
437-
ASN1ObjectIdentifier id_id_alg_seed = bc.branch("10");
438-
439-
ASN1ObjectIdentifier id_id_alg_ml_dsa_44_seed = id_id_alg_seed.branch("1");
440-
ASN1ObjectIdentifier id_id_alg_ml_dsa_65_seed = id_id_alg_seed.branch("2");
441-
ASN1ObjectIdentifier id_id_alg_ml_dsa_87_seed = id_id_alg_seed.branch("3");
442-
ASN1ObjectIdentifier id_id_alg_ml_kem_512_seed = id_id_alg_seed.branch("4");
443-
ASN1ObjectIdentifier id_id_alg_ml_kem_768_seed = id_id_alg_seed.branch("5");
444-
ASN1ObjectIdentifier id_id_alg_ml_kem_1024_seed = id_id_alg_seed.branch("6");
445-
432+
446433
/**
447434
* Mayo
448435
*/

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -662,23 +662,23 @@ static class MLKEMConverter
662662
AsymmetricKeyParameter getPublicKeyParameters(SubjectPublicKeyInfo keyInfo, Object defaultParams)
663663
throws IOException
664664
{
665-
MLKEMParameters kyberParameters = Utils.mlkemParamsLookup(keyInfo.getAlgorithm().getAlgorithm());
665+
MLKEMParameters parameters = Utils.mlkemParamsLookup(keyInfo.getAlgorithm().getAlgorithm());
666666

667667
try
668668
{
669669
ASN1Primitive obj = keyInfo.parsePublicKey();
670670
KyberPublicKey kyberKey = KyberPublicKey.getInstance(obj);
671671

672-
return new MLKEMPublicKeyParameters(kyberParameters, kyberKey.getT(), kyberKey.getRho());
672+
return new MLKEMPublicKeyParameters(parameters, kyberKey.getT(), kyberKey.getRho());
673673
}
674674
catch (Exception e)
675675
{
676676
// we're a raw encoding
677-
return new MLKEMPublicKeyParameters(kyberParameters, keyInfo.getPublicKeyData().getOctets());
677+
return new MLKEMPublicKeyParameters(parameters, keyInfo.getPublicKeyData().getOctets());
678678
}
679679
}
680680

681-
static MLKEMPublicKeyParameters getPublicKeyParams(MLKEMParameters dilithiumParams, ASN1BitString publicKeyData)
681+
static MLKEMPublicKeyParameters getPublicKeyParams(MLKEMParameters parameters, ASN1BitString publicKeyData)
682682
{
683683
try
684684
{
@@ -687,21 +687,21 @@ static MLKEMPublicKeyParameters getPublicKeyParams(MLKEMParameters dilithiumPara
687687
{
688688
ASN1Sequence keySeq = ASN1Sequence.getInstance(obj);
689689

690-
return new MLKEMPublicKeyParameters(dilithiumParams,
690+
return new MLKEMPublicKeyParameters(parameters,
691691
ASN1OctetString.getInstance(keySeq.getObjectAt(0)).getOctets(),
692692
ASN1OctetString.getInstance(keySeq.getObjectAt(1)).getOctets());
693693
}
694694
else
695695
{
696696
byte[] encKey = ASN1OctetString.getInstance(obj).getOctets();
697697

698-
return new MLKEMPublicKeyParameters(dilithiumParams, encKey);
698+
return new MLKEMPublicKeyParameters(parameters, encKey);
699699
}
700700
}
701701
catch (Exception e)
702702
{
703703
// we're a raw encoding
704-
return new MLKEMPublicKeyParameters(dilithiumParams, publicKeyData.getOctets());
704+
return new MLKEMPublicKeyParameters(parameters, publicKeyData.getOctets());
705705
}
706706
}
707707
}
@@ -784,7 +784,7 @@ AsymmetricKeyParameter getPublicKeyParameters(SubjectPublicKeyInfo keyInfo, Obje
784784
return getPublicKeyParams(dilithiumParams, keyInfo.getPublicKeyData());
785785
}
786786

787-
static MLDSAPublicKeyParameters getPublicKeyParams(MLDSAParameters dilithiumParams, ASN1BitString publicKeyData)
787+
static MLDSAPublicKeyParameters getPublicKeyParams(MLDSAParameters mlDsaParams, ASN1BitString publicKeyData)
788788
{
789789
try
790790
{
@@ -793,21 +793,21 @@ static MLDSAPublicKeyParameters getPublicKeyParams(MLDSAParameters dilithiumPara
793793
{
794794
ASN1Sequence keySeq = ASN1Sequence.getInstance(obj);
795795

796-
return new MLDSAPublicKeyParameters(dilithiumParams,
796+
return new MLDSAPublicKeyParameters(mlDsaParams,
797797
ASN1OctetString.getInstance(keySeq.getObjectAt(0)).getOctets(),
798798
ASN1OctetString.getInstance(keySeq.getObjectAt(1)).getOctets());
799799
}
800800
else
801801
{
802802
byte[] encKey = ASN1OctetString.getInstance(obj).getOctets();
803803

804-
return new MLDSAPublicKeyParameters(dilithiumParams, encKey);
804+
return new MLDSAPublicKeyParameters(mlDsaParams, encKey);
805805
}
806806
}
807807
catch (Exception e)
808808
{
809809
// we're a raw encoding
810-
return new MLDSAPublicKeyParameters(dilithiumParams, publicKeyData.getOctets());
810+
return new MLDSAPublicKeyParameters(mlDsaParams, publicKeyData.getOctets());
811811
}
812812
}
813813
}

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,9 +288,6 @@ class Utils
288288
mldsaParams.put(NISTObjectIdentifiers.id_ml_dsa_44, MLDSAParameters.ml_dsa_44);
289289
mldsaParams.put(NISTObjectIdentifiers.id_ml_dsa_65, MLDSAParameters.ml_dsa_65);
290290
mldsaParams.put(NISTObjectIdentifiers.id_ml_dsa_87, MLDSAParameters.ml_dsa_87);
291-
mldsaParams.put(BCObjectIdentifiers.id_id_alg_ml_dsa_44_seed, MLDSAParameters.ml_dsa_44);
292-
mldsaParams.put(BCObjectIdentifiers.id_id_alg_ml_dsa_65_seed, MLDSAParameters.ml_dsa_65);
293-
mldsaParams.put(BCObjectIdentifiers.id_id_alg_ml_dsa_87_seed, MLDSAParameters.ml_dsa_87);
294291
mldsaParams.put(NISTObjectIdentifiers.id_hash_ml_dsa_44_with_sha512, MLDSAParameters.ml_dsa_44_with_sha512);
295292
mldsaParams.put(NISTObjectIdentifiers.id_hash_ml_dsa_65_with_sha512, MLDSAParameters.ml_dsa_65_with_sha512);
296293
mldsaParams.put(NISTObjectIdentifiers.id_hash_ml_dsa_87_with_sha512, MLDSAParameters.ml_dsa_87_with_sha512);

pkix/src/test/java/org/bouncycastle/cms/test/NewSignedDataTest.java

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.bouncycastle.cms.test;
22

33
import java.io.BufferedInputStream;
4-
import java.io.ByteArrayInputStream;
54
import java.io.IOException;
65
import java.io.InputStream;
76
import java.io.InputStreamReader;
@@ -32,7 +31,6 @@
3231
import org.bouncycastle.asn1.ASN1Encodable;
3332
import org.bouncycastle.asn1.ASN1EncodableVector;
3433
import org.bouncycastle.asn1.ASN1Encoding;
35-
import org.bouncycastle.asn1.ASN1InputStream;
3634
import org.bouncycastle.asn1.ASN1Integer;
3735
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
3836
import org.bouncycastle.asn1.ASN1OctetString;
@@ -985,10 +983,7 @@ public void testSHA1AndMD5WithRSAEncapsulatedRepeated()
985983

986984
CMSSignedData s = gen.generate(msg, true);
987985

988-
ByteArrayInputStream bIn = new ByteArrayInputStream(s.getEncoded());
989-
ASN1InputStream aIn = new ASN1InputStream(bIn);
990-
991-
s = new CMSSignedData(ContentInfo.getInstance(aIn.readObject()));
986+
s = new CMSSignedData(s.getEncoded());
992987

993988
certs = s.getCertificates();
994989

@@ -1041,10 +1036,7 @@ public void testSHA1AndMD5WithRSAEncapsulatedRepeated()
10411036

10421037
s = gen.generate(msg, true);
10431038

1044-
bIn = new ByteArrayInputStream(s.getEncoded());
1045-
aIn = new ASN1InputStream(bIn);
1046-
1047-
s = new CMSSignedData(ContentInfo.getInstance(aIn.readObject()));
1039+
s = new CMSSignedData(s.getEncoded());
10481040

10491041
certs = s.getCertificates();
10501042

@@ -1851,6 +1843,20 @@ public void testEd25519()
18511843
expectedDigAlgId);
18521844
}
18531845

1846+
public void testEd25519Detached()
1847+
throws Exception
1848+
{
1849+
/*
1850+
* RFC 8419 3.1. When signing with Ed25519, the digestAlgorithm MUST be id-sha512, and the algorithm
1851+
* parameters field MUST be absent.
1852+
*
1853+
* We confirm here that our implementation defaults to SHA-512 for the digest algorithm.
1854+
*/
1855+
AlgorithmIdentifier expectedDigAlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512);
1856+
1857+
detachedTest(_signEd25519KP, _signEd25519Cert, "Ed25519", EdECObjectIdentifiers.id_Ed25519, expectedDigAlgId);
1858+
}
1859+
18541860
public void testEd448()
18551861
throws Exception
18561862
{
@@ -1867,16 +1873,20 @@ public void testEd448()
18671873
encapsulatedTest(_signEd448KP, _signEd448Cert, "Ed448", EdECObjectIdentifiers.id_Ed448, expectedDigAlgId);
18681874
}
18691875

1870-
public void testDetachedEd25519()
1876+
public void testEd448Detached()
18711877
throws Exception
18721878
{
1873-
detachedTest(_signEd25519KP, _signEd25519Cert, "Ed25519", EdECObjectIdentifiers.id_Ed25519, new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512));
1874-
}
1879+
/*
1880+
* RFC 8419 3.1. When signing with Ed448, the digestAlgorithm MUST be id-shake256-len, the algorithm
1881+
* parameters field MUST be present, and the parameter MUST contain 512, encoded as a positive integer
1882+
* value.
1883+
*
1884+
* We confirm here that our implementation defaults to id-shake256-len/512 for the digest algorithm.
1885+
*/
1886+
AlgorithmIdentifier expectedDigAlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_shake256_len,
1887+
new ASN1Integer(512));
18751888

1876-
public void testEdDetached448()
1877-
throws Exception
1878-
{
1879-
detachedTest(_signEd448KP, _signEd448Cert, "Ed448", EdECObjectIdentifiers.id_Ed448, new AlgorithmIdentifier(NISTObjectIdentifiers.id_shake256_len, new ASN1Integer(512)));
1889+
detachedTest(_signEd448KP, _signEd448Cert, "Ed448", EdECObjectIdentifiers.id_Ed448, expectedDigAlgId);
18801890
}
18811891

18821892
public void testEd25519WithNoAttr()
@@ -2519,11 +2529,8 @@ private void subjectKeyIDTest(
25192529
CMSSignedData s = gen.generate(msg, true);
25202530

25212531
assertEquals(3, s.getVersion());
2522-
2523-
ByteArrayInputStream bIn = new ByteArrayInputStream(s.getEncoded());
2524-
ASN1InputStream aIn = new ASN1InputStream(bIn);
25252532

2526-
s = new CMSSignedData(ContentInfo.getInstance(aIn.readObject()));
2533+
s = new CMSSignedData(s.getEncoded());
25272534

25282535
certStore = s.getCertificates();
25292536

@@ -2563,10 +2570,7 @@ private void subjectKeyIDTest(
25632570

25642571
s = gen.generate(msg, true);
25652572

2566-
bIn = new ByteArrayInputStream(s.getEncoded());
2567-
aIn = new ASN1InputStream(bIn);
2568-
2569-
s = new CMSSignedData(ContentInfo.getInstance(aIn.readObject()));
2573+
s = new CMSSignedData(s.getEncoded());
25702574

25712575
certStore = s.getCertificates();
25722576

@@ -2641,7 +2645,7 @@ private void encapsulatedTest(
26412645

26422646
CMSSignedData s = gen.generate(msg, true);
26432647

2644-
s = new CMSSignedData(ContentInfo.getInstance(s.getEncoded()));
2648+
s = new CMSSignedData(s.getEncoded());
26452649

26462650
Set digestAlgorithms = new HashSet(s.getDigestAlgorithmIDs());
26472651

@@ -2720,7 +2724,7 @@ private void encapsulatedTest(
27202724

27212725
s = gen.generate(msg, true);
27222726

2723-
s = new CMSSignedData(ContentInfo.getInstance(s.getEncoded()));
2727+
s = new CMSSignedData(s.getEncoded());
27242728

27252729
certStore = s.getCertificates();
27262730
crlStore = s.getCRLs();
@@ -2776,12 +2780,9 @@ private void detachedTest(
27762780

27772781
gen.addCertificates(certs);
27782782

2779-
CMSSignedData s = gen.generate(msg, true);
2780-
2781-
ByteArrayInputStream bIn = new ByteArrayInputStream(s.getEncoded());
2782-
ASN1InputStream aIn = new ASN1InputStream(bIn);
2783+
CMSSignedData s = gen.generate(msg);
27832784

2784-
s = new CMSSignedData(msg, ContentInfo.getInstance(aIn.readObject()));
2785+
s = new CMSSignedData(msg, s.getEncoded());
27852786

27862787
Set digestAlgorithms = new HashSet(s.getDigestAlgorithmIDs());
27872788

@@ -2948,10 +2949,7 @@ public void testNullContentWithSigner()
29482949

29492950
CMSSignedData s = gen.generate(new CMSAbsentContent(), false);
29502951

2951-
ByteArrayInputStream bIn = new ByteArrayInputStream(s.getEncoded());
2952-
ASN1InputStream aIn = new ASN1InputStream(bIn);
2953-
2954-
s = new CMSSignedData(ContentInfo.getInstance(aIn.readObject()));
2952+
s = new CMSSignedData(s.getEncoded());
29552953

29562954
verifySignatures(s);
29572955
}

prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.util.Set;
1414

1515
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
16-
import org.bouncycastle.asn1.bc.BCObjectIdentifiers;
1716
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
1817
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
1918
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
@@ -54,9 +53,9 @@ public MLDSAKeyFactorySpi(Set<ASN1ObjectIdentifier> keyOids)
5453
this.isHashOnly = false;
5554
}
5655

57-
public MLDSAKeyFactorySpi(ASN1ObjectIdentifier keyOid, ASN1ObjectIdentifier seedOid)
56+
public MLDSAKeyFactorySpi(ASN1ObjectIdentifier keyOid)
5857
{
59-
super(setOf(keyOid, seedOid));
58+
super(keyOid);
6059

6160
this.isHashOnly = (keyOid.equals(NISTObjectIdentifiers.id_hash_ml_dsa_44_with_sha512)
6261
|| keyOid.equals(NISTObjectIdentifiers.id_hash_ml_dsa_65_with_sha512)
@@ -227,7 +226,7 @@ public static class MLDSA44
227226
{
228227
public MLDSA44()
229228
{
230-
super(NISTObjectIdentifiers.id_ml_dsa_44, BCObjectIdentifiers.id_id_alg_ml_dsa_44_seed);
229+
super(NISTObjectIdentifiers.id_ml_dsa_44);
231230
}
232231
}
233232

@@ -236,7 +235,7 @@ public static class MLDSA65
236235
{
237236
public MLDSA65()
238237
{
239-
super(NISTObjectIdentifiers.id_ml_dsa_65, BCObjectIdentifiers.id_id_alg_ml_dsa_65_seed);
238+
super(NISTObjectIdentifiers.id_ml_dsa_65);
240239
}
241240
}
242241

@@ -245,7 +244,7 @@ public static class MLDSA87
245244
{
246245
public MLDSA87()
247246
{
248-
super(NISTObjectIdentifiers.id_ml_dsa_87, BCObjectIdentifiers.id_id_alg_ml_dsa_87_seed);
247+
super(NISTObjectIdentifiers.id_ml_dsa_87);
249248
}
250249
}
251250

@@ -263,7 +262,7 @@ public static class HashMLDSA44
263262
{
264263
public HashMLDSA44()
265264
{
266-
super(NISTObjectIdentifiers.id_hash_ml_dsa_44_with_sha512, BCObjectIdentifiers.id_id_alg_ml_dsa_44_seed);
265+
super(NISTObjectIdentifiers.id_hash_ml_dsa_44_with_sha512);
267266
}
268267
}
269268

@@ -272,7 +271,7 @@ public static class HashMLDSA65
272271
{
273272
public HashMLDSA65()
274273
{
275-
super(NISTObjectIdentifiers.id_hash_ml_dsa_65_with_sha512, BCObjectIdentifiers.id_id_alg_ml_dsa_65_seed);
274+
super(NISTObjectIdentifiers.id_hash_ml_dsa_65_with_sha512);
276275
}
277276
}
278277

@@ -281,7 +280,7 @@ public static class HashMLDSA87
281280
{
282281
public HashMLDSA87()
283282
{
284-
super(NISTObjectIdentifiers.id_hash_ml_dsa_87_with_sha512, BCObjectIdentifiers.id_id_alg_ml_dsa_87_seed);
283+
super(NISTObjectIdentifiers.id_hash_ml_dsa_87_with_sha512);
285284
}
286285
}
287286
}

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import java.security.spec.KeySpec;
88
import java.security.spec.PKCS8EncodedKeySpec;
99
import java.security.spec.X509EncodedKeySpec;
10-
import java.util.HashSet;
1110
import java.util.Set;
1211

1312
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
@@ -34,16 +33,6 @@ protected BaseKeyFactorySpi(ASN1ObjectIdentifier keyOid)
3433
this.keyOids = null;
3534
}
3635

37-
protected static Set setOf(ASN1ObjectIdentifier oid1, ASN1ObjectIdentifier oid2)
38-
{
39-
Set hashSet = new HashSet(2);
40-
41-
hashSet.add(oid1);
42-
hashSet.add(oid2);
43-
44-
return hashSet;
45-
}
46-
4736
public PrivateKey engineGeneratePrivate(KeySpec keySpec)
4837
throws InvalidKeySpecException
4938
{

prov/src/test/java/org/bouncycastle/pqc/jcajce/provider/test/SLHDSATest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,14 @@ public void testKeyFactory()
151151
NISTObjectIdentifiers.id_hash_slh_dsa_shake_256f_with_shake256,
152152
NISTObjectIdentifiers.id_hash_slh_dsa_shake_256s_with_shake256,
153153
};
154-
155-
for (int i = 0; i != 1; i++)
154+
155+
for (int i = 0; i != names.length; i++)
156156
{
157157
KeyPairGenerator kpGen = KeyPairGenerator.getInstance(names[i]);
158158
KeyPair kp = kpGen.generateKeyPair();
159-
System.err.println(names[i]);
159+
160160
tryKeyFact(KeyFactory.getInstance(names[i], "BC"), kp, kp44, "2.16.840.1.101.3.4.3.17");
161-
// tryKeyFact(KeyFactory.getInstance(oids[i].toString(), "BC"), kp, kp44, "2.16.840.1.101.3.4.3.17");
161+
tryKeyFact(KeyFactory.getInstance(oids[i].toString(), "BC"), kp, kp44, "2.16.840.1.101.3.4.3.17");
162162
}
163163
}
164164

0 commit comments

Comments
 (0)