Package org.pgpainless.util
Class ArmorUtils
- java.lang.Object
-
- org.pgpainless.util.ArmorUtils
-
public final class ArmorUtils extends java.lang.Object
Utility class for dealing with ASCII armored OpenPGP data.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
HEADER_CHARSET
Constant armor key for message character sets.static java.lang.String
HEADER_COMMENT
Constant armor key for comments.static java.lang.String
HEADER_HASH
Constant armor key for used hash algorithms in clearsigned messages.static java.lang.String
HEADER_MESSAGEID
Constant armor key for message IDs.static java.lang.String
HEADER_VERSION
Constant armor key for program versions.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static void
addCommentHeader(org.bouncycastle.bcpg.ArmoredOutputStream armor, java.lang.String comment)
Add an ASCII armor comment header entry into theArmoredOutputStream
.static void
addHashAlgorithmHeader(org.bouncycastle.bcpg.ArmoredOutputStream armor, HashAlgorithm hashAlgorithm)
Add an ASCII armor header entry about the used hash algorithm into theArmoredOutputStream
.static void
addMessageIdHeader(org.bouncycastle.bcpg.ArmoredOutputStream armor, java.lang.String messageId)
Add an ASCII armor message-id header entry into theArmoredOutputStream
.static java.util.List<java.lang.String>
getArmorHeaderValues(org.bouncycastle.bcpg.ArmoredInputStream armor, java.lang.String headerKey)
Return all ASCII armor header values of the given headerKey from the givenArmoredInputStream
.static java.util.List<java.lang.String>
getCharsetHeaderValues(org.bouncycastle.bcpg.ArmoredInputStream armor)
Return all ASCII armor header values of type charset from the givenArmoredInputStream
.static java.util.List<java.lang.String>
getCommentHeaderValues(org.bouncycastle.bcpg.ArmoredInputStream armor)
Extract all ASCII armor header values of type comment from the givenArmoredInputStream
.static java.io.InputStream
getDecoderStream(java.io.InputStream inputStream)
Hacky workaround for #96.static java.util.List<HashAlgorithm>
getHashAlgorithms(org.bouncycastle.bcpg.ArmoredInputStream armor)
Return a list ofHashAlgorithm
enums extracted from the hash header entries of the givenArmoredInputStream
.static java.util.List<java.lang.String>
getHashHeaderValues(org.bouncycastle.bcpg.ArmoredInputStream armor)
Return all ASCII armor header values of type hash-algorithm from the givenArmoredInputStream
.static java.util.List<java.lang.String>
getMessageIdHeaderValues(org.bouncycastle.bcpg.ArmoredInputStream armor)
Extract all ASCII armor header values of type message id from the givenArmoredInputStream
.static java.util.List<java.lang.String>
getVersionHeaderValues(org.bouncycastle.bcpg.ArmoredInputStream armor)
Return all ASCII armor header values of type version from the givenArmoredInputStream
.static void
setVersionHeader(org.bouncycastle.bcpg.ArmoredOutputStream armor, java.lang.String version)
Set the version header entry in the ASCII armor.static org.bouncycastle.bcpg.ArmoredOutputStream
toAsciiArmoredStream(java.io.OutputStream outputStream, MultiMap<java.lang.String,java.lang.String> header)
Create anArmoredOutputStream
wrapping the givenOutputStream
.static org.bouncycastle.bcpg.ArmoredOutputStream
toAsciiArmoredStream(org.bouncycastle.openpgp.PGPKeyRing keyRing, java.io.OutputStream outputStream)
Return anArmoredOutputStream
prepared with headers for the given key ring, which wraps the givenOutputStream
.static java.lang.String
toAsciiArmoredString(byte[] bytes)
Return the ASCII armored encoding of the given OpenPGP data bytes.static java.lang.String
toAsciiArmoredString(byte[] bytes, MultiMap<java.lang.String,java.lang.String> additionalHeaderValues)
Return the ASCII armored encoding of the given OpenPGP data bytes.static java.lang.String
toAsciiArmoredString(java.io.InputStream inputStream)
Return the ASCII armored encoding of theInputStream
containing OpenPGP data.static java.lang.String
toAsciiArmoredString(java.io.InputStream inputStream, MultiMap<java.lang.String,java.lang.String> additionalHeaderValues)
Return the ASCII armored encoding of the OpenPGP data from the givenInputStream
.static java.lang.String
toAsciiArmoredString(org.bouncycastle.openpgp.PGPPublicKey publicKey)
Return the ASCII armored encoding of the givenPGPPublicKey
.static java.lang.String
toAsciiArmoredString(org.bouncycastle.openpgp.PGPPublicKeyRing publicKeys)
Return the ASCII armored encoding of the givenPGPPublicKeyRing
.static java.lang.String
toAsciiArmoredString(org.bouncycastle.openpgp.PGPPublicKeyRingCollection publicKeyRings)
Return the ASCII armored encoding of the givenPGPPublicKeyRingCollection
.static java.lang.String
toAsciiArmoredString(org.bouncycastle.openpgp.PGPSecretKey secretKey)
Return the ASCII armored encoding of the givenPGPSecretKey
.static java.lang.String
toAsciiArmoredString(org.bouncycastle.openpgp.PGPSecretKeyRing secretKeys)
Return the ASCII armored encoding of the givenPGPSecretKeyRing
.static java.lang.String
toAsciiArmoredString(org.bouncycastle.openpgp.PGPSecretKeyRingCollection secretKeyRings)
Return the ASCII armored encoding of the givenPGPSecretKeyRingCollection
.static java.lang.String
toAsciiArmoredString(org.bouncycastle.openpgp.PGPSignature signature)
Return the ASCII armored representation of the given detached signature.static java.lang.String
toAsciiArmoredString(org.bouncycastle.openpgp.PGPSignature signature, boolean export)
Return the ASCII armored representation of the given detached signature.
-
-
-
Field Detail
-
HEADER_COMMENT
public static final java.lang.String HEADER_COMMENT
Constant armor key for comments.- See Also:
- Constant Field Values
-
HEADER_VERSION
public static final java.lang.String HEADER_VERSION
Constant armor key for program versions.- See Also:
- Constant Field Values
-
HEADER_MESSAGEID
public static final java.lang.String HEADER_MESSAGEID
Constant armor key for message IDs. Useful for split messages.- See Also:
- Constant Field Values
-
HEADER_HASH
public static final java.lang.String HEADER_HASH
Constant armor key for used hash algorithms in clearsigned messages.- See Also:
- Constant Field Values
-
HEADER_CHARSET
public static final java.lang.String HEADER_CHARSET
Constant armor key for message character sets.- See Also:
- Constant Field Values
-
-
Method Detail
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull org.bouncycastle.openpgp.PGPSecretKey secretKey) throws java.io.IOException
Return the ASCII armored encoding of the givenPGPSecretKey
.- Parameters:
secretKey
- secret key- Returns:
- ASCII armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull org.bouncycastle.openpgp.PGPPublicKey publicKey) throws java.io.IOException
Return the ASCII armored encoding of the givenPGPPublicKey
.- Parameters:
publicKey
- public key- Returns:
- ASCII armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull org.bouncycastle.openpgp.PGPSecretKeyRing secretKeys) throws java.io.IOException
Return the ASCII armored encoding of the givenPGPSecretKeyRing
.- Parameters:
secretKeys
- secret key ring- Returns:
- ASCII armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull org.bouncycastle.openpgp.PGPPublicKeyRing publicKeys) throws java.io.IOException
Return the ASCII armored encoding of the givenPGPPublicKeyRing
.- Parameters:
publicKeys
- public key ring- Returns:
- ASCII armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull org.bouncycastle.openpgp.PGPSecretKeyRingCollection secretKeyRings) throws java.io.IOException
Return the ASCII armored encoding of the givenPGPSecretKeyRingCollection
. The encoding will use per-key ASCII armors protecting eachPGPSecretKeyRing
individually. Those armors are then concatenated with newlines in between.- Parameters:
secretKeyRings
- secret key ring collection- Returns:
- ASCII armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull org.bouncycastle.openpgp.PGPPublicKeyRingCollection publicKeyRings) throws java.io.IOException
Return the ASCII armored encoding of the givenPGPPublicKeyRingCollection
. The encoding will use per-key ASCII armors protecting eachPGPPublicKeyRing
individually. Those armors are then concatenated with newlines in between.- Parameters:
publicKeyRings
- public key ring collection- Returns:
- ascii armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull org.bouncycastle.openpgp.PGPSignature signature) throws java.io.IOException
Return the ASCII armored representation of the given detached signature. The signature will not be stripped of non-exportable subpackets or trust-packets. If you need to strip those (e.g. because the signature is intended to be sent to a third party), usetoAsciiArmoredString(PGPSignature, boolean)
and providetrue
as boolean value.- Parameters:
signature
- signature- Returns:
- ascii armored string
- Throws:
java.io.IOException
- in case of an error in theArmoredOutputStream
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull org.bouncycastle.openpgp.PGPSignature signature, boolean export) throws java.io.IOException
Return the ASCII armored representation of the given detached signature. Ifexport
is true, the signature will be stripped of non-exportable subpackets or trust-packets. If it isfalse
, the signature will be encoded as-is.- Parameters:
signature
- signatureexport
- whether to exclude non-exportable subpackets or trust-packets.- Returns:
- ascii armored string
- Throws:
java.io.IOException
- in case of an error in theArmoredOutputStream
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull byte[] bytes) throws java.io.IOException
Return the ASCII armored encoding of the given OpenPGP data bytes.- Parameters:
bytes
- openpgp data- Returns:
- ASCII armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull byte[] bytes, @Nullable MultiMap<java.lang.String,java.lang.String> additionalHeaderValues) throws java.io.IOException
Return the ASCII armored encoding of the given OpenPGP data bytes. The ASCII armor will include headers from the header map.- Parameters:
bytes
- OpenPGP dataadditionalHeaderValues
- header map- Returns:
- ASCII armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull java.io.InputStream inputStream) throws java.io.IOException
Return the ASCII armored encoding of theInputStream
containing OpenPGP data.- Parameters:
inputStream
- input stream of OpenPGP data- Returns:
- ASCII armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredString
@Nonnull public static java.lang.String toAsciiArmoredString(@Nonnull java.io.InputStream inputStream, @Nullable MultiMap<java.lang.String,java.lang.String> additionalHeaderValues) throws java.io.IOException
Return the ASCII armored encoding of the OpenPGP data from the givenInputStream
. The ASCII armor will include armor headers from the given header map.- Parameters:
inputStream
- input stream of OpenPGP dataadditionalHeaderValues
- ASCII armor header map- Returns:
- ASCII armored encoding
- Throws:
java.io.IOException
- in case of an io error
-
toAsciiArmoredStream
@Nonnull public static org.bouncycastle.bcpg.ArmoredOutputStream toAsciiArmoredStream(@Nonnull org.bouncycastle.openpgp.PGPKeyRing keyRing, @Nonnull java.io.OutputStream outputStream)
Return anArmoredOutputStream
prepared with headers for the given key ring, which wraps the givenOutputStream
. The armored output stream can be used to encode the key ring by callingPGPKeyRing.encode(OutputStream)
with the armored output stream as an argument.- Parameters:
keyRing
- key ringoutputStream
- wrapped output stream- Returns:
- armored output stream
-
toAsciiArmoredStream
@Nonnull public static org.bouncycastle.bcpg.ArmoredOutputStream toAsciiArmoredStream(@Nonnull java.io.OutputStream outputStream, @Nullable MultiMap<java.lang.String,java.lang.String> header)
Create anArmoredOutputStream
wrapping the givenOutputStream
. The armored output stream will be prepared with armor headers given by header. Note: Since the armored output stream is retrieved fromArmoredOutputStreamFactory.get(OutputStream)
, it may already come with custom headers. Hence, the header entries given by header are appended below those already populated headers.- Parameters:
outputStream
- output stream to wrapheader
- map of header entries- Returns:
- armored output stream
-
setVersionHeader
public static void setVersionHeader(@Nonnull org.bouncycastle.bcpg.ArmoredOutputStream armor, @Nullable java.lang.String version)
Set the version header entry in the ASCII armor. If the version info is null or only contains whitespace characters, then the version header will be removed.- Parameters:
armor
- armored output streamversion
- version header.
-
addHashAlgorithmHeader
public static void addHashAlgorithmHeader(@Nonnull org.bouncycastle.bcpg.ArmoredOutputStream armor, @Nonnull HashAlgorithm hashAlgorithm)
Add an ASCII armor header entry about the used hash algorithm into theArmoredOutputStream
.- Parameters:
armor
- armored output streamhashAlgorithm
- hash algorithm- See Also:
- RFC 4880 - OpenPGP Message Format §6.2. Forming ASCII Armor
-
addCommentHeader
public static void addCommentHeader(@Nonnull org.bouncycastle.bcpg.ArmoredOutputStream armor, @Nonnull java.lang.String comment)
Add an ASCII armor comment header entry into theArmoredOutputStream
.- Parameters:
armor
- armored output streamcomment
- free-text comment- See Also:
- RFC 4880 - OpenPGP Message Format §6.2. Forming ASCII Armor
-
addMessageIdHeader
public static void addMessageIdHeader(@Nonnull org.bouncycastle.bcpg.ArmoredOutputStream armor, @Nonnull java.lang.String messageId)
Add an ASCII armor message-id header entry into theArmoredOutputStream
.- Parameters:
armor
- armored output streammessageId
- message id- See Also:
- RFC 4880 - OpenPGP Message Format §6.2. Forming ASCII Armor
-
getCommentHeaderValues
@Nonnull public static java.util.List<java.lang.String> getCommentHeaderValues(@Nonnull org.bouncycastle.bcpg.ArmoredInputStream armor)
Extract all ASCII armor header values of type comment from the givenArmoredInputStream
.- Parameters:
armor
- armored input stream- Returns:
- list of comment headers
-
getMessageIdHeaderValues
@Nonnull public static java.util.List<java.lang.String> getMessageIdHeaderValues(@Nonnull org.bouncycastle.bcpg.ArmoredInputStream armor)
Extract all ASCII armor header values of type message id from the givenArmoredInputStream
.- Parameters:
armor
- armored input stream- Returns:
- list of message-id headers
-
getHashHeaderValues
@Nonnull public static java.util.List<java.lang.String> getHashHeaderValues(@Nonnull org.bouncycastle.bcpg.ArmoredInputStream armor)
Return all ASCII armor header values of type hash-algorithm from the givenArmoredInputStream
.- Parameters:
armor
- armored input stream- Returns:
- list of hash headers
-
getHashAlgorithms
@Nonnull public static java.util.List<HashAlgorithm> getHashAlgorithms(@Nonnull org.bouncycastle.bcpg.ArmoredInputStream armor)
Return a list ofHashAlgorithm
enums extracted from the hash header entries of the givenArmoredInputStream
.- Parameters:
armor
- armored input stream- Returns:
- list of hash algorithms from the ASCII header
-
getVersionHeaderValues
@Nonnull public static java.util.List<java.lang.String> getVersionHeaderValues(@Nonnull org.bouncycastle.bcpg.ArmoredInputStream armor)
Return all ASCII armor header values of type version from the givenArmoredInputStream
.- Parameters:
armor
- armored input stream- Returns:
- list of version headers
-
getCharsetHeaderValues
@Nonnull public static java.util.List<java.lang.String> getCharsetHeaderValues(@Nonnull org.bouncycastle.bcpg.ArmoredInputStream armor)
Return all ASCII armor header values of type charset from the givenArmoredInputStream
.- Parameters:
armor
- armored input stream- Returns:
- list of charset headers
-
getArmorHeaderValues
@Nonnull public static java.util.List<java.lang.String> getArmorHeaderValues(@Nonnull org.bouncycastle.bcpg.ArmoredInputStream armor, @Nonnull java.lang.String headerKey)
Return all ASCII armor header values of the given headerKey from the givenArmoredInputStream
.- Parameters:
armor
- armored input streamheaderKey
- ASCII armor header key- Returns:
- list of values for the header key
-
getDecoderStream
@Nonnull public static java.io.InputStream getDecoderStream(@Nonnull java.io.InputStream inputStream) throws java.io.IOException
Hacky workaround for #96. ForPGPPublicKeyRingCollection(InputStream, KeyFingerPrintCalculator)
orPGPSecretKeyRingCollection(InputStream, KeyFingerPrintCalculator)
to read all PGPKeyRings properly, we apparently have to make sure that theInputStream
that is given as constructor argument is a PGPUtil.BufferedInputStreamExt. SincePGPUtil.getDecoderStream(InputStream)
will return anArmoredInputStream
if the underlying input stream contains armored data, we first dearmor the data ourselves to make sure that the end-result is a PGPUtil.BufferedInputStreamExt.- Parameters:
inputStream
- input stream- Returns:
- BufferedInputStreamExt
- Throws:
java.io.IOException
- in case of an IO error
-
-