Class SecretKeys
- java.lang.Object
-
- org.eclipse.jgit.gpg.bc.internal.keys.SecretKeys
-
public final class SecretKeys extends java.lang.ObjectUtilities for reading GPG secret keys from a gpg-agent key file.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceSecretKeys.PassphraseSupplierSomething that can supply a passphrase to decrypt an encrypted secret key.
-
Field Summary
Fields Modifier and Type Field Description private static byte[]OCB_PROTECTEDprivate static byte[]PROTECTED_KEY
-
Constructor Summary
Constructors Modifier Constructor Description privateSecretKeys()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static byte[]convertSexpression(byte[] humanForm)Converts a human-readable serialized s-expression into a binary serialized s-expression.private static byte[]convertSexpression(byte[] humanForm, boolean[] isOCB)Converts a human-readable serialized s-expression into a binary serialized s-expression.private static byte[]dequote(byte[] in, int from, int to)GPG-style string de-quoting, which is basically C-style, with some literal CR/LF escaping.private static byte[]getAad(byte[] sExp)Extract the AAD for the OCB decryption from an s-expression.private static booleanisGpgSpace(int ch)private static booleanisHex(int ch)private static booleanisOctal(int ch)private static booleanisTokenChar(int ch)(package private) static byte[]keyFromNameValueFormat(java.io.InputStream in)Extracts the key from a GPG name-value-pair key file.private static booleanmatches(byte[] src, int from, byte[] needle)Checks whether theneedlematchessrcat offsetfrom.private static intnibble(int ch)static org.bouncycastle.openpgp.PGPSecretKeyreadSecretKey(java.io.InputStream in, org.bouncycastle.openpgp.operator.PGPDigestCalculatorProvider calculatorProvider, SecretKeys.PassphraseSupplier passphraseSupplier, org.bouncycastle.openpgp.PGPPublicKey publicKey)Reads a GPG secret key from the given stream.private static intskip(byte[] sExp, int start)Skips a list including nested lists.
-
-
-
Method Detail
-
readSecretKey
public static org.bouncycastle.openpgp.PGPSecretKey readSecretKey(java.io.InputStream in, org.bouncycastle.openpgp.operator.PGPDigestCalculatorProvider calculatorProvider, SecretKeys.PassphraseSupplier passphraseSupplier, org.bouncycastle.openpgp.PGPPublicKey publicKey) throws java.io.IOException, org.bouncycastle.openpgp.PGPException, CanceledException, UnsupportedCredentialItem, java.net.URISyntaxExceptionReads a GPG secret key from the given stream.- Parameters:
in-InputStreamto read from, doesn't need to be bufferedcalculatorProvider- for checking digestspassphraseSupplier- for decrypting encrypted keyspublicKey- the secret key should be for- Returns:
- the secret key
- Throws:
java.io.IOException- if the stream cannot be parsedorg.bouncycastle.openpgp.PGPException- if thrown by the underlying S-Expression parser, for instance when the passphrase is wrongCanceledException- if thrown by thepassphraseSupplierUnsupportedCredentialItem- if thrown by thepassphraseSupplierjava.net.URISyntaxException- if thrown by thepassphraseSupplier
-
getAad
private static byte[] getAad(byte[] sExp)
Extract the AAD for the OCB decryption from an s-expression.- Parameters:
sExp- buffer containing a valid binary s-expression- Returns:
- the AAD
-
skip
private static int skip(byte[] sExp, int start)Skips a list including nested lists.- Parameters:
sExp- buffer containing valid binary s-expression datastart- index of the opening '(' of the list to skip- Returns:
- the index after the closing ')' of the skipped list
-
matches
private static boolean matches(byte[] src, int from, byte[] needle)Checks whether theneedlematchessrcat offsetfrom.- Parameters:
src- to match againstneedlefrom- position insrcto start matchingneedle- to match against- Returns:
trueifsrccontainsneedleat positionfrom,falseotherwise
-
convertSexpression
private static byte[] convertSexpression(byte[] humanForm) throws java.io.IOExceptionConverts a human-readable serialized s-expression into a binary serialized s-expression.- Parameters:
humanForm- to convert- Returns:
- the converted s-expression
- Throws:
java.io.IOException- if the conversion fails
-
convertSexpression
private static byte[] convertSexpression(byte[] humanForm, boolean[] isOCB) throws java.io.IOExceptionConverts a human-readable serialized s-expression into a binary serialized s-expression.- Parameters:
humanForm- to convertisOCB- returns whether the s-expression specified AES/OCB encryption- Returns:
- the converted s-expression
- Throws:
java.io.IOException- if the conversion fails
-
dequote
private static byte[] dequote(byte[] in, int from, int to) throws java.io.StreamCorruptedExceptionGPG-style string de-quoting, which is basically C-style, with some literal CR/LF escaping.- Parameters:
in- buffer containing the quoted stringfrom- index after the opening quote ininto- index of the closing quote inin- Returns:
- the dequoted raw string value
- Throws:
java.io.StreamCorruptedException
-
keyFromNameValueFormat
static byte[] keyFromNameValueFormat(java.io.InputStream in) throws java.io.IOExceptionExtracts the key from a GPG name-value-pair key file.Package-visible for tests only.
- Parameters:
in-InputStreamto read from; should be buffered- Returns:
- the raw key data as extracted from the file
- Throws:
java.io.IOException- if theinstream cannot be read or does not contain a key
-
isGpgSpace
private static boolean isGpgSpace(int ch)
-
isTokenChar
private static boolean isTokenChar(int ch)
-
isHex
private static boolean isHex(int ch)
-
isOctal
private static boolean isOctal(int ch)
-
nibble
private static int nibble(int ch)
-
-