Skip to content

Commit 439a643

Browse files
committed
Java 5 compatibility updates
1 parent f7193e0 commit 439a643

19 files changed

Lines changed: 1079 additions & 255 deletions

ant/jdk15+.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
<fileset dir="pkix/src/test/resources" includes="**/*.*" />
5555

5656
<fileset dir="pg/src/main/java" includes="**/*.java" />
57+
<fileset dir="pg/src/main/jdk1.5" includes="**/*.java" />
5758
<fileset dir="pg/src/main/javadoc" includes="**/*.html" />
5859
<fileset dir="pg/src/main/java" includes="**/*.properties" />
5960
<fileset dir="pg/src/test/java" includes="**/*.java" />

pg/src/main/java/org/bouncycastle/gpg/SExprParser.java

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -183,17 +183,21 @@ else if (basePubKey instanceof ECPublicBCPGKey)
183183
pubKey = new PGPPublicKey(pubPacket, fingerPrintCalculator);
184184
}
185185
secretKeyPacket = getSecKeyPacket(pubKey, keyProtectionRemoverFactory, maxDepth, type, expression, digestProvider, eccLabels,
186-
keyIn ->
186+
new GetSecKeyDataOperation()
187187
{
188-
BigInteger d = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("d").getBytes(1));
189-
final String curve = expression.getExpressionWithLabel("curve").getString(1);
190-
if (curve.startsWith("NIST") || curve.startsWith("brain"))
188+
@Override
189+
public byte[] getSecKeyData(SExpression keyIn)
191190
{
192-
return new ECSecretBCPGKey(d).getEncoded();
193-
}
194-
else
195-
{
196-
return new EdSecretBCPGKey(d).getEncoded();
191+
BigInteger d = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("d").getBytes(1));
192+
final String curve = expression.getExpressionWithLabel("curve").getString(1);
193+
if (curve.startsWith("NIST") || curve.startsWith("brain"))
194+
{
195+
return new ECSecretBCPGKey(d).getEncoded();
196+
}
197+
else
198+
{
199+
return new EdSecretBCPGKey(d).getEncoded();
200+
}
197201
}
198202
});
199203
}
@@ -219,10 +223,15 @@ public void assertPublicKeyMatch(BCPGKey k1, BCPGKey k2)
219223
}
220224
});
221225
secretKeyPacket = getSecKeyPacket(pubKey, keyProtectionRemoverFactory, maxDepth, type, expression, digestProvider, dsaLabels,
222-
keyIn ->
226+
new GetSecKeyDataOperation()
223227
{
224-
BigInteger x = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("x").getBytes(1));
225-
return new DSASecretBCPGKey(x).getEncoded();
228+
@Override
229+
public byte[] getSecKeyData(SExpression keyIn)
230+
{
231+
BigInteger x = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("x").getBytes(1));
232+
233+
return new DSASecretBCPGKey(x).getEncoded();
234+
}
226235
});
227236
}
228237
else if (keyType.equals("elg"))
@@ -246,10 +255,15 @@ public void assertPublicKeyMatch(BCPGKey k1, BCPGKey k2)
246255
}
247256
});
248257
secretKeyPacket = getSecKeyPacket(pubKey, keyProtectionRemoverFactory, maxDepth, type, expression, digestProvider, elgLabels,
249-
keyIn ->
258+
new GetSecKeyDataOperation()
250259
{
251-
BigInteger x = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("x").getBytes(1));
252-
return new ElGamalSecretBCPGKey(x).getEncoded();
260+
@Override
261+
public byte[] getSecKeyData(SExpression keyIn)
262+
{
263+
BigInteger x = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("x").getBytes(1));
264+
265+
return new ElGamalSecretBCPGKey(x).getEncoded();
266+
}
253267
});
254268
}
255269
else if (keyType.equals("rsa"))
@@ -275,12 +289,16 @@ public void assertPublicKeyMatch(BCPGKey k1, BCPGKey k2)
275289
}
276290
});
277291
secretKeyPacket = getSecKeyPacket(pubKey, keyProtectionRemoverFactory, maxDepth, type, expression, digestProvider, rsaLabels,
278-
keyIn ->
292+
new GetSecKeyDataOperation()
279293
{
280-
BigInteger d = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("d").getBytes(1));
281-
BigInteger p = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("p").getBytes(1));
282-
BigInteger q = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("q").getBytes(1));
283-
return new RSASecretBCPGKey(d, p, q).getEncoded();
294+
@Override
295+
public byte[] getSecKeyData(SExpression keyIn)
296+
{
297+
BigInteger d = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("d").getBytes(1));
298+
BigInteger p = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("p").getBytes(1));
299+
BigInteger q = BigIntegers.fromUnsignedByteArray(keyIn.getExpressionWithLabelOrFail("q").getBytes(1));
300+
return new RSASecretBCPGKey(d, p, q).getEncoded();
301+
}
284302
});
285303
}
286304
else
@@ -340,14 +358,14 @@ private static PGPPublicKey getPublicKey(KeyFingerPrintCalculator fingerPrintCal
340358
return pubKey;
341359
}
342360

