Skip to content

Commit 5b13608

Browse files
committed
Java 2, Java 3, compatibility updates
1 parent a496b0b commit 5b13608

File tree

25 files changed

+1513
-76
lines changed

25 files changed

+1513
-76
lines changed

ant/jdk13.xml

+10-1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@
7979
<exclude name="**/BCEC*.java" />
8080
<exclude name="**/JCEEC5*.java" />
8181
<exclude name="**/provider/JCEEC*.java" />
82+
<exclude name="**/compositesignatures/*.java" />
83+
<exclude name="**/CompositeSignatures.java" />
8284
<exclude name="**/EC5*.java" />
8385
<exclude name="**/SIKE*.java" />
8486
<exclude name="**/Rainbow*.java" />
@@ -259,9 +261,13 @@
259261
<exclude name="**/PKIXRevocationTest.java" />
260262
<exclude name="**/cms/test/AnnotatedKeyTest.java"/>
261263
<exclude name="**/bouncycastle/cms/test/AuthEnvelopedDataTest.java"/>
264+
<exclude name="**/bouncycastle/cms/test/CMSAuthEnvelopedDataStreamGeneratorTest.java"/>
265+
<exclude name="**/bouncycastle/cms/test/GOSTR3410_2012_256CmsSignVerifyDetached.java"/>
266+
<exclude name="**/bouncycastle/cert/test/GOSTR3410_2012_256GenerateCertificate.java"/>
262267
<exclude name="**/its/**" />
263268
</fileset>
264269
<fileset dir="mail/src/test/java">
270+
<exclude name="**/MailGeneralTest.java" />
265271
<exclude name="**/SignedMailValidatorTest.java" />
266272
<exclude name="**/DummyCertPathReviewer.java" />
267273
<exclude name="**/JournalingSecureRandomEncryptTest.java"/>
@@ -290,9 +296,12 @@
290296
</fileset>
291297
<fileset dir="pkix/src/main/jdk1.4" includes="**/*.java" />
292298
<fileset dir="util/src/main/jdk1.4" includes="**/*.java" />
299+
<fileset dir="pg/src/main/jdk1.5" includes="**/*.java" />
300+
<fileset dir="core/src/test/jdk1.4" includes="**/*.java" />
301+
</copy>
302+
<copy todir="${src.dir}" overwrite="true">
293303
<fileset dir="pg/src/main/jdk1.4" includes="**/*.java" />
294304
<fileset dir="pg/src/main/jdk1.3" includes="**/*.java" />
295-
<fileset dir="core/src/test/jdk1.4" includes="**/*.java" />
296305
</copy>
297306
<copy todir="${src.dir}" overwrite="true">
298307
<fileset dir="prov/src/test/jdk1.4" includes="**/*.java" >

bc-build.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
# intended to hold user-specific settings that are *not* committed to
44
# the repository.
55

6-
release.suffix: 1.78
6+
release.suffix: 178
77
release.name: 1.78
88
release.version: 1.78
9-
release.debug: false
9+
release.debug: true
1010

1111
mail.jar.home: ./libs/javax.mail-1.4.7.jar
1212
activation.jar.home: ./libs/activation-1.1.1.jar

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ subprojects {
246246
}
247247

248248
tasks.withType(JavaCompile).configureEach {
249-
options.debug = false;
249+
options.debug = true;
250250
}
251251

