Skip to content

Commit 7092e5e

Browse files
committed
Java 4, Java 5 compatibility changes.
1 parent 29bf82a commit 7092e5e

File tree

2 files changed

+366
-3
lines changed

2 files changed

+366
-3
lines changed

pg/src/main/java/org/bouncycastle/openpgp/api/OpenPGPCertificate.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1948,7 +1948,12 @@ else if (signature.getSignatureType() == PGPSignature.PRIMARYKEY_BINDING)
19481948
throw new IncorrectOpenPGPSignatureException(this, "Key Signature is not correct.");
19491949
}
19501950
}
1951-
catch (PGPException | ClassCastException e)
1951+
catch (PGPException e)
1952+
{
1953+
this.isCorrect = false;
1954+
throw new PGPSignatureException("Key Signature could not be verified.", e);
1955+
}
1956+
catch (ClassCastException e)
19521957
{
19531958
this.isCorrect = false;
19541959
throw new PGPSignatureException("Key Signature could not be verified.", e);
@@ -1981,7 +1986,12 @@ protected void verifyUserIdSignature(OpenPGPComponentKey issuer,
19811986
throw new IncorrectOpenPGPSignatureException(this, "UserID Signature is not correct.");
19821987
}
19831988
}
1984-
catch (PGPException | ClassCastException e)
1989+
catch (PGPException e)
1990+
{
1991+
this.isCorrect = false;
1992+
throw new PGPSignatureException("UserID Signature could not be verified.", e);
1993+
}
1994+
catch (ClassCastException e)
19851995
{
19861996
this.isCorrect = false;
19871997
throw new PGPSignatureException("UserID Signature could not be verified.", e);
@@ -2014,7 +2024,12 @@ protected void verifyUserAttributeSignature(OpenPGPComponentKey issuer,
20142024
throw new IncorrectOpenPGPSignatureException(this, "UserAttribute Signature is not correct.");
20152025
}
20162026
}
2017-
catch (PGPException | ClassCastException e)
2027+
catch (PGPException e)
2028+
{
2029+
this.isCorrect = false;
2030+
throw new PGPSignatureException("Could not verify UserAttribute Signature.", e);
2031+
}
2032+
catch (ClassCastException e)
20182033
{
20192034
this.isCorrect = false;
20202035
throw new PGPSignatureException("Could not verify UserAttribute Signature.", e);
Lines changed: 348 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,348 @@
1+
package org.bouncycastle.tsp.test;
2+
3+
import java.math.BigInteger;
4+
import java.security.KeyPair;
5+
import java.security.KeyPairGenerator;
6+
import java.security.PrivateKey;
7+
import java.security.PublicKey;
8+
import java.security.Security;
9+
import java.security.cert.X509Certificate;
10+
import java.util.Date;
11+
import java.util.Iterator;
12+
13+
import junit.framework.TestCase;
14+
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
15+
import org.bouncycastle.asn1.cms.AttributeTable;
16+
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
17+
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
18+
import org.bouncycastle.asn1.x500.X500Name;
19+
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
20+
import org.bouncycastle.asn1.x509.ExtendedKeyUsage;
21+
import org.bouncycastle.asn1.x509.Extension;
22+
import org.bouncycastle.asn1.x509.KeyPurposeId;
23+
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
24+
import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder;
25+
import org.bouncycastle.cms.jcajce.JcaSignerInfoGeneratorBuilder;
26+
import org.bouncycastle.cms.jcajce.JcaSignerInfoVerifierBuilder;
27+
import org.bouncycastle.jce.provider.BouncyCastleProvider;
28+
import org.bouncycastle.operator.ContentSigner;
29+
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
30+
import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder;
31+
import org.bouncycastle.tsp.TSPAlgorithms;
32+
import org.bouncycastle.tsp.TimeStampRequest;
33+
import org.bouncycastle.tsp.TimeStampRequestGenerator;
34+
import org.bouncycastle.tsp.TimeStampResponse;
35+
import org.bouncycastle.tsp.TimeStampResponseGenerator;
36+
import org.bouncycastle.tsp.TimeStampToken;
37+
import org.bouncycastle.tsp.TimeStampTokenGenerator;
38+
39+
public class PQCTSPTest
40+
extends TestCase
41+
{
42+
private static final String BC = BouncyCastleProvider.PROVIDER_NAME;
43+
44+
public void setUp()
45+
{
46+
Security.addProvider(new BouncyCastleProvider());
47+
}
48+
49+
public void testLMS()
50+
throws Exception
51+
{
52+
//
53+
// set up the keys
54+
//
55+
PrivateKey privKey;
56+
PublicKey pubKey;
57+
58+
try
59+
{
60+
KeyPairGenerator g = KeyPairGenerator.getInstance("LMS", BC);
61+
62+
KeyPair p = g.generateKeyPair();
63+
64+
privKey = p.getPrivate();
65+
pubKey = p.getPublic();
66+
}
67+
catch (Exception e)
68+
{
69+
fail("error setting up keys - " + e);
70+
return;
71+
}
72+
73+
//
74+
// extensions
75+
//
76+
77+
//
78+
// create the certificate - version 1
79+
//
80+
81+
ContentSigner sigGen = new JcaContentSignerBuilder("LMS")
82+
.setProvider(BC).build(privKey);
83+
JcaX509v3CertificateBuilder certGen = new JcaX509v3CertificateBuilder(
84+
new X500Name("CN=Test"),
85+
BigInteger.valueOf(1),
86+
new Date(System.currentTimeMillis() - 50000),
87+
new Date(System.currentTimeMillis() + 50000),
88+
new X500Name("CN=Test"),
89+
pubKey);
90+
91+
certGen.addExtension(Extension.extendedKeyUsage, true, new ExtendedKeyUsage(KeyPurposeId.id_kp_timeStamping));
92+
93+
X509Certificate cert = new JcaX509CertificateConverter()
94+
.setProvider("BC").getCertificate(certGen.build(sigGen));
95+
96+
ContentSigner signer = new JcaContentSignerBuilder("LMS").setProvider(BC).build(privKey);
97+
98+
TimeStampTokenGenerator tsTokenGen = new TimeStampTokenGenerator(
99+
new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build())
100+
.setContentDigest(new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha3_512))
101+
.build(signer, cert), new SHA1DigestCalculator(), new ASN1ObjectIdentifier("1.2"));
102+
103+
// tsTokenGen.addCertificates(certs);
104+
105+
TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
106+
TimeStampRequest request = reqGen.generate(TSPAlgorithms.SHA3_512, new byte[64], BigInteger.valueOf(100));
107+
108+
TimeStampResponseGenerator tsRespGen = new TimeStampResponseGenerator(tsTokenGen, TSPAlgorithms.ALLOWED);
109+
110+
TimeStampResponse tsResp = tsRespGen.generate(request, new BigInteger("23"), new Date());
111+
112+
tsResp = new TimeStampResponse(tsResp.getEncoded());
113+
114+
TimeStampToken tsToken = tsResp.getTimeStampToken();
115+
116+
tsToken.validate(new JcaSignerInfoVerifierBuilder(new JcaDigestCalculatorProviderBuilder().build())
117+
.setProvider(BC).build(cert));
118+
119+
AttributeTable table = tsToken.getSignedAttributes();
120+
121+
assertNotNull("no signingCertificate attribute found", table.get(PKCSObjectIdentifiers.id_aa_signingCertificate));
122+
}
123+
124+
public void testSPHINCSPlus()
125+
throws Exception
126+
{
127+
//
128+
// set up the keys
129+
//
130+
PrivateKey privKey;
131+
PublicKey pubKey;
132+
133+
try
134+
{
135+
KeyPairGenerator g = KeyPairGenerator.getInstance("SLH-DSA", BC);
136+
137+
KeyPair p = g.generateKeyPair();
138+
139+
privKey = p.getPrivate();
140+
pubKey = p.getPublic();
141+
}
142+
catch (Exception e)
143+
{
144+
fail("error setting up keys - " + e);
145+
return;
146+
}
147+
148+
//
149+
// extensions
150+
//
151+
152+
//
153+
// create the certificate - version 1
154+
//
155+
156+
ContentSigner sigGen = new JcaContentSignerBuilder("SLH-DSA-SHA2-128F")
157+
.setProvider(BC).build(privKey);
158+
JcaX509v3CertificateBuilder certGen = new JcaX509v3CertificateBuilder(
159+
new X500Name("CN=Test"),
160+
BigInteger.valueOf(1),
161+
new Date(System.currentTimeMillis() - 50000),
162+
new Date(System.currentTimeMillis() + 50000),
163+
new X500Name("CN=Test"),
164+
pubKey);
165+
166+
certGen.addExtension(Extension.extendedKeyUsage, true, new ExtendedKeyUsage(KeyPurposeId.id_kp_timeStamping));
167+
168+
X509Certificate cert = new JcaX509CertificateConverter()
169+
.setProvider("BC").getCertificate(certGen.build(sigGen));
170+
171+
ContentSigner signer = new JcaContentSignerBuilder("SLH-DSA-SHA2-128F").setProvider(BC).build(privKey);
172+
173+
TimeStampTokenGenerator tsTokenGen = new TimeStampTokenGenerator(
174+
new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build())
175+
.setContentDigest(new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha3_256))
176+
.build(signer, cert), new SHA1DigestCalculator(), new ASN1ObjectIdentifier("1.2"));
177+
178+
// tsTokenGen.addCertificates(certs);
179+
180+
TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
181+
TimeStampRequest request = reqGen.generate(TSPAlgorithms.SHA3_256, new byte[32], BigInteger.valueOf(100));
182+
183+
TimeStampResponseGenerator tsRespGen = new TimeStampResponseGenerator(tsTokenGen, TSPAlgorithms.ALLOWED);
184+
185+
TimeStampResponse tsResp = tsRespGen.generate(request, new BigInteger("23"), new Date());
186+
187+
tsResp = new TimeStampResponse(tsResp.getEncoded());
188+
189+
TimeStampToken tsToken = tsResp.getTimeStampToken();
190+
191+
tsToken.validate(new JcaSignerInfoVerifierBuilder(new JcaDigestCalculatorProviderBuilder().build())
192+
.setProvider(BC).build(cert));
193+
194+
AttributeTable table = tsToken.getSignedAttributes();
195+
196+
assertNotNull("no signingCertificate attribute found", table.get(PKCSObjectIdentifiers.id_aa_signingCertificate));
197+
}
198+
199+
public void testSLHDSA()
200+
throws Exception
201+
{
202+
//
203+
// set up the keys
204+
//
205+
PrivateKey privKey;
206+
PublicKey pubKey;
207+
208+
try
209+
{
210+
KeyPairGenerator g = KeyPairGenerator.getInstance("SLH-DSA", BC);
211+
212+
KeyPair p = g.generateKeyPair();
213+
214+
privKey = p.getPrivate();
215+
pubKey = p.getPublic();
216+
}
217+
catch (Exception e)
218+
{
219+
fail("error setting up keys - " + e);
220+
return;
221+
}
222+
223+
//
224+
// extensions
225+
//
226+
227+
//
228+
// create the certificate - version 1
229+
//
230+
231+
ContentSigner sigGen = new JcaContentSignerBuilder("SLH-DSA")
232+
.setProvider(BC).build(privKey);
233+
JcaX509v3CertificateBuilder certGen = new JcaX509v3CertificateBuilder(
234+
new X500Name("CN=Test"),
235+
BigInteger.valueOf(1),
236+
new Date(System.currentTimeMillis() - 50000),
237+
new Date(System.currentTimeMillis() + 50000),
238+
new X500Name("CN=Test"),
239+
pubKey);
240+
241+
certGen.addExtension(Extension.extendedKeyUsage, true, new ExtendedKeyUsage(KeyPurposeId.id_kp_timeStamping));
242+
243+
X509Certificate cert = new JcaX509CertificateConverter()
244+
.setProvider("BC").getCertificate(certGen.build(sigGen));
245+
246+
ContentSigner signer = new JcaContentSignerBuilder("SLH-DSA").setProvider(BC).build(privKey);
247+
248+
TimeStampTokenGenerator tsTokenGen = new TimeStampTokenGenerator(
249+
new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build())
250+
.setContentDigest(new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512))
251+
.build(signer, cert), new SHA1DigestCalculator(), new ASN1ObjectIdentifier("1.2"));
252+
253+
// tsTokenGen.addCertificates(certs);
254+
255+
TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
256+
TimeStampRequest request = reqGen.generate(TSPAlgorithms.SHA3_256, new byte[32], BigInteger.valueOf(100));
257+
258+
TimeStampResponseGenerator tsRespGen = new TimeStampResponseGenerator(tsTokenGen, TSPAlgorithms.ALLOWED);
259+
260+
TimeStampResponse tsResp = tsRespGen.generate(request, new BigInteger("23"), new Date());
261+
262+
tsResp = new TimeStampResponse(tsResp.getEncoded());
263+
264+
TimeStampToken tsToken = tsResp.getTimeStampToken();
265+
266+
tsToken.validate(new JcaSignerInfoVerifierBuilder(new JcaDigestCalculatorProviderBuilder().build())
267+
.setProvider(BC).build(cert));
268+
269+
AttributeTable table = tsToken.getSignedAttributes();
270+
271+
assertNotNull("no signingCertificate attribute found", table.get(PKCSObjectIdentifiers.id_aa_signingCertificate));
272+
}
273+
274+
public void testMLDSA()
275+
throws Exception
276+
{
277+
//
278+
// set up the keys
279+
//
280+
PrivateKey privKey;
281+
PublicKey pubKey;
282+
283+
try
284+
{
285+
KeyPairGenerator g = KeyPairGenerator.getInstance("ML-DSA", BC);
286+
287+
KeyPair p = g.generateKeyPair();
288+
289+
privKey = p.getPrivate();
290+
pubKey = p.getPublic();
291+
}
292+
catch (Exception e)
293+
{
294+
fail("error setting up keys - " + e);
295+
return;
296+
}
297+
298+
//
299+
// extensions
300+
//
301+
302+
//
303+
// create the certificate - version 1
304+
//
305+
306+
ContentSigner sigGen = new JcaContentSignerBuilder("SLH-DSA")
307+
.setProvider(BC).build(privKey);
308+
JcaX509v3CertificateBuilder certGen = new JcaX509v3CertificateBuilder(
309+
new X500Name("CN=Test"),
310+
BigInteger.valueOf(1),
311+
new Date(System.currentTimeMillis() - 50000),
312+
new Date(System.currentTimeMillis() + 50000),
313+
new X500Name("CN=Test"),
314+
pubKey);
315+
316+
certGen.addExtension(Extension.extendedKeyUsage, true, new ExtendedKeyUsage(KeyPurposeId.id_kp_timeStamping));
317+
318+
X509Certificate cert = new JcaX509CertificateConverter()
319+
.setProvider("BC").getCertificate(certGen.build(sigGen));
320+
321+
ContentSigner signer = new JcaContentSignerBuilder("ML-DSA").setProvider(BC).build(privKey);
322+
323+
TimeStampTokenGenerator tsTokenGen = new TimeStampTokenGenerator(
324+
new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build())
325+
.setContentDigest(new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512))
326+
.build(signer, cert), new SHA1DigestCalculator(), new ASN1ObjectIdentifier("1.2"));
327+
328+
// tsTokenGen.addCertificates(certs);
329+
330+
TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
331+
TimeStampRequest request = reqGen.generate(TSPAlgorithms.SHA3_256, new byte[32], BigInteger.valueOf(100));
332+
333+
TimeStampResponseGenerator tsRespGen = new TimeStampResponseGenerator(tsTokenGen, TSPAlgorithms.ALLOWED);
334+
335+
TimeStampResponse tsResp = tsRespGen.generate(request, new BigInteger("23"), new Date());
336+
337+
tsResp = new TimeStampResponse(tsResp.getEncoded());
338+
339+
TimeStampToken tsToken = tsResp.getTimeStampToken();
340+
341+
tsToken.validate(new JcaSignerInfoVerifierBuilder(new JcaDigestCalculatorProviderBuilder().build())
342+
.setProvider(BC).build(cert));
343+
344+
AttributeTable table = tsToken.getSignedAttributes();
345+
346+
assertNotNull("no signingCertificate attribute found", table.get(PKCSObjectIdentifiers.id_aa_signingCertificate));
347+
}
348+
}

0 commit comments

Comments
 (0)