diff --git a/src/main/java/org/pgpainless/pgpainless/PGPainless.java b/src/main/java/org/pgpainless/pgpainless/PGPainless.java index 7d84dc22..ba85628f 100644 --- a/src/main/java/org/pgpainless/pgpainless/PGPainless.java +++ b/src/main/java/org/pgpainless/pgpainless/PGPainless.java @@ -15,17 +15,14 @@ */ package org.pgpainless.pgpainless; -import java.io.ByteArrayInputStream; import java.io.IOException; -import org.bouncycastle.bcpg.ArmoredInputStream; import org.bouncycastle.openpgp.PGPException; -import org.bouncycastle.openpgp.PGPPublicKeyRing; -import org.bouncycastle.openpgp.operator.bc.BcKeyFingerprintCalculator; import org.pgpainless.pgpainless.algorithm.CompressionAlgorithm; import org.pgpainless.pgpainless.algorithm.SymmetricKeyAlgorithm; import org.pgpainless.pgpainless.decryption_verification.DecryptionBuilder; import org.pgpainless.pgpainless.encryption_signing.EncryptionBuilder; +import org.pgpainless.pgpainless.key.KeyRingReader; import org.pgpainless.pgpainless.key.generation.KeyRingBuilder; import org.pgpainless.pgpainless.symmetric_encryption.SymmetricEncryptorDecryptor; @@ -43,8 +40,13 @@ public class PGPainless { return new DecryptionBuilder(); } - public static PGPPublicKeyRing publicKeyRingFromBytes(byte[] bytes) throws IOException { - return new PGPPublicKeyRing(new ArmoredInputStream(new ByteArrayInputStream(bytes)), new BcKeyFingerprintCalculator()); + /** + * Read some existing OpenPGP key ring. + * + * @return KeyRingReader which offers reading operations + */ + public static KeyRingReader readKeyRing() { + return new KeyRingReader(); } /** diff --git a/src/main/java/org/pgpainless/pgpainless/key/KeyRingReader.java b/src/main/java/org/pgpainless/pgpainless/key/KeyRingReader.java new file mode 100644 index 00000000..44847dc2 --- /dev/null +++ b/src/main/java/org/pgpainless/pgpainless/key/KeyRingReader.java @@ -0,0 +1,99 @@ +package org.pgpainless.pgpainless.key; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; + +import org.bouncycastle.openpgp.PGPException; +import org.bouncycastle.openpgp.PGPPublicKeyRing; +import org.bouncycastle.openpgp.PGPPublicKeyRingCollection; +import org.bouncycastle.openpgp.PGPSecretKeyRing; +import org.bouncycastle.openpgp.PGPSecretKeyRingCollection; +import org.bouncycastle.openpgp.PGPUtil; +import org.bouncycastle.openpgp.operator.bc.BcKeyFingerprintCalculator; + +public class KeyRingReader { + + public static final Charset UTF8 = Charset.forName("UTF-8"); + + public PGPPublicKeyRing publicKeyRing(InputStream inputStream) throws IOException { + return readPublicKeyRing(inputStream); + } + + public PGPPublicKeyRing publicKeyRing(byte[] bytes) throws IOException { + return publicKeyRing(new ByteArrayInputStream(bytes)); + } + + public PGPPublicKeyRing publicKeyRing(String asciiArmored) throws IOException { + return publicKeyRing(asciiArmored.getBytes(UTF8)); + } + + public PGPPublicKeyRingCollection publicKeyRingCollection(InputStream inputStream) + throws IOException, PGPException { + return readPublicKeyRingCollection(inputStream); + } + + public PGPPublicKeyRingCollection publicKeyRingCollection(byte[] bytes) throws IOException, PGPException { + return publicKeyRingCollection(new ByteArrayInputStream(bytes)); + } + + public PGPPublicKeyRingCollection publicKeyRingCollection(String asciiArmored) throws IOException, PGPException { + return publicKeyRingCollection(asciiArmored.getBytes(UTF8)); + } + + public PGPSecretKeyRing secretKeyRing(InputStream inputStream) throws IOException, PGPException { + return readSecretKeyRing(inputStream); + } + + public PGPSecretKeyRing secretKeyRing(byte[] bytes) throws IOException, PGPException { + return secretKeyRing(new ByteArrayInputStream(bytes)); + } + + public PGPSecretKeyRing secretKeyRing(String asciiArmored) throws IOException, PGPException { + return secretKeyRing(asciiArmored.getBytes(UTF8)); + } + + public PGPSecretKeyRingCollection secretKeyRingCollection(InputStream inputStream) + throws IOException, PGPException { + return readSecretKeyRingCollection(inputStream); + } + + public PGPSecretKeyRingCollection secretKeyRingCollection(byte[] bytes) throws IOException, PGPException { + return secretKeyRingCollection(new ByteArrayInputStream(bytes)); + } + + public PGPSecretKeyRingCollection secretKeyRingCollection(String asciiArmored) throws IOException, PGPException { + return secretKeyRingCollection(asciiArmored.getBytes(UTF8)); + } + + /* + STATIC METHODS + */ + + public static PGPPublicKeyRing readPublicKeyRing(InputStream inputStream) throws IOException { + return new PGPPublicKeyRing( + PGPUtil.getDecoderStream(inputStream), + new BcKeyFingerprintCalculator()); + } + + public static PGPPublicKeyRingCollection readPublicKeyRingCollection(InputStream inputStream) + throws IOException, PGPException { + return new PGPPublicKeyRingCollection( + PGPUtil.getDecoderStream(inputStream), + new BcKeyFingerprintCalculator()); + } + + public static PGPSecretKeyRing readSecretKeyRing(InputStream inputStream) throws IOException, PGPException { + return new PGPSecretKeyRing( + PGPUtil.getDecoderStream(inputStream), + new BcKeyFingerprintCalculator()); + } + + public static PGPSecretKeyRingCollection readSecretKeyRingCollection(InputStream inputStream) + throws IOException, PGPException { + return new PGPSecretKeyRingCollection( + PGPUtil.getDecoderStream(inputStream), + new BcKeyFingerprintCalculator()); + } +}