Skip to content

Commit 897c379

Browse files
committed
Check that re-setting a signature context or the PSS parameters clears the cached AlgorithmParameters, and move SignatureSetParameterTest to the jcajce provider test package as it uses nothing from BCPQC, relates to github #2396.
1 parent 69fd0df commit 897c379

3 files changed

Lines changed: 60 additions & 2 deletions

File tree

‎prov/src/test/java/org/bouncycastle/jcajce/provider/test/AllTests.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public static Test suite()
3939
suite.addTestSuite(ECRSAKeyDestructionTest.class);
4040
suite.addTestSuite(SecretKeyUtilTest.class);
4141
suite.addTestSuite(PKCS12PBMAC1StoreTest.class);
42+
suite.addTestSuite(SignatureSetParameterTest.class);
4243

4344
return new BCTestSetup(suite);
4445
}

prov/src/test/java/org/bouncycastle/pqc/jcajce/provider/test/SignatureSetParameterTest.java renamed to prov/src/test/java/org/bouncycastle/jcajce/provider/test/SignatureSetParameterTest.java

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
package org.bouncycastle.pqc.jcajce.provider.test;
1+
package org.bouncycastle.jcajce.provider.test;
22

33
import java.security.AlgorithmParameters;
44
import java.security.KeyPair;
55
import java.security.KeyPairGenerator;
66
import java.security.ProviderException;
77
import java.security.Security;
88
import java.security.Signature;
9+
import java.security.spec.MGF1ParameterSpec;
10+
import java.security.spec.PSSParameterSpec;
911

1012
import junit.framework.TestCase;
1113
import org.bouncycastle.jcajce.spec.ContextParameterSpec;
@@ -219,6 +221,62 @@ public void testResetContext()
219221
assertTrue(verifier.verify(s));
220222
}
221223

224+
/**
225+
* getParameters() caches the AlgorithmParameters it builds, so a context set after it has been
226+
* asked for once has to clear that cache rather than go on reporting the previous context.
227+
* <p>
228+
* testResetContext above only asks after the second setParameter, so the cache is never
229+
* populated with the first context there and a stale one would go unnoticed.
230+
* </p>
231+
*/
232+
public void testGetParametersNotStaleAfterReset()
233+
throws Exception
234+
{
235+
byte[] second = Strings.toByteArray("second context");
236+
237+
KeyPair kp = KeyPairGenerator.getInstance("ML-DSA-65", "BC").generateKeyPair();
238+
239+
Signature sig = Signature.getInstance("ML-DSA", "BC");
240+
241+
sig.setParameter(new ContextParameterSpec(CONTEXT));
242+
sig.initSign(kp.getPrivate());
243+
244+
assertTrue(Arrays.areEqual(CONTEXT,
245+
sig.getParameters().getParameterSpec(ContextParameterSpec.class).getContext()));
246+
247+
sig.setParameter(new ContextParameterSpec(second));
248+
249+
assertTrue("getParameters() still reported the previous context", Arrays.areEqual(second,
250+
sig.getParameters().getParameterSpec(ContextParameterSpec.class).getContext()));
251+
}
252+
253+
/**
254+
* The RSASSA-PSS services cache getParameters() the same way, so the same question is asked of
255+
* the sibling path this class's contract is modelled on.
256+
*/
257+
public void testPssGetParametersNotStaleAfterReset()
258+
throws Exception
259+
{
260+
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "BC");
261+
262+
kpg.initialize(2048);
263+
264+
KeyPair kp = kpg.generateKeyPair();
265+
266+
Signature sig = Signature.getInstance("SHA256withRSAandMGF1", "BC");
267+
268+
sig.initSign(kp.getPrivate());
269+
sig.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1));
270+
271+
assertEquals(32,
272+
((PSSParameterSpec)sig.getParameters().getParameterSpec(PSSParameterSpec.class)).getSaltLength());
273+
274+
sig.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 20, 1));
275+
276+
assertEquals("getParameters() still reported the previous salt length", 20,
277+
((PSSParameterSpec)sig.getParameters().getParameterSpec(PSSParameterSpec.class)).getSaltLength());
278+
}
279+
222280
public void testSetParameterMidUpdateStillRejected()
223281
throws Exception
224282
{

‎prov/src/test/java/org/bouncycastle/pqc/jcajce/provider/test/AllTests.java‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ public static Test suite()
6969
suite.addTestSuite(NamedKeyPairGeneratorTest.class);
7070
suite.addTestSuite(NamedKeyFactoryTest.class);
7171
suite.addTestSuite(PreHashKeyInteropTest.class);
72-
suite.addTestSuite(SignatureSetParameterTest.class);
7372
suite.addTestSuite(MayoKeyPairGeneratorTest.class);
7473
suite.addTestSuite(MayoTest.class);
7574
suite.addTestSuite(SnovaTest.class);

0 commit comments

Comments
 (0)