343-
private interface getSecKeyDataOperation
361+
private interface GetSecKeyDataOperation
344362
{
345363
byte[] getSecKeyData(SExpression keyIn);
346364
}
347365

348366
private static SecretKeyPacket getSecKeyPacket(PGPPublicKey pubKey, PBEProtectionRemoverFactory keyProtectionRemoverFactory, int maxDepth, int type,
349367
SExpression expression, PGPDigestCalculatorProvider digestProvider,
350-
Map<Integer, String[]> labels, getSecKeyDataOperation operation)
368+
Map<Integer, String[]> labels, GetSecKeyDataOperation operation)
351369
throws PGPException, IOException
352370
{
353371
byte[] secKeyData = null;

pg/src/main/java/org/bouncycastle/gpg/SExpression.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.io.IOException;
66
import java.io.InputStream;
77
import java.io.OutputStream;
8-
import java.nio.charset.StandardCharsets;
98
import java.util.ArrayList;
109
import java.util.Arrays;
1110
import java.util.HashSet;
@@ -118,7 +117,7 @@ private static SExpression parseExpression(InputStream src, SExpression expr, By
118117
Object object = expr.values.get(size - 1);
119118
if (object instanceof String && stringLabels.contains(object))
120119
{
121-
expr.addValue(new String(b, StandardCharsets.UTF_8));
120+
expr.addValue(Strings.fromUTF8ByteArray(b));
122121
}
123122
else
124123
{
@@ -127,7 +126,7 @@ private static SExpression parseExpression(InputStream src, SExpression expr, By
127126
}
128127
else
129128
{
130-
expr.addValue(new String(b, StandardCharsets.UTF_8));
129+
expr.addValue(Strings.fromUTF8ByteArray(b));
131130
}
132131
}
133132
else

pg/src/main/java/org/bouncycastle/openpgp/operator/bc/BcAEADUtil.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,27 @@ public static AEADBlockCipher createAEADCipher(int encAlgorithm, int aeadAlgorit
116116
|| encAlgorithm == SymmetricKeyAlgorithmTags.AES_192
117117
|| encAlgorithm == SymmetricKeyAlgorithmTags.AES_256)
118118
{
119-
return createAEADCipher(aeadAlgorithm, AESEngine.newInstance());
119+
return createAEADCipher(aeadAlgorithm, new Engine()
120+
{
121+
@Override
122+
public BlockCipher newInstance()
123+
{
124+
return AESEngine.newInstance();
125+
}
126+
});
120127
}
121128
else if (enableCamellia && (encAlgorithm == SymmetricKeyAlgorithmTags.CAMELLIA_128
122129
|| encAlgorithm == SymmetricKeyAlgorithmTags.CAMELLIA_192
123130
|| encAlgorithm == SymmetricKeyAlgorithmTags.CAMELLIA_256))
124131
{
125-
return createAEADCipher(aeadAlgorithm, new CamelliaEngine());
132+
return createAEADCipher(aeadAlgorithm, new Engine()
133+
{
134+
@Override
135+
public BlockCipher newInstance()
136+
{
137+
return new CamelliaEngine();
138+
}
139+
});
126140
}
127141
// Block Cipher must work on 16 byte blocks
128142
throw new PGPException("AEAD only supported for AES" + (enableCamellia ? " and Camellia" : "") + " based algorithms");

pg/src/main/java/org/bouncycastle/openpgp/operator/bc/BcPublicKeyDataDecryptorFactory.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,26 @@ public byte[] recoverSessionData(int keyAlgorithm, byte[][] secKeyData)
6565
if (keyAlgorithm == PublicKeyAlgorithmTags.X25519)
6666
{
6767
return getSessionData(secKeyData[0], privKey, X25519PublicBCPGKey.LENGTH, HashAlgorithmTags.SHA256,
68-
SymmetricKeyAlgorithmTags.AES_128, new X25519Agreement(), "X25519", new X25519PublicKeyParameters());
68+
SymmetricKeyAlgorithmTags.AES_128, new X25519Agreement(), "X25519", new PublicKeyParametersOperation()
69+
{
70+
@Override
71+
public AsymmetricKeyParameter getPublicKeyParameters(byte[] pEnc, int pEncOff)
72+
{
73+
return new X25519PublicKeyParameters(pEnc, 0);
74+
}
75+
});
6976
}
7077
else if (keyAlgorithm == PublicKeyAlgorithmTags.X448)
7178
{
7279
return getSessionData(secKeyData[0], privKey, X448PublicBCPGKey.LENGTH, HashAlgorithmTags.SHA512,
73-
SymmetricKeyAlgorithmTags.AES_256, new X448Agreement(), "X448", new X448PublicKeyParameters());
80+
SymmetricKeyAlgorithmTags.AES_256, new X448Agreement(), "X448", new PublicKeyParametersOperation()
81+
{
82+
@Override
83+
public AsymmetricKeyParameter getPublicKeyParameters(byte[] pEnc, int pEncOff)
84+
{
85+
return new X448PublicKeyParameters(pEnc, 0);
86+
}
87+
});
7488
}
7589
else if (keyAlgorithm == PublicKeyAlgorithmTags.ECDH)
7690
{

pg/src/main/java/org/bouncycastle/openpgp/operator/bc/BcPublicKeyKeyEncryptionMethodGenerator.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,27 @@ else if (pubKey.getAlgorithm() == PublicKeyAlgorithmTags.X25519)
115115
{
116116
return encryptSessionInfo(pubKeyPacket, sessionInfo, HashAlgorithmTags.SHA256, SymmetricKeyAlgorithmTags.AES_128, "X25519",
117117
new X25519KeyPairGenerator(), new X25519KeyGenerationParameters(random), new X25519Agreement(), cryptoPublicKey, X25519PublicKeyParameters.KEY_SIZE,
118-
(publicKey, ephPubEncoding) -> ((X25519PublicKeyParameters)publicKey).encode(ephPubEncoding, 0));
118+
new EphPubEncodingOperation()
119+
{
120+
@Override
121+
public void getEphPubEncoding(AsymmetricKeyParameter publicKey, byte[] ephPubEncoding)
122+
{
123+
((X25519PublicKeyParameters)publicKey).encode(ephPubEncoding, 0);
124+
}
125+
});
119126
}
120127
else if (pubKey.getAlgorithm() == PublicKeyAlgorithmTags.X448)
121128
{
122129
return encryptSessionInfo(pubKeyPacket, sessionInfo, HashAlgorithmTags.SHA512, SymmetricKeyAlgorithmTags.AES_256, "X448",
123130
new X448KeyPairGenerator(), new X448KeyGenerationParameters(random), new X448Agreement(), cryptoPublicKey, X448PublicKeyParameters.KEY_SIZE,
124-
(publicKey, ephPubEncoding) -> ((X448PublicKeyParameters)publicKey).encode(ephPubEncoding, 0));
131+
new EphPubEncodingOperation()
132+
{
133+
@Override
134+
public void getEphPubEncoding(AsymmetricKeyParameter publicKey, byte[] ephPubEncoding)
135+
{
136+
((X448PublicKeyParameters)publicKey).encode(ephPubEncoding, 0);
137+
}
138+
});
125139
}
126140
else
127141
{
@@ -132,18 +146,14 @@ else if (pubKey.getAlgorithm() == PublicKeyAlgorithmTags.X448)
132146
return c.processBlock(sessionInfo, 0, sessionInfo.length);
133147
}
134148
}
135-
catch (InvalidCipherTextException e)
136-
{
137-
throw new PGPException("exception encrypting session info: " + e.getMessage(), e);
138-
}
139-
catch (IOException e)
149+
catch (Exception e)
140150
{
141151
throw new PGPException("exception encrypting session info: " + e.getMessage(), e);
142152
}
143153
}
144154

