Skip to content

Commit b096e10

Browse files
committed
API
1 parent ce1e190 commit b096e10

31 files changed

+9107
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.bouncycastle.openpgp;
2+
3+
public class PGPSignatureException
4+
extends PGPException
5+
{
6+
public PGPSignatureException(String message)
7+
{
8+
super(message);
9+
}
10+
11+
public PGPSignatureException(String message, Exception cause)
12+
{
13+
super(message, cause);
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package org.bouncycastle.openpgp.api;
2+
3+
import org.bouncycastle.bcpg.S2K;
4+
import org.bouncycastle.openpgp.PGPException;
5+
import org.bouncycastle.openpgp.PGPObjectFactory;
6+
import org.bouncycastle.openpgp.PGPPrivateKey;
7+
import org.bouncycastle.openpgp.PGPPublicKey;
8+
import org.bouncycastle.openpgp.PGPSessionKey;
9+
import org.bouncycastle.openpgp.bc.BcPGPObjectFactory;
10+
import org.bouncycastle.openpgp.operator.PBEDataDecryptorFactory;
11+
import org.bouncycastle.openpgp.operator.PBEKeyEncryptionMethodGenerator;
12+
import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptorBuilderProvider;
13+
import org.bouncycastle.openpgp.operator.PGPContentSignerBuilder;
14+
import org.bouncycastle.openpgp.operator.PGPContentVerifierBuilderProvider;
15+
import org.bouncycastle.openpgp.operator.PGPDataEncryptorBuilder;
16+
import org.bouncycastle.openpgp.operator.PGPDigestCalculatorProvider;
17+
import org.bouncycastle.openpgp.operator.PublicKeyDataDecryptorFactory;
18+
import org.bouncycastle.openpgp.operator.PublicKeyKeyEncryptionMethodGenerator;
19+
import org.bouncycastle.openpgp.operator.SessionKeyDataDecryptorFactory;
20+
import org.bouncycastle.openpgp.operator.bc.BcPBEDataDecryptorFactory;
21+
import org.bouncycastle.openpgp.operator.bc.BcPBEKeyEncryptionMethodGenerator;
22+
import org.bouncycastle.openpgp.operator.bc.BcPBESecretKeyDecryptorBuilderProvider;
23+
import org.bouncycastle.openpgp.operator.bc.BcPGPContentSignerBuilder;
24+
import org.bouncycastle.openpgp.operator.bc.BcPGPContentVerifierBuilderProvider;
25+
import org.bouncycastle.openpgp.operator.bc.BcPGPDataEncryptorBuilder;
26+
import org.bouncycastle.openpgp.operator.bc.BcPGPDigestCalculatorProvider;
27+
import org.bouncycastle.openpgp.operator.bc.BcPublicKeyDataDecryptorFactory;
28+
import org.bouncycastle.openpgp.operator.bc.BcPublicKeyKeyEncryptionMethodGenerator;
29+
import org.bouncycastle.openpgp.operator.bc.BcSessionKeyDataDecryptorFactory;
30+
31+
import java.io.InputStream;
32+
33+
public class BcOpenPGPImplementation
34+
extends OpenPGPImplementation
35+
{
36+
@Override
37+
public PGPObjectFactory pgpObjectFactory(InputStream packetInputStream)
38+
{
39+
return new BcPGPObjectFactory(packetInputStream);
40+
}
41+
42+
@Override
43+
public PGPContentVerifierBuilderProvider pgpContentVerifierBuilderProvider()
44+
{
45+
return new BcPGPContentVerifierBuilderProvider();
46+
}
47+
48+
@Override
49+
public PBESecretKeyDecryptorBuilderProvider pbeSecretKeyDecryptorBuilderProvider()
50+
{
51+
return new BcPBESecretKeyDecryptorBuilderProvider();
52+
}
53+
54+
@Override
55+
public PGPDataEncryptorBuilder pgpDataEncryptorBuilder(int symmetricKeyAlgorithm)
56+
{
57+
return new BcPGPDataEncryptorBuilder(symmetricKeyAlgorithm);
58+
}
59+
60+
@Override
61+
public PublicKeyKeyEncryptionMethodGenerator publicKeyKeyEncryptionMethodGenerator(PGPPublicKey encryptionSubkey)
62+
{
63+
return new BcPublicKeyKeyEncryptionMethodGenerator(encryptionSubkey);
64+
}
65+
66+
@Override
67+
public PBEKeyEncryptionMethodGenerator pbeKeyEncryptionMethodGenerator(char[] messagePassphrase)
68+
{
69+
return new BcPBEKeyEncryptionMethodGenerator(messagePassphrase);
70+
}
71+
72+
@Override
73+
public PBEKeyEncryptionMethodGenerator pbeKeyEncryptionMethodGenerator(char[] messagePassphrase, S2K.Argon2Params argon2Params)
74+
{
75+
return new BcPBEKeyEncryptionMethodGenerator(messagePassphrase, argon2Params);
76+
}
77+
78+
@Override
79+
public PGPContentSignerBuilder pgpContentSignerBuilder(int publicKeyAlgorithm, int hashAlgorithm)
80+
{
81+
return new BcPGPContentSignerBuilder(publicKeyAlgorithm, hashAlgorithm);
82+
}
83+
84+
@Override
85+
public PBEDataDecryptorFactory pbeDataDecryptorFactory(char[] messagePassphrase)
86+
throws PGPException
87+
{
88+
return new BcPBEDataDecryptorFactory(messagePassphrase, pgpDigestCalculatorProvider());
89+
}
90+
91+
@Override
92+
public SessionKeyDataDecryptorFactory sessionKeyDataDecryptorFactory(PGPSessionKey sessionKey)
93+
{
94+
return new BcSessionKeyDataDecryptorFactory(sessionKey);
95+
}
96+
97+
@Override
98+
public PublicKeyDataDecryptorFactory publicKeyDataDecryptorFactory(PGPPrivateKey decryptionKey)
99+
{
100+
return new BcPublicKeyDataDecryptorFactory(decryptionKey);
101+
}
102+
103+
@Override
104+
public PGPDigestCalculatorProvider pgpDigestCalculatorProvider()
105+
throws PGPException
106+
{
107+
return new BcPGPDigestCalculatorProvider();
108+
}
109+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.bouncycastle.openpgp.api;
2+
3+
/**
4+
* Encryption Mode.
5+
*/
6+
public enum EncryptedDataPacketType
7+
{
8+
/**
9+
* Symmetrically-Encrypted Data packet.
10+
* This method is deprecated, as it does not protect against malleability.
11+
*
12+
* @deprecated
13+
*/
14+
@Deprecated
15+
SED, // deprecated
16+
/**
17+
* Symmetrically-Encrypted-Integrity-Protected Data packet version 1.
18+
* This method protects the message using symmetric encryption as specified in RFC4880.
19+
* Support for this encryption mode is signalled using
20+
* {@link org.bouncycastle.bcpg.sig.Features#FEATURE_MODIFICATION_DETECTION}.
21+
*/
22+
SEIPDv1, // v4
23+
24+
/**
25+
* Symmetrically-Encrypted-Integrity-Protected Data packet version 2.
26+
* This method protects the message using an AEAD encryption scheme specified in RFC9580.
27+
* Support for this feature is signalled using {@link org.bouncycastle.bcpg.sig.Features#FEATURE_SEIPD_V2}.
28+
*/
29+
SEIPDv2, // v6
30+
31+
/**
32+
* LibrePGP OCB-Encrypted Data packet.
33+
* This method protects the message using an AEAD encryption scheme specified in LibrePGP.
34+
* Support for this feature is signalled using {@link org.bouncycastle.bcpg.sig.Features#FEATURE_AEAD_ENCRYPTED_DATA}.
35+
*/
36+
LIBREPGP_OED // "v5"
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
package org.bouncycastle.openpgp.api;
2+
3+
import org.bouncycastle.bcpg.S2K;
4+
import org.bouncycastle.crypto.CryptoServicesRegistrar;
5+
import org.bouncycastle.jce.provider.BouncyCastleProvider;
6+
import org.bouncycastle.openpgp.PGPException;
7+
import org.bouncycastle.openpgp.PGPObjectFactory;
8+
import org.bouncycastle.openpgp.PGPPrivateKey;
9+
import org.bouncycastle.openpgp.PGPPublicKey;
10+
import org.bouncycastle.openpgp.PGPSessionKey;
11+
import org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory;
12+
import org.bouncycastle.openpgp.operator.PBEDataDecryptorFactory;
13+
import org.bouncycastle.openpgp.operator.PBEKeyEncryptionMethodGenerator;
14+
import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptorBuilderProvider;
15+
import org.bouncycastle.openpgp.operator.PGPContentSignerBuilder;
16+
import org.bouncycastle.openpgp.operator.PGPContentVerifierBuilderProvider;
17+
import org.bouncycastle.openpgp.operator.PGPDataEncryptorBuilder;
18+
import org.bouncycastle.openpgp.operator.PGPDigestCalculatorProvider;
19+
import org.bouncycastle.openpgp.operator.PublicKeyDataDecryptorFactory;
20+
import org.bouncycastle.openpgp.operator.PublicKeyKeyEncryptionMethodGenerator;
21+
import org.bouncycastle.openpgp.operator.SessionKeyDataDecryptorFactory;
22+
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentSignerBuilder;
23+
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider;
24+
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBuilder;
25+
import org.bouncycastle.openpgp.operator.jcajce.JcePBEDataDecryptorFactoryBuilder;
26+
import org.bouncycastle.openpgp.operator.jcajce.JcePBEKeyEncryptionMethodGenerator;
27+
import org.bouncycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilderProvider;
28+
import org.bouncycastle.openpgp.operator.jcajce.JcePGPDataEncryptorBuilder;
29+
import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder;
30+
import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator;
31+
import org.bouncycastle.openpgp.operator.jcajce.JceSessionKeyDataDecryptorFactoryBuilder;
32+
33+
import java.io.InputStream;
34+
import java.security.Provider;
35+
import java.security.SecureRandom;
36+
37+
public class JcaOpenPGPImplementation
38+
extends OpenPGPImplementation
39+
{
40+
private final Provider provider;
41+
private final SecureRandom secureRandom;
42+
43+
public JcaOpenPGPImplementation()
44+
{
45+
this(new BouncyCastleProvider(), CryptoServicesRegistrar.getSecureRandom());
46+
}
47+
48+
public JcaOpenPGPImplementation(Provider provider, SecureRandom secureRandom)
49+
{
50+
this.provider = provider;
51+
this.secureRandom = secureRandom;
52+
}
53+
54+
@Override
55+
public PGPObjectFactory pgpObjectFactory(InputStream packetInputStream)
56+
{
57+
return new JcaPGPObjectFactory(packetInputStream);
58+
}
59+
60+
@Override
61+
public PGPContentVerifierBuilderProvider pgpContentVerifierBuilderProvider()
62+
{
63+
JcaPGPContentVerifierBuilderProvider p = new JcaPGPContentVerifierBuilderProvider();
64+
p.setProvider(provider);
65+
return p;
66+
}
67+
68+
@Override
69+
public PBESecretKeyDecryptorBuilderProvider pbeSecretKeyDecryptorBuilderProvider()
70+
{
71+
JcaPGPDigestCalculatorProviderBuilder dp = new JcaPGPDigestCalculatorProviderBuilder();
72+
dp.setProvider(provider);
73+
JcePBESecretKeyDecryptorBuilderProvider p = new JcePBESecretKeyDecryptorBuilderProvider(dp);
74+
return p;
75+
}
76+
77+
@Override
78+
public PGPDataEncryptorBuilder pgpDataEncryptorBuilder(int symmetricKeyAlgorithm)
79+
{
80+
JcePGPDataEncryptorBuilder b = new JcePGPDataEncryptorBuilder(symmetricKeyAlgorithm);
81+
b.setProvider(provider);
82+
b.setSecureRandom(secureRandom);
83+
return b;
84+
}
85+
86+
@Override
87+
public PublicKeyKeyEncryptionMethodGenerator publicKeyKeyEncryptionMethodGenerator(PGPPublicKey encryptionSubkey)
88+
{
89+
JcePublicKeyKeyEncryptionMethodGenerator g = new JcePublicKeyKeyEncryptionMethodGenerator(encryptionSubkey);
90+
g.setProvider(provider);
91+
g.setSecureRandom(secureRandom);
92+
return g;
93+
}
94+
95+
@Override
96+
public PBEKeyEncryptionMethodGenerator pbeKeyEncryptionMethodGenerator(char[] messagePassphrase)
97+
{
98+
JcePBEKeyEncryptionMethodGenerator g = new JcePBEKeyEncryptionMethodGenerator(messagePassphrase);
99+
g.setProvider(provider);
100+
g.setSecureRandom(secureRandom);
101+
return g;
102+
}
103+
104+
@Override
105+
public PBEKeyEncryptionMethodGenerator pbeKeyEncryptionMethodGenerator(char[] messagePassphrase, S2K.Argon2Params argon2Params)
106+
{
107+
JcePBEKeyEncryptionMethodGenerator g = new JcePBEKeyEncryptionMethodGenerator(messagePassphrase, argon2Params);
108+
g.setProvider(provider);
109+
g.setSecureRandom(secureRandom);
110+
return g;
111+
}
112+
113+
@Override
114+
public PGPContentSignerBuilder pgpContentSignerBuilder(int publicKeyAlgorithm, int hashAlgorithm)
115+
{
116+
JcaPGPContentSignerBuilder b = new JcaPGPContentSignerBuilder(publicKeyAlgorithm, hashAlgorithm);
117+
b.setProvider(provider);
118+
b.setDigestProvider(provider);
119+
b.setSecureRandom(secureRandom);
120+
return b;
121+
}
122+
123+
@Override
124+
public PBEDataDecryptorFactory pbeDataDecryptorFactory(char[] messagePassphrase)
125+
throws PGPException
126+
{
127+
return new JcePBEDataDecryptorFactoryBuilder(pgpDigestCalculatorProvider())
128+
.setProvider(provider)
129+
.build(messagePassphrase);
130+
}
131+
132+
@Override
133+
public SessionKeyDataDecryptorFactory sessionKeyDataDecryptorFactory(PGPSessionKey sessionKey)
134+
{
135+
return new JceSessionKeyDataDecryptorFactoryBuilder()
136+
.setProvider(provider)
137+
.build(sessionKey);
138+
}
139+
140+
@Override
141+
public PublicKeyDataDecryptorFactory publicKeyDataDecryptorFactory(PGPPrivateKey decryptionKey)
142+
{
143+
return new JcePublicKeyDataDecryptorFactoryBuilder()
144+
.setProvider(provider)
145+
.setContentProvider(provider)
146+
.build(decryptionKey);
147+
}
148+
149+
@Override
150+
public PGPDigestCalculatorProvider pgpDigestCalculatorProvider()
151+
throws PGPException
152+
{
153+
return new JcaPGPDigestCalculatorProviderBuilder()
154+
.setProvider(provider)
155+
.build();
156+
}
157+
}

0 commit comments

Comments
 (0)