Skip to content

Commit c6ee2fc

Browse files
committed
Merge remote-tracking branch 'refs/remotes/origin/main'
2 parents 86b9989 + 885c5b5 commit c6ee2fc

File tree

3 files changed

+188
-186
lines changed

3 files changed

+188
-186
lines changed

core/src/test/java/org/bouncycastle/pqc/crypto/test/MLDSATest.java

Lines changed: 59 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
import junit.framework.TestCase;
1212
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
13-
import org.bouncycastle.crypto.CryptoException;
1413
import org.bouncycastle.crypto.params.ParametersWithRandom;
1514
import org.bouncycastle.pqc.crypto.mldsa.MLDSAKeyGenerationParameters;
1615
import org.bouncycastle.pqc.crypto.mldsa.MLDSAKeyPairGenerator;
@@ -30,7 +29,7 @@
3029
public class MLDSATest
3130
extends TestCase
3231
{
33-
private static final Map<String, MLDSAParameters> parametersMap = new HashMap<String, MLDSAParameters>()
32+
private static final Map<String, MLDSAParameters> PARAMETERS_MAP = new HashMap<String, MLDSAParameters>()
3433
{
3534
{
3635
put("ML-DSA-44", MLDSAParameters.ml_dsa_44);
@@ -39,6 +38,58 @@ public class MLDSATest
3938
}
4039
};
4140

41+
private static final MLDSAParameters[] PARAMETER_SETS = new MLDSAParameters[]
42+
{
43+
MLDSAParameters.ml_dsa_44,
44+
MLDSAParameters.ml_dsa_65,
45+
MLDSAParameters.ml_dsa_87,
46+
};
47+
48+
public void testConsistency() throws Exception
49+
{
50+
SecureRandom random = new SecureRandom();
51+
52+
MLDSAKeyPairGenerator kpg = new MLDSAKeyPairGenerator();
53+
54+
for (MLDSAParameters parameters : PARAMETER_SETS)
55+
{
56+
kpg.init(new MLDSAKeyGenerationParameters(random, parameters));
57+
58+
int msgSize = 0;
59+
do
60+
{
61+
byte[] msg = new byte[msgSize];
62+
63+
for (int i = 0; i < 2; ++i)
64+
{
65+
AsymmetricCipherKeyPair kp = kpg.generateKeyPair();
66+
67+
MLDSASigner signer = new MLDSASigner();
68+
69+
for (int j = 0; j < 2; ++j)
70+
{
71+
random.nextBytes(msg);
72+
73+
// sign
74+
signer.init(true, new ParametersWithRandom(kp.getPrivate(), random));
75+
signer.update(msg, 0, msg.length);
76+
byte[] signature = signer.generateSignature();
77+
78+
// verify
79+
signer.init(false, kp.getPublic());
80+
signer.update(msg, 0, msg.length);
81+
boolean shouldVerify = signer.verifySignature(signature);
82+
83+
assertTrue("count = " + i, shouldVerify);
84+
}
85+
}
86+
87+
msgSize += msgSize < 128 ? 1 : 17;
88+
}
89+
while (msgSize <= 2048);
90+
}
91+
}
92+
4293
public void testKeyGen()
4394
throws IOException
4495
{
@@ -48,12 +99,6 @@ public void testKeyGen()
4899
"keyGen_ML-DSA-87.txt",
49100
};
50101

51-
MLDSAParameters[] params = new MLDSAParameters[]{
52-
MLDSAParameters.ml_dsa_44,
53-
MLDSAParameters.ml_dsa_65,
54-
MLDSAParameters.ml_dsa_87,
55-
};
56-
57102
for (int fileIndex = 0; fileIndex != files.length; fileIndex++)
58103
{
59104
String name = files[fileIndex];
@@ -79,7 +124,7 @@ public void testKeyGen()
79124
byte[] sk = Hex.decode((String)buf.get("sk"));
80125

81126
FixedSecureRandom random = new FixedSecureRandom(seed);
82-
MLDSAParameters parameters = params[fileIndex];
127+
MLDSAParameters parameters = PARAMETER_SETS[fileIndex];
83128

84129
MLDSAKeyPairGenerator kpGen = new MLDSAKeyPairGenerator();
85130
kpGen.init(new MLDSAKeyGenerationParameters(random, parameters));
@@ -119,12 +164,6 @@ public void testSigGen()
119164
"sigGen_ML-DSA-87.txt",
120165
};
121166

122-
MLDSAParameters[] params = new MLDSAParameters[]{
123-
MLDSAParameters.ml_dsa_44,
124-
MLDSAParameters.ml_dsa_65,
125-
MLDSAParameters.ml_dsa_87,
126-
};
127-
128167
for (int fileIndex = 0; fileIndex != files.length; fileIndex++)
129168
{
130169
String name = files[fileIndex];
@@ -155,7 +194,7 @@ public void testSigGen()
155194
rnd = Hex.decode((String)buf.get("rnd"));
156195
}
157196

158-
MLDSAParameters parameters = params[fileIndex];
197+
MLDSAParameters parameters = PARAMETER_SETS[fileIndex];
159198

160199
MLDSAPrivateKeyParameters privParams = new MLDSAPrivateKeyParameters(parameters, sk, null);
161200

@@ -191,12 +230,6 @@ public void testSigVer()
191230
"sigVer_ML-DSA-87.txt",
192231
};
193232