145155
@FunctionalInterface
146-
private interface ephPubEncodingOperation
156+
private interface EphPubEncodingOperation
147157
{
148158
void getEphPubEncoding(AsymmetricKeyParameter publicKey, byte[] ephPubEncoding);
149159
}
@@ -163,7 +173,7 @@ private byte[] encryptSessionInfo(byte[] sessionInfo, byte[] secret,
163173

164174
private byte[] encryptSessionInfo(PublicKeyPacket pubKeyPacket, byte[] sessionInfo, int hashAlgorithm, int symmetricKeyAlgorithm, String algorithmName,
165175
AsymmetricCipherKeyPairGenerator gen, KeyGenerationParameters parameters, RawAgreement agreement, AsymmetricKeyParameter cryptoPublicKey,
166-
int keySize, ephPubEncodingOperation ephPubEncodingOperation)
176+
int keySize, EphPubEncodingOperation ephPubEncodingOperation)
167177
throws PGPException, IOException
168178
{
169179
AsymmetricCipherKeyPair ephKp = getAsymmetricCipherKeyPair(gen, parameters);

pg/src/main/java/org/bouncycastle/openpgp/operator/jcajce/JcePublicKeyDataDecryptorFactoryBuilder.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -282,13 +282,9 @@ private byte[] decryptSessionData(JcaPGPKeyConverter converter, PGPPrivateKey pr
282282

283283
return PGPPad.unpadSessionData(paddedSessionKey.getEncoded());
284284
}
285-
catch (GeneralSecurityException e)
285+
catch (Exception e)
286286
{
287-
throw new PGPException("error setting asymmetric cipher", e);
288-
}
289-
catch (IOException e)
290-
{
291-
throw new PGPException("error setting asymmetric cipher", e);
287+
throw new PGPException("error decrypting session data: " + e.getMessage(), e);
292288
}
293289
}
294290