252252
tasks.withType(Test).configureEach {

build1-2

+10
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ mkdir -p $jdk12src
4747
((cd pkix/src/test/jdk1.3 && tar cf - * ) | (cd $jdk12src && tar xf -))
4848
((cd pkix/src/main/jdk1.2 && tar cf - * ) | (cd $jdk12src && tar xf -))
4949
((cd pg/src/main/java && tar cf - * ) | (cd $jdk12src && tar xf -))
50+
((cd pg/src/main/jdk1.5 && tar cf - * ) | (cd $jdk12src && tar xf -))
5051
((cd pg/src/main/jdk1.4 && tar cf - * ) | (cd $jdk12src && tar xf -))
5152
((cd pg/src/main/jdk1.3 && tar cf - * ) | (cd $jdk12src && tar xf -))
5253
((cd pg/src/test/java && tar cf - * ) | (cd $jdk12src && tar xf -))
@@ -67,6 +68,7 @@ find $jdk12src -name "*.java" -exec scripts/usejcecert.sh \{\} \;
6768
rm org/bouncycastle/test/PrintTestResult.java
6869
rm org/bouncycastle/pqc/legacy/crypto/qtesla/QTeslaKeyEncodingTests.java
6970
rm org/bouncycastle/pqc/crypto/util/PQCOtherInfoGenerator.java
71+
rm -rf org/bouncycastle/test/JVMVersionTest.java
7072
rm -rf org/bouncycastle/crypto/test/ntru
7173
rm -rf org/bouncycastle/pqc/legacy/math/ntru
7274
rm -rf org/bouncycastle/pqc/math/test
@@ -204,12 +206,16 @@ find $jdk12src -name "*.java" -exec scripts/usejcecert.sh \{\} \;
204206
rm org/bouncycastle/pkix/test/TestUtil.java
205207
rm org/bouncycastle/cert/cmp/test/PQC*.java
206208
rm org/bouncycastle/cert/cmp/test/Elgamal*.java
209+
rm org/bouncycastle/cert/cmp/test/InvalidMessagesTest.java
210+
rm org/bouncycastle/cert/test/GOSTR3410_2012_256GenerateCertificate.java
207211
rm org/bouncycastle/cert/ocsp/test/PKIXRevocationTest.java
208212
rm -r org/bouncycastle/crypto/test/BigSkippingCipherTest.java
209213
rm -rf org/bouncycastle/openssl/test
214+
rm -rf org/bouncycastle/jcajce/provider/asymmetric/compositesignatures
210215
rm -rf org/bouncycastle/jcajce/provider/asymmetric/dstu
211216
rm -rf org/bouncycastle/jcajce/provider/asymmetric/DSTU*.java
212217
rm -rf org/bouncycastle/jcajce/provider/asymmetric/util/EC5*.java
218+
rm -rf org/bouncycastle/jcajce/provider/asymmetric/CompositeSignatures.java
213219
rm org/bouncycastle/asn1/test/EnumeratedTest.java
214220
rm -rf org/bouncycastle/pqc/crypto/test/QT*.java
215221
rm -rf org/bouncycastle/pqc/crypto/test/SphincsPlusTest.java
@@ -238,6 +244,10 @@ find $jdk12src -name "*.java" -exec scripts/usejcecert.sh \{\} \;
238244
rm org/bouncycastle/openpgp/test/BcPGPEd25519JcaKeyPairConversionTest.java
239245
rm org/bouncycastle/openpgp/test/ArmoredOutputStreamUTF8Test.java
240246
rm org/bouncycastle/openpgp/test/PGPAeadTest.java
247+
rm org/bouncycastle/openpgp/test/BytesBooleansTest.java
248+
rm org/bouncycastle/openpgp/test/BcImplProviderTest.java
249+
rm org/bouncycastle/openpgp/test/BcpgGeneralTest.java
250+
rm org/bouncycastle/openpgp/test/OpenPGPTest.java
241251

242252
sh ../../scripts/jdk1.2ed.sh
243253

core/src/main/java/org/bouncycastle/asn1/x509/Extensions.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,8 @@ else if (obj != null)
7171
private Extensions(
7272
ASN1Sequence seq)
7373
{
74-
if (seq.size() == 0)
75-
{
76-
throw new IllegalArgumentException("empty extension sequence found");
77-
}
74+
// it's tempting to check there's at least one entry in the sequence. Don't!
75+
// It turns out there's quite a few empty extension blocks out there...
7876

7977
Enumeration e = seq.getObjects();
8078

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
package org.bouncycastle.crypto.test;
2+
3+
import java.security.SecureRandom;
4+
5+
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
6+
import org.bouncycastle.crypto.Signer;
7+
import org.bouncycastle.crypto.generators.Ed25519KeyPairGenerator;
8+
import org.bouncycastle.crypto.params.Ed25519KeyGenerationParameters;
9+
import org.bouncycastle.crypto.params.Ed25519PrivateKeyParameters;
10+
import org.bouncycastle.crypto.params.Ed25519PublicKeyParameters;
11+
import org.bouncycastle.crypto.signers.Ed25519Signer;
12+
import org.bouncycastle.crypto.signers.Ed25519ctxSigner;
13+
import org.bouncycastle.crypto.signers.Ed25519phSigner;
14+
import org.bouncycastle.math.ec.rfc8032.Ed25519;
15+
import org.bouncycastle.util.Arrays;
16+
import org.bouncycastle.util.encoders.Base64;
17+
import org.bouncycastle.util.encoders.Hex;
18+
import org.bouncycastle.util.test.SimpleTest;
19+
20+
public class Ed25519Test
21+
extends SimpleTest
22+
{
23+
private static final SecureRandom RANDOM = new SecureRandom();
24+
25+
public String getName()
26+
{
27+
return "Ed25519";
28+
}
29+
30+
public static void main(String[] args)
31+
{
32+
runTest(new Ed25519Test());
33+
}
34+
35+
public void performTest()
36+
throws Exception
37+
{
38+
basicSigTest();
39+
40+
for (int i = 0; i < 10; ++i)
41+
{
42+
testConsistency(Ed25519.Algorithm.Ed25519, null);
43+
44+
byte[] context = randomContext(RANDOM.nextInt() & 255);
45+
testConsistency(Ed25519.Algorithm.Ed25519ctx, context);
46+
testConsistency(Ed25519.Algorithm.Ed25519ph, context);
47+
}
48+
49+
}
50+
51+
private void basicSigTest()
52+
throws Exception
53+
{
54+
Ed25519PrivateKeyParameters privateKey = new Ed25519PrivateKeyParameters(
55+
Hex.decode("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60"));
56+
Ed25519PublicKeyParameters publicKey = new Ed25519PublicKeyParameters(
57+
Hex.decode("d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a"));
58+
59+
byte[] sig = Hex.decode("e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b");
60+
61+
Signer signer = new Ed25519Signer();
62+
63+
signer.init(true, privateKey);
64+
65+
isTrue(areEqual(sig, signer.generateSignature()));
66+
67+
signer.init(false, publicKey);
68+
69+
isTrue(signer.verifySignature(sig));
70+
}
71+
72+
private Signer createSigner(int algorithm, byte[] context)
73+
{
74+
switch (algorithm)
75+
{
76+
case Ed25519.Algorithm.Ed25519:
77+
return new Ed25519Signer();
78+
case Ed25519.Algorithm.Ed25519ctx:
79+
return new Ed25519ctxSigner(context);
80+
case Ed25519.Algorithm.Ed25519ph:
81+
return new Ed25519phSigner(context);
82+
default:
83+
throw new IllegalArgumentException("algorithm");
84+
}
85+
}
86+
87+
private byte[] randomContext(int length)
88+
{
89+
byte[] context = new byte[length];
90+
RANDOM.nextBytes(context);
91+
return context;
92+
}
93+
94+
private void testConsistency(int algorithm, byte[] context)
95+
throws Exception
96+
{
97+
Ed25519KeyPairGenerator kpg = new Ed25519KeyPairGenerator();
98+
kpg.init(new Ed25519KeyGenerationParameters(RANDOM));
99+
100+
AsymmetricCipherKeyPair kp = kpg.generateKeyPair();
101+
Ed25519PrivateKeyParameters privateKey = (Ed25519PrivateKeyParameters)kp.getPrivate();
102+
Ed25519PublicKeyParameters publicKey = (Ed25519PublicKeyParameters)kp.getPublic();
103+
104+
byte[] msg = new byte[RANDOM.nextInt() & 255];
105+
RANDOM.nextBytes(msg);
106+
107+
Signer signer = createSigner(algorithm, context);
108+
signer.init(true, privateKey);
109+
signer.update(msg, 0, msg.length);
110+
byte[] signature = signer.generateSignature();
111+
112+
Signer verifier = createSigner(algorithm, context);
113+
114+
{
115+
verifier.init(false, publicKey);
116+
verifier.update(msg, 0, msg.length);
117+
boolean shouldVerify = verifier.verifySignature(signature);
118+
119+
if (!shouldVerify)
120+
{
121+
fail("Ed25519(" + algorithm + ") signature failed to verify");
122+
}
123+
}
124+
125+
{
126+
byte[] wrongLengthSignature = Arrays.append(signature, (byte)0x00);
127+
128+
verifier.init(false, publicKey);
129+
verifier.update(msg, 0, msg.length);
130+
boolean shouldNotVerify = verifier.verifySignature(wrongLengthSignature);
131+
132+
if (shouldNotVerify)
133+
{
134+
fail("Ed25519(" + algorithm + ") wrong length signature incorrectly verified");
135+
}
136+
}
137+
138+
if (msg.length > 0)
139+
{
140+
boolean shouldNotVerify = verifier.verifySignature(signature);
141+
142+
if (shouldNotVerify)
143+
{
144+
fail("Ed25519(" + algorithm + ") wrong length failure did not reset verifier");
145+
}
146+
}
147+
148+
{
149+
byte[] badSignature = Arrays.clone(signature);
150+
badSignature[(RANDOM.nextInt() >>> 1) % badSignature.length] ^= 1 << (RANDOM.nextInt() & 7);
151+
152+
verifier.init(false, publicKey);
153+
verifier.update(msg, 0, msg.length);
154+
boolean shouldNotVerify = verifier.verifySignature(badSignature);
155+
156+
if (shouldNotVerify)
157+
{
158+
fail("Ed25519(" + algorithm + ") bad signature incorrectly verified");
159+
}
160+
}
161+
}
162+
}

0 commit comments

Comments
 (0)