Skip to content

Commit 7845f92

Browse files
committed
Add EncryptedMessagePacketTest for PKESK6 and SEIPD2 packets
1 parent 581c10c commit 7845f92

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed

pg/src/test/java/org/bouncycastle/bcpg/test/AllTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public void testPacketParsing()
2323
new SignaturePacketTest(),
2424
new OnePassSignaturePacketTest(),
2525
new OpenPgpMessageTest(),
26-
new FingerprintUtilTest()
26+
new FingerprintUtilTest(),
27+
new EncryptedMessagePacketTest()
2728
};
2829

2930
for (int i = 0; i != tests.length; i++)
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package org.bouncycastle.bcpg.test;
2+
3+
import org.bouncycastle.bcpg.AEADAlgorithmTags;
4+
import org.bouncycastle.bcpg.ArmoredInputStream;
5+
import org.bouncycastle.bcpg.BCPGInputStream;
6+
import org.bouncycastle.bcpg.FingerprintUtil;
7+
import org.bouncycastle.bcpg.PublicKeyAlgorithmTags;
8+
import org.bouncycastle.bcpg.PublicKeyEncSessionPacket;
9+
import org.bouncycastle.bcpg.SymmetricEncIntegrityPacket;
10+
import org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags;
11+
import org.bouncycastle.util.encoders.Hex;
12+
13+
import java.io.ByteArrayInputStream;
14+
import java.io.IOException;
15+
import java.nio.charset.StandardCharsets;
16+
17+
public class EncryptedMessagePacketTest
18+
extends AbstractPacketTest
19+
{
20+
@Override
21+
public String getName()
22+
{
23+
return "PublicKeyEncryptedDataPacketTest";
24+
}
25+
26+
@Override
27+
public void performTest()
28+
throws Exception
29+
{
30+
testPKESK6SEIPD2();
31+
}
32+
33+
private void testPKESK6SEIPD2()
34+
throws IOException
35+
{
36+
String MSG = "-----BEGIN PGP MESSAGE-----\n" +
37+
"\n" +
38+
"wW0GIQYSyD8ecG9jCP4VGkF3Q6HwM3kOk+mXhIjR2zeNqZMIhRk5Bu/DU62hzgRm\n" +
39+
"JYvBYeLA2Nrmz15g69ZN0xAB7SLDRCjjhnK6V7fGns6P1EiSCYbl1uNVBhK0MPGe\n" +
40+
"rU9FY4yUXTnbB6eIXdCw0loCCQIOu95D17wvJJC2a96ou9SGPIoA4Q2dMH5BMS9Z\n" +
41+
"veq3AGgIBdJMF8Ft8PBE30R0cba1O5oQC0Eiscw7fkNnYGuSXagqNXdOBkHDN0fk\n" +
42+
"VWFrxQRbxEVYUWc=\n" +
43+
"=u2kL\n" +
44+
"-----END PGP MESSAGE-----\n";
45+
byte[] fingerprint = Hex.decode("12C83F1E706F6308FE151A417743A1F033790E93E9978488D1DB378DA9930885");
46+
ByteArrayInputStream bIn = new ByteArrayInputStream(MSG.getBytes(StandardCharsets.UTF_8));
47+
ArmoredInputStream aIn = new ArmoredInputStream(bIn);
48+
BCPGInputStream pIn = new BCPGInputStream(aIn);
49+
PublicKeyEncSessionPacket pkesk = (PublicKeyEncSessionPacket) pIn.readPacket();
50+
isEquals("PKESK version mismatch",
51+
PublicKeyEncSessionPacket.VERSION_6, pkesk.getVersion());
52+
isEncodingEqual("PKESK fingerprint mismatch",
53+
fingerprint, pkesk.getKeyFingerprint());
54+
isEquals("PKESK derived key-id mismatch",
55+
FingerprintUtil.keyIdFromV6Fingerprint(fingerprint), pkesk.getKeyID());
56+
isEquals("PKESK public key alg mismatch",
57+
PublicKeyAlgorithmTags.X25519, pkesk.getAlgorithm());
58+
59+
SymmetricEncIntegrityPacket skesk = (SymmetricEncIntegrityPacket) pIn.readPacket();
60+
isEquals("SKESK version mismatch",
61+
SymmetricEncIntegrityPacket.VERSION_2, skesk.getVersion());
62+
isEquals("SKESK sym alg mismatch",
63+
SymmetricKeyAlgorithmTags.AES_256, skesk.getCipherAlgorithm());
64+
isEquals("SKESK AEAD alg mismatch",
65+
AEADAlgorithmTags.OCB, skesk.getAeadAlgorithm());
66+
isEquals("SKESK chunk size mismatch",
67+
0x0e, skesk.getChunkSize());
68+
isEncodingEqual("SKESK salt mismatch",
69+
Hex.decode("BBDE43D7BC2F2490B66BDEA8BBD4863C8A00E10D9D307E41312F59BDEAB70068"), skesk.getSalt());
70+
}
71+
72+
public static void main(String[] args)
73+
{
74+
runTest(new EncryptedMessagePacketTest());
75+
}
76+
}

0 commit comments

Comments
 (0)