@@ -313,9 +309,9 @@ private byte[] decryptSessionData(JcaPGPKeyConverter converter, PGPPrivateKey pr
313309
symmetricKeyAlgorithm = enc[pLen + 1] & 0xff;
314310
return Arrays.concatenate(new byte[]{(byte)symmetricKeyAlgorithm}, paddedSessionKey.getEncoded());
315311
}
316-
catch (GeneralSecurityException | IOException e)
312+
catch (Exception e)
317313
{
318-
throw new PGPException("error setting asymmetric cipher", e);
314+
throw new PGPException("error decrypting session data: " + e.getMessage(), e);
319315
}
320316
}
321317

pg/src/main/jdk1.5/org/bouncycastle/openpgp/operator/bc/BcPublicKeyKeyEncryptionMethodGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public void getEphPubEncoding(AsymmetricKeyParameter publicKey, byte[] ephPubEnc
146146
return c.processBlock(sessionInfo, 0, sessionInfo.length);
147147
}
148148
}
149-
catch (InvalidCipherTextException | IOException e)
149+
catch (Exception e)
150150
{
151151
throw new PGPException("exception encrypting session info: " + e.getMessage(), e);
152152
}

pg/src/main/jdk1.5/org/bouncycastle/openpgp/operator/jcajce/JcaPGPKeyConverter.java

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public PrivateKey getPrivateKey(PGPPrivateKey privKey)
174174
}
175175

176176
PublicKeyPacket pubPk = privKey.getPublicKeyPacket();
177-
BCPGKey privPk = privKey.getPrivateKeyDataPacket();
177+
final BCPGKey privPk = privKey.getPrivateKeyDataPacket();
178178

