1010
1111import junit .framework .TestCase ;
1212import org .bouncycastle .crypto .AsymmetricCipherKeyPair ;
13- import org .bouncycastle .crypto .CryptoException ;
1413import org .bouncycastle .crypto .params .ParametersWithRandom ;
1514import org .bouncycastle .pqc .crypto .mldsa .MLDSAKeyGenerationParameters ;
1615import org .bouncycastle .pqc .crypto .mldsa .MLDSAKeyPairGenerator ;
3029public 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