Skip to content

Commit 9e78072

Browse files
committed
Rename APIProvider, add base tests
1 parent d146e30 commit 9e78072

File tree

1 file changed

+47
-36
lines changed

1 file changed

+47
-36
lines changed

pg/src/test/java/org/bouncycastle/openpgp/api/test/OpenPGPV6KeyGeneratorTest.java

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.bouncycastle.bcpg.PublicKeyPacket;
44
import org.bouncycastle.bcpg.PublicKeyUtils;
55
import org.bouncycastle.bcpg.SecretKeyPacket;
6+
import org.bouncycastle.bcpg.SignaturePacket;
67
import org.bouncycastle.bcpg.SignatureSubpacketTags;
78
import org.bouncycastle.bcpg.sig.Features;
89
import org.bouncycastle.bcpg.sig.KeyFlags;
@@ -12,6 +13,7 @@
1213
import org.bouncycastle.openpgp.PGPSecretKey;
1314
import org.bouncycastle.openpgp.PGPSecretKeyRing;
1415
import org.bouncycastle.openpgp.PGPSignature;
16+
import org.bouncycastle.openpgp.PGPSignatureSubpacketVector;
1517
import org.bouncycastle.openpgp.api.OpenPGPV6KeyGenerator;
1618
import org.bouncycastle.openpgp.api.bc.BcOpenPGPV6KeyGenerator;
1719
import org.bouncycastle.openpgp.api.jcajce.JcaOpenPGPV6KeyGenerator;
@@ -37,24 +39,24 @@ public void performTest()
3739
throws Exception
3840
{
3941
// Run tests using the BC implementation
40-
performTests(new ImplementationProvider()
42+
performTests(new APIProvider()
4143
{
4244
@Override
43-
public OpenPGPV6KeyGenerator get(int signatureHashAlgorithm,
44-
Date creationTime,
45-
boolean aeadProtection)
45+
public OpenPGPV6KeyGenerator getKeyGenerator(int signatureHashAlgorithm,
46+
Date creationTime,
47+
boolean aeadProtection)
4648
{
4749
return new BcOpenPGPV6KeyGenerator(signatureHashAlgorithm, creationTime, aeadProtection);
4850
}
4951
});
5052

5153
// Run tests using the JCA/JCE implementation
52-
performTests(new ImplementationProvider()
54+
performTests(new APIProvider()
5355
{
5456
@Override
55-
public OpenPGPV6KeyGenerator get(int signatureHashAlgorithm,
56-
Date creationTime,
57-
boolean aeadProtection)
57+
public OpenPGPV6KeyGenerator getKeyGenerator(int signatureHashAlgorithm,
58+
Date creationTime,
59+
boolean aeadProtection)
5860
throws PGPException
5961
{
6062
return new JcaOpenPGPV6KeyGenerator(signatureHashAlgorithm, creationTime, aeadProtection,
@@ -63,41 +65,50 @@ public OpenPGPV6KeyGenerator get(int signatureHashAlgorithm,
6365
});
6466
}
6567

66-
private void performTests(ImplementationProvider implementationProvider)
68+
private void performTests(APIProvider apiProvider)
6769
throws PGPException, IOException
6870
{
69-
testGenerateSignOnlyKeyBaseCase(implementationProvider);
70-
testGenerateAEADProtectedSignOnlyKey(implementationProvider);
71-
testGenerateCFBProtectedSignOnlyKey(implementationProvider);
71+
testGenerateSignOnlyKeyBaseCase(apiProvider);
72+
testGenerateAEADProtectedSignOnlyKey(apiProvider);
73+
testGenerateCFBProtectedSignOnlyKey(apiProvider);
7274

73-
testGenerateClassicKeyBaseCase(implementationProvider);
74-
testGenerateProtectedTypicalKey(implementationProvider);
75+
testGenerateClassicKeyBaseCase(apiProvider);
76+
testGenerateProtectedTypicalKey(apiProvider);
7577

76-
testGenerateCustomKey(implementationProvider);
78+
testGenerateCustomKey(apiProvider);
7779
}
7880

79-
private void testGenerateSignOnlyKeyBaseCase(ImplementationProvider implementationProvider)
81+
private void testGenerateSignOnlyKeyBaseCase(APIProvider apiProvider)
8082
throws PGPException
8183
{
82-
OpenPGPV6KeyGenerator generator = implementationProvider.get();
84+
OpenPGPV6KeyGenerator generator = apiProvider.getKeyGenerator();
8385
PGPSecretKeyRing secretKeys = generator.signOnlyKey();
8486

8587
Iterator<PGPSecretKey> it = secretKeys.getSecretKeys();
8688
PGPSecretKey primaryKey = it.next();
8789
isFalse("sign-only key MUST consists of only a single key", it.hasNext());
8890
PGPSignature directKeySignature = primaryKey.getPublicKey().getKeySignatures().next();
8991
isNotNull("Key MUST have direct-key signature", directKeySignature);
92+
isEquals("Direct-key signature MUST be version 6",
93+
SignaturePacket.VERSION_6, directKeySignature.getVersion());
94+
PGPSignatureSubpacketVector hPackets = directKeySignature.getHashedSubPackets();
95+
isNotNull("Subpackets MUST contain issuer-fingerprint subpacket",
96+
hPackets.getIssuerFingerprint());
97+
isFalse("Subpackets MUST NOT contain issuer-key-id subpacket",
98+
hPackets.hasSubpacket(SignatureSubpacketTags.ISSUER_KEY_ID));
99+
isNotNull("Subpackets MUST contain signature creation-time subpacket",
100+
hPackets.getSignatureCreationTime());
90101
isEquals("Sign-Only primary key MUST carry CS flags",
91-
KeyFlags.CERTIFY_OTHER | KeyFlags.SIGN_DATA, directKeySignature.getHashedSubPackets().getKeyFlags());
102+
KeyFlags.CERTIFY_OTHER | KeyFlags.SIGN_DATA, hPackets.getKeyFlags());
92103

93104
isEquals("Key version mismatch", 6, primaryKey.getPublicKey().getVersion());
94105
isEquals("Key MUST be unprotected", SecretKeyPacket.USAGE_NONE, primaryKey.getS2KUsage());
95106
}
96107

97-
private void testGenerateAEADProtectedSignOnlyKey(ImplementationProvider implementationProvider)
108+
private void testGenerateAEADProtectedSignOnlyKey(APIProvider apiProvider)
98109
throws PGPException
99110
{
100-
OpenPGPV6KeyGenerator generator = implementationProvider.get(true);
111+
OpenPGPV6KeyGenerator generator = apiProvider.getKeyGenerator(true);
101112
PGPSecretKeyRing secretKeys = generator.signOnlyKey("passphrase".toCharArray());
102113

103114
Iterator<PGPSecretKey> it = secretKeys.getSecretKeys();
@@ -111,10 +122,10 @@ private void testGenerateAEADProtectedSignOnlyKey(ImplementationProvider impleme
111122
.build("passphrase".toCharArray())));
112123
}
113124

114-
private void testGenerateCFBProtectedSignOnlyKey(ImplementationProvider implementationProvider)
125+
private void testGenerateCFBProtectedSignOnlyKey(APIProvider apiProvider)
115126
throws PGPException
116127
{
117-
OpenPGPV6KeyGenerator generator = implementationProvider.get(false);
128+
OpenPGPV6KeyGenerator generator = apiProvider.getKeyGenerator(false);
118129
PGPSecretKeyRing secretKeys = generator.signOnlyKey("passphrase".toCharArray());
119130

120131
Iterator<PGPSecretKey> it = secretKeys.getSecretKeys();
@@ -128,11 +139,11 @@ private void testGenerateCFBProtectedSignOnlyKey(ImplementationProvider implemen
128139
.build("passphrase".toCharArray())));
129140
}
130141

131-
private void testGenerateClassicKeyBaseCase(ImplementationProvider provider)
142+
private void testGenerateClassicKeyBaseCase(APIProvider apiProvider)
132143
throws PGPException
133144
{
134145
Date creationTime = currentTimeRounded();
135-
OpenPGPV6KeyGenerator generator = provider.get(creationTime);
146+
OpenPGPV6KeyGenerator generator = apiProvider.getKeyGenerator(creationTime);
136147
PGPSecretKeyRing secretKeys = generator
137148
.classicKey("Alice <[email protected]>", null);
138149

@@ -187,11 +198,11 @@ private void testGenerateClassicKeyBaseCase(ImplementationProvider provider)
187198
}
188199
}
189200

190-
private void testGenerateProtectedTypicalKey(ImplementationProvider provider)
201+
private void testGenerateProtectedTypicalKey(APIProvider apiProvider)
191202
throws PGPException
192203
{
193204
Date creationTime = currentTimeRounded();
194-
OpenPGPV6KeyGenerator generator = provider.get(creationTime);
205+
OpenPGPV6KeyGenerator generator = apiProvider.getKeyGenerator(creationTime);
195206
PGPSecretKeyRing secretKeys = generator
196207
.classicKey("Alice <[email protected]>", "passphrase".toCharArray());
197208

@@ -218,11 +229,11 @@ private void testGenerateProtectedTypicalKey(ImplementationProvider provider)
218229
}
219230
}
220231