179179
try
180180
{
@@ -509,11 +509,25 @@ public BCPGKey getBCPGKey(byte[] pInfoEncoded)
509509
}
510510
case PublicKeyAlgorithmTags.Ed25519:
511511
{
512-
return getPrivateBCPGKey(privKey, Ed25519SecretBCPGKey::new);
512+
return getPrivateBCPGKey(privKey, new BCPGKeyOperation()
513+
{
514+
@Override
515+
public BCPGKey getBCPGKey(byte[] pInfoEncoded)
516+
{
517+
return new Ed25519SecretBCPGKey(pInfoEncoded);
518+
}
519+
});
513520
}
514521
case PublicKeyAlgorithmTags.Ed448:
515522
{
516-
return getPrivateBCPGKey(privKey, Ed448SecretBCPGKey::new);
523+
return getPrivateBCPGKey(privKey, new BCPGKeyOperation()
524+
{
525+
@Override
526+
public BCPGKey getBCPGKey(byte[] pInfoEncoded)
527+
{
528+
return new Ed448SecretBCPGKey(pInfoEncoded);
529+
}
530+
});
517531
}
518532
case PublicKeyAlgorithmTags.ELGAMAL_ENCRYPT:
519533
case PublicKeyAlgorithmTags.ELGAMAL_GENERAL:
@@ -583,15 +597,29 @@ else if (algorithm == PGPPublicKey.ECDSA)
583597
}
584598
else if (algorithm == PGPPublicKey.Ed25519)
585599
{
586-
return getPublicBCPGKey(pubKey, Ed25519PublicBCPGKey.LENGTH, Ed25519PublicBCPGKey::new);
600+
return getPublicBCPGKey(pubKey, Ed25519PublicBCPGKey.LENGTH, new BCPGKeyOperation()
601+
{
602+
@Override
603+
public BCPGKey getBCPGKey(byte[] key)
604+
{
605+
return new Ed25519PublicBCPGKey(key);
606+
}
607+
});
587608
}
588609
else if (pubKey.getAlgorithm().regionMatches(true, 0, "ED2", 0, 3))
589610
{
590611
return new EdDSAPublicBCPGKey(GNUObjectIdentifiers.Ed25519, new BigInteger(1, getPointEncUncompressed(pubKey, Ed25519.PUBLIC_KEY_SIZE)));
591612
}
592613
else if (algorithm == PGPPublicKey.X25519)
593614
{
594-
return getPublicBCPGKey(pubKey, X25519PublicBCPGKey.LENGTH, X25519PublicBCPGKey::new);
615+
return getPublicBCPGKey(pubKey, X25519PublicBCPGKey.LENGTH, new BCPGKeyOperation()
616+
{
617+
@Override
618+
public BCPGKey getBCPGKey(byte[] key)
619+
{
620+
return new X25519PublicBCPGKey(key);
621+
}
622+
});
595623
}
596624
else if (pubKey.getAlgorithm().regionMatches(true, 0, "X2", 0, 2))
597625
{
@@ -602,11 +630,25 @@ else if (pubKey.getAlgorithm().regionMatches(true, 0, "X2", 0, 2))
602630
}
603631
else if (algorithm == PGPPublicKey.Ed448)
604632
{
605-
return getPublicBCPGKey(pubKey, Ed448PublicBCPGKey.LENGTH, Ed448PublicBCPGKey::new);
633+
return getPublicBCPGKey(pubKey, Ed448PublicBCPGKey.LENGTH, new BCPGKeyOperation()
634+
{
635+
@Override
636+
public BCPGKey getBCPGKey(byte[] key)
637+
{
638+
return new Ed448PublicBCPGKey(key);
639+
}
640+
});
606641
}
607642
else if (algorithm == PGPPublicKey.X448)
608643
{
609-
return getPublicBCPGKey(pubKey, X448PublicBCPGKey.LENGTH, X448PublicBCPGKey::new);
644+
return getPublicBCPGKey(pubKey, X448PublicBCPGKey.LENGTH, new BCPGKeyOperation()
645+
{
646+
@Override
647+
public BCPGKey getBCPGKey(byte[] key)
648+
{
649+
return new X448PublicBCPGKey(key);
650+
}
651+
});
610652
}
611653
else
612654
{

0 commit comments

Comments
 (0)