194-
MLDSAParameters[] params = new MLDSAParameters[]{
195-
MLDSAParameters.ml_dsa_44,
196-
MLDSAParameters.ml_dsa_65,
197-
MLDSAParameters.ml_dsa_87,
198-
};
199-
200233
for (int fileIndex = 0; fileIndex != files.length; fileIndex++)
201234
{
202235
String name = files[fileIndex];
@@ -223,7 +256,7 @@ public void testSigVer()
223256
byte[] message = Hex.decode((String)buf.get("message"));
224257
byte[] signature = Hex.decode((String)buf.get("signature"));
225258

226-
MLDSAParameters parameters = params[fileIndex];
259+
MLDSAParameters parameters = PARAMETER_SETS[fileIndex];
227260

228261
MLDSAPublicKeyParameters pubParams = new MLDSAPublicKeyParameters(parameters, pk);
229262

@@ -263,66 +296,6 @@ public void testRNG()
263296
assertTrue(Arrays.areEqual(randBytes, testBytes));
264297
}
265298

266-
267-
public void testMLDSARandom()
268-
{
269-
MLDSAKeyPairGenerator keyGen = new MLDSAKeyPairGenerator();
270-
271-
SecureRandom random = new SecureRandom();
272-
273-
for (MLDSAParameters param : new MLDSAParameters[]{
274-
MLDSAParameters.ml_dsa_44, MLDSAParameters.ml_dsa_65, MLDSAParameters.ml_dsa_87})
275-
{
276-
keyGen.init(new MLDSAKeyGenerationParameters(random, param));
277-
for (int msgSize = 0; msgSize < 2049; )
278-
{
279-
byte[] msg = new byte[msgSize];
280-
if (msgSize < 128)
281-
{
282-
msgSize += 1;
283-
}
284-
else
285-
{
286-
msgSize += 12;
287-
}
288-
for (int i = 0; i != 100; i++)
289-
{
290-
random.nextBytes(msg);
291-
AsymmetricCipherKeyPair keyPair = keyGen.generateKeyPair();
292-
293-
// sign
294-
MLDSASigner signer = new MLDSASigner();
295-
MLDSAPrivateKeyParameters skparam = (MLDSAPrivateKeyParameters)keyPair.getPrivate();
296-
ParametersWithRandom skwrand = new ParametersWithRandom(skparam, random);
297-
signer.init(true, skwrand);
298-
299-
signer.update(msg, 0, msg.length);
300-
301-
byte[] sigGenerated;
302-
try
303-
{
304-
sigGenerated = signer.generateSignature();
305-
}
306-
catch (CryptoException e)
307-
{
308-
throw new RuntimeException(e);
309-
}
310-
311-
// verify
312-
MLDSASigner verifier = new MLDSASigner();
313-
MLDSAPublicKeyParameters pkparam = (MLDSAPublicKeyParameters)keyPair.getPublic();
314-
verifier.init(false, pkparam);
315-
316-
verifier.update(msg, 0, msg.length);
317-
318-
boolean ok = verifier.verifySignature(sigGenerated);
319-
320-
assertTrue("count = " + i, ok);
321-
}
322-
}
323-
}
324-
}
325-
326299
public void testKeyGenCombinedVectorSet()
327300
throws IOException
328301
{
@@ -348,7 +321,7 @@ public void testKeyGenCombinedVectorSet()
348321
byte[] sk = Hex.decode((String)buf.get("sk"));
349322

350323
FixedSecureRandom random = new FixedSecureRandom(seed);
351-
MLDSAParameters parameters = parametersMap.get((String)buf.get("parameterSet"));
324+
MLDSAParameters parameters = PARAMETERS_MAP.get((String)buf.get("parameterSet"));
352325

353326
MLDSAKeyPairGenerator kpGen = new MLDSAKeyPairGenerator();
354327
kpGen.init(new MLDSAKeyGenerationParameters(random, parameters));
@@ -413,7 +386,7 @@ public void testSigGenCombinedVectorSet()
413386
rnd = new byte[32];
414387
}
415388

416-
MLDSAParameters parameters = parametersMap.get((String)buf.get("parameterSet"));
389+
MLDSAParameters parameters = PARAMETERS_MAP.get((String)buf.get("parameterSet"));
417390

418391
MLDSAPrivateKeyParameters privParams = new MLDSAPrivateKeyParameters(parameters, sk, null);
419392

@@ -466,7 +439,7 @@ public void testSigVerCombinedVectorSet()
466439
byte[] message = Hex.decode((String)buf.get("message"));
467440
byte[] signature = Hex.decode((String)buf.get("signature"));
468441

469-
MLDSAParameters parameters = parametersMap.get((String)buf.get("parameterSet"));
442+
MLDSAParameters parameters = PARAMETERS_MAP.get((String)buf.get("parameterSet"));
470443

471444
MLDSAPublicKeyParameters pubParams = new MLDSAPublicKeyParameters(parameters, pk);
472445

0 commit comments

Comments
 (0)