aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPKeyRing.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPKeyRing.java')
-rw-r--r--libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPKeyRing.java125
1 files changed, 125 insertions, 0 deletions
diff --git a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPKeyRing.java b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPKeyRing.java
new file mode 100644
index 000000000..50afce961
--- /dev/null
+++ b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPKeyRing.java
@@ -0,0 +1,125 @@
+package org.spongycastle.openpgp;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.spongycastle.bcpg.BCPGInputStream;
+import org.spongycastle.bcpg.Packet;
+import org.spongycastle.bcpg.PacketTags;
+import org.spongycastle.bcpg.SignaturePacket;
+import org.spongycastle.bcpg.TrustPacket;
+import org.spongycastle.bcpg.UserAttributePacket;
+import org.spongycastle.bcpg.UserIDPacket;
+
+public abstract class PGPKeyRing
+{
+ PGPKeyRing()
+ {
+ }
+
+ static BCPGInputStream wrap(InputStream in)
+ {
+ if (in instanceof BCPGInputStream)
+ {
+ return (BCPGInputStream)in;
+ }
+
+ return new BCPGInputStream(in);
+ }
+
+ static TrustPacket readOptionalTrustPacket(
+ BCPGInputStream pIn)
+ throws IOException
+ {
+ return (pIn.nextPacketTag() == PacketTags.TRUST)
+ ? (TrustPacket) pIn.readPacket()
+ : null;
+ }
+
+ static List readSignaturesAndTrust(
+ BCPGInputStream pIn)
+ throws IOException
+ {
+ try
+ {
+ List sigList = new ArrayList();
+
+ while (pIn.nextPacketTag() == PacketTags.SIGNATURE)
+ {
+ SignaturePacket signaturePacket = (SignaturePacket)pIn.readPacket();
+ TrustPacket trustPacket = readOptionalTrustPacket(pIn);
+
+ sigList.add(new PGPSignature(signaturePacket, trustPacket));
+ }
+
+ return sigList;
+ }
+ catch (PGPException e)
+ {
+ throw new IOException("can't create signature object: " + e.getMessage()
+ + ", cause: " + e.getUnderlyingException().toString());
+ }
+ }
+
+ static void readUserIDs(
+ BCPGInputStream pIn,
+ List ids,
+ List idTrusts,
+ List idSigs)
+ throws IOException
+ {
+ while (pIn.nextPacketTag() == PacketTags.USER_ID
+ || pIn.nextPacketTag() == PacketTags.USER_ATTRIBUTE)
+ {
+ Packet obj = pIn.readPacket();
+ if (obj instanceof UserIDPacket)
+ {
+ UserIDPacket id = (UserIDPacket)obj;
+ ids.add(id.getID());
+ }
+ else
+ {
+ UserAttributePacket user = (UserAttributePacket)obj;
+ ids.add(new PGPUserAttributeSubpacketVector(user.getSubpackets()));
+ }
+
+ idTrusts.add(readOptionalTrustPacket(pIn));
+ idSigs.add(readSignaturesAndTrust(pIn));
+ }
+ }
+
+ /**
+ * Return the first public key in the ring. In the case of a {@link PGPSecretKeyRing}
+ * this is also the public key of the master key pair.
+ *
+ * @return PGPPublicKey
+ */
+ public abstract PGPPublicKey getPublicKey();
+
+ /**
+ * Return an iterator containing all the public keys.
+ *
+ * @return Iterator
+ */
+ public abstract Iterator getPublicKeys();
+
+ /**
+ * Return the public key referred to by the passed in keyID if it
+ * is present.
+ *
+ * @param keyID
+ * @return PGPPublicKey
+ */
+ public abstract PGPPublicKey getPublicKey(long keyID);
+
+ public abstract void encode(OutputStream outStream)
+ throws IOException;
+
+ public abstract byte[] getEncoded()
+ throws IOException;
+
+} \ No newline at end of file