221-
private void testGenerateCustomKey(ImplementationProvider implementationProvider)
232+
private void testGenerateCustomKey(APIProvider apiProvider)
222233
throws PGPException
223234
{
224235
Date creationTime = currentTimeRounded();
225-
OpenPGPV6KeyGenerator generator = implementationProvider.get(creationTime);
236+
OpenPGPV6KeyGenerator generator = apiProvider.getKeyGenerator(creationTime);
226237

227238
PGPSecretKeyRing secretKey = generator
228239
.withPrimaryKey(
@@ -258,27 +269,27 @@ private void testGenerateCustomKey(ImplementationProvider implementationProvider
258269
.build();
259270
}
260271

261-
private abstract static class ImplementationProvider
272+
private abstract static class APIProvider
262273
{
263-
public OpenPGPV6KeyGenerator get()
274+
public OpenPGPV6KeyGenerator getKeyGenerator()
264275
throws PGPException
265276
{
266-
return get(new Date());
277+
return getKeyGenerator(new Date());
267278
}
268279

269-
public OpenPGPV6KeyGenerator get(Date creationTime)
280+
public OpenPGPV6KeyGenerator getKeyGenerator(Date creationTime)
270281
throws PGPException
271282
{
272-
return get(OpenPGPV6KeyGenerator.DEFAULT_SIGNATURE_HASH_ALGORITHM, creationTime, true);
283+
return getKeyGenerator(OpenPGPV6KeyGenerator.DEFAULT_SIGNATURE_HASH_ALGORITHM, creationTime, true);
273284
}
274285

275-
public OpenPGPV6KeyGenerator get(boolean aeadProtection)
286+
public OpenPGPV6KeyGenerator getKeyGenerator(boolean aeadProtection)
276287
throws PGPException
277288
{
278-
return get(OpenPGPV6KeyGenerator.DEFAULT_SIGNATURE_HASH_ALGORITHM, new Date(), aeadProtection);
289+
return getKeyGenerator(OpenPGPV6KeyGenerator.DEFAULT_SIGNATURE_HASH_ALGORITHM, new Date(), aeadProtection);
279290
}
280291

281-
public abstract OpenPGPV6KeyGenerator get(int signatureHashAlgorithm, Date creationTime, boolean aeadProtection)
292+
public abstract OpenPGPV6KeyGenerator getKeyGenerator(int signatureHashAlgorithm, Date creationTime, boolean aeadProtection)
282293
throws PGPException;
283294
}
284295

0 commit comments

Comments
 (0)