class BouncyCastleGpgKeyLocator
extends java.lang.Object
~/.gnupg/private-keys-v1.d
or
~/.gnupg/secring.gpg
Modifier and Type | Class and Description |
---|---|
private static class |
BouncyCastleGpgKeyLocator.NoOpenPgpKeyException
Thrown if a keybox file exists but doesn't contain an OpenPGP key.
|
Modifier and Type | Field and Description |
---|---|
private static java.nio.file.Path |
GPG_DIRECTORY |
private static org.slf4j.Logger |
log |
private BouncyCastleGpgKeyPassphrasePrompt |
passphrasePrompt |
private java.lang.String |
signingKey |
private static java.nio.file.Path |
USER_KEYBOX_PATH |
private static java.nio.file.Path |
USER_PGP_LEGACY_SECRING_FILE |
private static java.nio.file.Path |
USER_PGP_PUBRING_FILE |
private static java.nio.file.Path |
USER_SECRET_KEY_DIR |
Constructor and Description |
---|
BouncyCastleGpgKeyLocator(java.lang.String signingKey,
BouncyCastleGpgKeyPassphrasePrompt passphrasePrompt)
Create a new key locator for the specified signing key.
|
Modifier and Type | Method and Description |
---|---|
private org.bouncycastle.openpgp.PGPSecretKey |
attemptParseSecretKey(java.nio.file.Path keyFile,
org.bouncycastle.openpgp.operator.PGPDigestCalculatorProvider calculatorProvider,
org.bouncycastle.openpgp.operator.PBEProtectionRemoverFactory passphraseProvider,
org.bouncycastle.openpgp.PGPPublicKey publicKey) |
(package private) static boolean |
containsSigningKey(java.lang.String userId,
java.lang.String signingKeySpec)
Checks whether a given OpenPGP
userId matches a given
signingKeySpec , which is supposed to have one of the formats
defined by GPG. |
private static java.nio.file.Path |
findGpgDirectory() |
private org.bouncycastle.openpgp.PGPPublicKey |
findPublicKeyByKeyId(org.bouncycastle.gpg.keybox.KeyBlob keyBlob) |
private org.bouncycastle.openpgp.PGPPublicKey |
findPublicKeyByUserId(org.bouncycastle.gpg.keybox.KeyBlob keyBlob) |
private org.bouncycastle.openpgp.PGPPublicKey |
findPublicKeyInKeyBox(java.nio.file.Path keyboxFile)
Finds a public key associated with the signing key.
|
private org.bouncycastle.openpgp.PGPPublicKey |
findPublicKeyInPubring(java.nio.file.Path pubringFile)
Return the first public key matching the key id (
signingKey . |
BouncyCastleGpgKey |
findSecretKey()
If there is a private key directory containing keys, use pubring.kbx or
pubring.gpg to find the public key; then try to find the secret key in
the directory.
|
private BouncyCastleGpgKey |
findSecretKeyForKeyBoxPublicKey(org.bouncycastle.openpgp.PGPPublicKey publicKey,
java.nio.file.Path userKeyboxPath) |
private org.bouncycastle.openpgp.PGPSecretKey |
findSecretKeyInLegacySecring(java.lang.String signingkey,
java.nio.file.Path secringFile)
Return the first suitable key for signing in the key ring collection.
|
private org.bouncycastle.openpgp.PGPPublicKey |
getPublicKey(org.bouncycastle.gpg.keybox.KeyBlob blob,
byte[] fingerprint) |
private org.bouncycastle.openpgp.PGPPublicKey |
getSigningPublicKey(org.bouncycastle.gpg.keybox.KeyBlob blob) |
private boolean |
hasKeyFiles(java.nio.file.Path dir) |
private boolean |
isSigningKey(org.bouncycastle.openpgp.PGPPublicKey key) |
private BouncyCastleGpgKey |
loadKeyFromSecring(java.nio.file.Path secring) |
private org.bouncycastle.gpg.keybox.KeyBox |
readKeyBoxFile(java.nio.file.Path keyboxFile) |
private java.lang.String |
toFingerprint(java.lang.String keyId) |
private static final org.slf4j.Logger log
private static final java.nio.file.Path GPG_DIRECTORY
private static final java.nio.file.Path USER_KEYBOX_PATH
private static final java.nio.file.Path USER_SECRET_KEY_DIR
private static final java.nio.file.Path USER_PGP_PUBRING_FILE
private static final java.nio.file.Path USER_PGP_LEGACY_SECRING_FILE
private final java.lang.String signingKey
private BouncyCastleGpgKeyPassphrasePrompt passphrasePrompt
public BouncyCastleGpgKeyLocator(java.lang.String signingKey, @NonNull BouncyCastleGpgKeyPassphrasePrompt passphrasePrompt)
The signing key must either be a hex representation of a specific key or a user identity substring (eg., email address). All keys in the KeyBox will be looked up in the order as returned by the KeyBox. A key id will be searched before attempting to find a key by user id.
signingKey
- the signing key to search forpassphrasePrompt
- the provider to use when asking for key passphraseprivate static java.nio.file.Path findGpgDirectory()
private org.bouncycastle.openpgp.PGPSecretKey attemptParseSecretKey(java.nio.file.Path keyFile, org.bouncycastle.openpgp.operator.PGPDigestCalculatorProvider calculatorProvider, org.bouncycastle.openpgp.operator.PBEProtectionRemoverFactory passphraseProvider, org.bouncycastle.openpgp.PGPPublicKey publicKey)
static boolean containsSigningKey(java.lang.String userId, java.lang.String signingKeySpec)
userId
matches a given
signingKeySpec
, which is supposed to have one of the formats
defined by GPG.
Not all formats are supported; only formats starting with '=', '<', '@', and '*' are handled. Any other format results in a case-insensitive substring match.
userId
- of a keysigningKeySpec
- GPG key identificationuserId
matchesprivate java.lang.String toFingerprint(java.lang.String keyId)
private org.bouncycastle.openpgp.PGPPublicKey findPublicKeyByKeyId(org.bouncycastle.gpg.keybox.KeyBlob keyBlob) throws java.io.IOException
java.io.IOException
private org.bouncycastle.openpgp.PGPPublicKey findPublicKeyByUserId(org.bouncycastle.gpg.keybox.KeyBlob keyBlob) throws java.io.IOException
java.io.IOException
private org.bouncycastle.openpgp.PGPPublicKey findPublicKeyInKeyBox(java.nio.file.Path keyboxFile) throws java.io.IOException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, BouncyCastleGpgKeyLocator.NoOpenPgpKeyException
keyboxFile
- the KeyBox filenull
)java.io.IOException
- in case of problems reading the filejava.security.NoSuchAlgorithmException
java.security.NoSuchProviderException
BouncyCastleGpgKeyLocator.NoOpenPgpKeyException
- if the file does not contain any OpenPGP key@NonNull public BouncyCastleGpgKey findSecretKey() throws java.io.IOException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, org.bouncycastle.openpgp.PGPException, CanceledException, UnsupportedCredentialItem, java.net.URISyntaxException
If there is no private key directory (or it doesn't contain any keys), try to find the key in secring.gpg directly.
java.io.IOException
- in case of issues reading key filesjava.security.NoSuchAlgorithmException
java.security.NoSuchProviderException
org.bouncycastle.openpgp.PGPException
- in case of issues finding a key, including no key foundCanceledException
java.net.URISyntaxException
UnsupportedCredentialItem
private boolean hasKeyFiles(java.nio.file.Path dir)
private BouncyCastleGpgKey loadKeyFromSecring(java.nio.file.Path secring) throws java.io.IOException, org.bouncycastle.openpgp.PGPException
java.io.IOException
org.bouncycastle.openpgp.PGPException
private BouncyCastleGpgKey findSecretKeyForKeyBoxPublicKey(org.bouncycastle.openpgp.PGPPublicKey publicKey, java.nio.file.Path userKeyboxPath) throws org.bouncycastle.openpgp.PGPException, CanceledException, UnsupportedCredentialItem, java.net.URISyntaxException
org.bouncycastle.openpgp.PGPException
CanceledException
UnsupportedCredentialItem
java.net.URISyntaxException
private org.bouncycastle.openpgp.PGPSecretKey findSecretKeyInLegacySecring(java.lang.String signingkey, java.nio.file.Path secringFile) throws java.io.IOException, org.bouncycastle.openpgp.PGPException
signingkey
- secringFile
- java.io.IOException
- on I/O related errorsorg.bouncycastle.openpgp.PGPException
- on BouncyCastle errorsprivate org.bouncycastle.openpgp.PGPPublicKey findPublicKeyInPubring(java.nio.file.Path pubringFile) throws java.io.IOException, org.bouncycastle.openpgp.PGPException
signingKey
.pubringFile
- null
if none foundjava.io.IOException
- on I/O related errorsorg.bouncycastle.openpgp.PGPException
- on BouncyCastle errorsprivate org.bouncycastle.openpgp.PGPPublicKey getPublicKey(org.bouncycastle.gpg.keybox.KeyBlob blob, byte[] fingerprint) throws java.io.IOException
java.io.IOException
private org.bouncycastle.openpgp.PGPPublicKey getSigningPublicKey(org.bouncycastle.gpg.keybox.KeyBlob blob) throws java.io.IOException
java.io.IOException
private boolean isSigningKey(org.bouncycastle.openpgp.PGPPublicKey key)
private org.bouncycastle.gpg.keybox.KeyBox readKeyBoxFile(java.nio.file.Path keyboxFile) throws java.io.IOException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, BouncyCastleGpgKeyLocator.NoOpenPgpKeyException
java.io.IOException
java.security.NoSuchAlgorithmException
java.security.NoSuchProviderException
BouncyCastleGpgKeyLocator.NoOpenPgpKeyException