@@ -194,4 +194,79 @@ public void testSPHINCSPlus()
194194
195195 assertNotNull ("no signingCertificate attribute found" , table .get (PKCSObjectIdentifiers .id_aa_signingCertificate ));
196196 }
197+
198+ public void testMLDSA ()
199+ throws Exception
200+ {
201+ //
202+ // set up the keys
203+ //
204+ PrivateKey privKey ;
205+ PublicKey pubKey ;
206+
207+ try
208+ {
209+ KeyPairGenerator g = KeyPairGenerator .getInstance ("ML-DSA" , BC );
210+
211+ KeyPair p = g .generateKeyPair ();
212+
213+ privKey = p .getPrivate ();
214+ pubKey = p .getPublic ();
215+ }
216+ catch (Exception e )
217+ {
218+ fail ("error setting up keys - " + e );
219+ return ;
220+ }
221+
222+ //
223+ // extensions
224+ //
225+
226+ //
227+ // create the certificate - version 1
228+ //
229+
230+ ContentSigner sigGen = new JcaContentSignerBuilder ("ML-DSA" )
231+ .setProvider (BC ).build (privKey );
232+ JcaX509v3CertificateBuilder certGen = new JcaX509v3CertificateBuilder (
233+ new X500Name ("CN=Test" ),
234+ BigInteger .valueOf (1 ),
235+ new Date (System .currentTimeMillis () - 50000 ),
236+ new Date (System .currentTimeMillis () + 50000 ),
237+ new X500Name ("CN=Test" ),
238+ pubKey );
239+
240+ certGen .addExtension (Extension .extendedKeyUsage , true , new ExtendedKeyUsage (KeyPurposeId .id_kp_timeStamping ));
241+
242+ X509Certificate cert = new JcaX509CertificateConverter ()
243+ .setProvider ("BC" ).getCertificate (certGen .build (sigGen ));
244+
245+ ContentSigner signer = new JcaContentSignerBuilder ("ML-DSA" ).setProvider (BC ).build (privKey );
246+
247+ TimeStampTokenGenerator tsTokenGen = new TimeStampTokenGenerator (
248+ new JcaSignerInfoGeneratorBuilder (new JcaDigestCalculatorProviderBuilder ().build ())
249+ .setContentDigest (new AlgorithmIdentifier (NISTObjectIdentifiers .id_sha512 ))
250+ .build (signer , cert ), new SHA1DigestCalculator (), new ASN1ObjectIdentifier ("1.2" ));
251+
252+ // tsTokenGen.addCertificates(certs);
253+
254+ TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator ();
255+ TimeStampRequest request = reqGen .generate (TSPAlgorithms .SHA3_256 , new byte [32 ], BigInteger .valueOf (100 ));
256+
257+ TimeStampResponseGenerator tsRespGen = new TimeStampResponseGenerator (tsTokenGen , TSPAlgorithms .ALLOWED );
258+
259+ TimeStampResponse tsResp = tsRespGen .generate (request , new BigInteger ("23" ), new Date ());
260+
261+ tsResp = new TimeStampResponse (tsResp .getEncoded ());
262+
263+ TimeStampToken tsToken = tsResp .getTimeStampToken ();
264+
265+ tsToken .validate (new JcaSignerInfoVerifierBuilder (new JcaDigestCalculatorProviderBuilder ().build ())
266+ .setProvider (BC ).build (cert ));
267+
268+ AttributeTable table = tsToken .getSignedAttributes ();
269+
270+ assertNotNull ("no signingCertificate attribute found" , table .get (PKCSObjectIdentifiers .id_aa_signingCertificate ));
271+ }
197272}
0 commit comments