Skip to content

Commit 6647e01

Browse files
author
gefeili
committed
Add OperatorJcajceTest.testJcaAEADSecretKeyEncryptorBuilder
1 parent 544e807 commit 6647e01

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

pg/src/test/java/org/bouncycastle/openpgp/test/OperatorJcajceTest.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.security.PrivateKey;
1010
import java.security.Provider;
1111
import java.security.PublicKey;
12+
import java.security.SecureRandom;
1213
import java.security.Security;
1314
import java.security.spec.PKCS8EncodedKeySpec;
1415
import java.security.spec.X509EncodedKeySpec;
@@ -21,6 +22,7 @@
2122
import org.bouncycastle.bcpg.HashAlgorithmTags;
2223
import org.bouncycastle.bcpg.PublicKeyAlgorithmTags;
2324
import org.bouncycastle.bcpg.PublicKeyPacket;
25+
import org.bouncycastle.bcpg.S2K;
2426
import org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags;
2527
import org.bouncycastle.crypto.digests.SHA256Digest;
2628
import org.bouncycastle.crypto.params.X25519PrivateKeyParameters;
@@ -30,21 +32,27 @@
3032
import org.bouncycastle.jcajce.spec.HybridValueParameterSpec;
3133
import org.bouncycastle.jcajce.spec.UserKeyingMaterialSpec;
3234
import org.bouncycastle.jce.provider.BouncyCastleProvider;
35+
import org.bouncycastle.jce.spec.ECNamedCurveGenParameterSpec;
3336
import org.bouncycastle.openpgp.PGPEncryptedData;
37+
import org.bouncycastle.openpgp.PGPKeyPair;
3438
import org.bouncycastle.openpgp.PGPPublicKey;
39+
import org.bouncycastle.openpgp.operator.PBESecretKeyEncryptor;
3540
import org.bouncycastle.openpgp.operator.PGPContentVerifier;
3641
import org.bouncycastle.openpgp.operator.PGPDigestCalculator;
3742
import org.bouncycastle.openpgp.operator.PGPDigestCalculatorProvider;
43+
import org.bouncycastle.openpgp.operator.jcajce.JcaAEADSecretKeyEncryptorBuilder;
3844
import org.bouncycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator;
3945
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider;
4046
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBuilder;
4147
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyConverter;
48+
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyPair;
4249
import org.bouncycastle.openpgp.operator.jcajce.JcePBESecretKeyEncryptorBuilder;
4350
import org.bouncycastle.openpgp.operator.jcajce.JcePGPDataEncryptorBuilder;
4451
import org.bouncycastle.util.Arrays;
4552
import org.bouncycastle.util.Strings;
4653
import org.bouncycastle.util.encoders.Hex;
4754
import org.bouncycastle.util.test.SimpleTest;
55+
import org.junit.Assert;
4856

4957
public class OperatorJcajceTest
5058
extends SimpleTest
@@ -66,6 +74,7 @@ public String getName()
6674
public void performTest()
6775
throws Exception
6876
{
77+
testJcaAEADSecretKeyEncryptorBuilder();
6978
testCreateDigest();
7079
testX25519HKDF();
7180
testJcePBESecretKeyEncryptorBuilder();
@@ -316,12 +325,43 @@ public void testX25519HKDF()
316325
//isTrue(Arrays.areEqual(output, expectedDecryptedSessionKey));
317326
}
318327

328+
public void testJcaAEADSecretKeyEncryptorBuilder()
329+
throws Exception
330+
{
331+
BouncyCastleProvider prov = new BouncyCastleProvider();
332+
KeyPairGenerator eddsaGen = KeyPairGenerator.getInstance("EdDSA", prov);
333+
Date creationTime = new Date();
334+
eddsaGen.initialize(new ECNamedCurveGenParameterSpec("ed25519"));
335+
KeyPair kp = eddsaGen.generateKeyPair();
336+
SecureRandom random = new SecureRandom();
337+
for (int version : new int[]{PublicKeyPacket.VERSION_4, PublicKeyPacket.VERSION_6})
338+
{
339+
PGPKeyPair keyPair = new JcaPGPKeyPair(version, PublicKeyAlgorithmTags.Ed25519, kp, creationTime);
340+
JcaAEADSecretKeyEncryptorBuilder jcaEncBuilder = new JcaAEADSecretKeyEncryptorBuilder(
341+
AEADAlgorithmTags.OCB, SymmetricKeyAlgorithmTags.AES_256,
342+
S2K.Argon2Params.memoryConstrainedParameters())
343+
.setProvider(new BouncyCastleProvider());
344+
PBESecretKeyEncryptor encryptor = jcaEncBuilder.build(
345+
"Yin".toCharArray(),
346+
keyPair.getPublicKey().getPublicKeyPacket());
347+
byte[] key = new byte[16];
348+
random.nextBytes(key);
349+
byte[] input1 = new byte[64];
350+
random.nextBytes(input1);
351+
352+
byte[] input2 = Arrays.copyOfRange(input1, 32, 64);
353+
byte[] output1 = encryptor.encryptKeyData(key, input1, 32, 32);
354+
byte[] output2 = encryptor.encryptKeyData(key, input2, 0, 32);
355+
Assert.assertTrue(Arrays.areEqual(output1, output2));
356+
}
357+
}
358+
319359
private class NullProvider
320360
extends Provider
321361
{
322362
NullProvider()
323363
{
324-
super("NULL", 0.0, "Null Provider");
364+
super("NULL", 0.0, "Null Provider");
325365
}
326366
}
327367

0 commit comments

Comments
 (0)