From 4071ce8550c7b51299313526fc6cd46bbabc1e93 Mon Sep 17 00:00:00 2001 From: Ashley Hughes Date: Mon, 27 Jan 2014 23:31:19 +0000 Subject: [PATCH] re-enable getEmbeddedSignatures --- .../keychain/pgp/PgpOperation.java | 18 ++++++------- .../spongycastle/bcpg/SignaturePacket.java | 2 +- .../openpgp/PGPSignatureSubpacketVector.java | 26 +++++++++++++++++++ 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpOperation.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpOperation.java index f3f327e85..1402be435 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpOperation.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpOperation.java @@ -973,16 +973,16 @@ public class PgpOperation { boolean primkeyBinding_isok = false; JcaPGPContentVerifierBuilderProvider contentVerifierBuilderProvider = new JcaPGPContentVerifierBuilderProvider() .setProvider(Constants.BOUNCY_CASTLE_PROVIDER_NAME); - PGPSignatureList eSigList = null; + PGPSignatureList eSigList; - if (Pkts.hasSubpacket(SignatureSubpacketTags.EMBEDDED_SIGNATURE)) { -// try { -// eSigList = Pkts.getEmbeddedSignatures(); -// } catch (IOException e) { -// return false; -// } catch (PGPException e) { -// return false; -// } + if (Pkts.hasSubpacket(SignatureSubpacketTags.EMBEDDED_SIGNATURE)) { + try { + eSigList = Pkts.getEmbeddedSignatures(); + } catch (IOException e) { + return false; + } catch (PGPException e) { + return false; + } for (int j = 0; j < eSigList.size(); ++j) { PGPSignature emSig = eSigList.get(j); if (emSig.getSignatureType() == PGPSignature.PRIMARYKEY_BINDING) { diff --git a/libraries/spongycastle/pg/src/main/java/org/spongycastle/bcpg/SignaturePacket.java b/libraries/spongycastle/pg/src/main/java/org/spongycastle/bcpg/SignaturePacket.java index 38c06ccb5..8428abfc9 100644 --- a/libraries/spongycastle/pg/src/main/java/org/spongycastle/bcpg/SignaturePacket.java +++ b/libraries/spongycastle/pg/src/main/java/org/spongycastle/bcpg/SignaturePacket.java @@ -27,7 +27,7 @@ public class SignaturePacket private SignatureSubpacket[] unhashedData; private byte[] signatureEncoding; - SignaturePacket( + public SignaturePacket( BCPGInputStream in) throws IOException { diff --git a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSignatureSubpacketVector.java b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSignatureSubpacketVector.java index 738828997..9cb6dc51f 100644 --- a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSignatureSubpacketVector.java +++ b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSignatureSubpacketVector.java @@ -1,9 +1,13 @@ package org.spongycastle.openpgp; +import java.io.ByteArrayInputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; +import org.spongycastle.bcpg.BCPGInputStream; +import org.spongycastle.bcpg.SignaturePacket; import org.spongycastle.bcpg.SignatureSubpacket; import org.spongycastle.bcpg.SignatureSubpacketTags; import org.spongycastle.bcpg.sig.Features; @@ -16,6 +20,7 @@ import org.spongycastle.bcpg.sig.PrimaryUserID; import org.spongycastle.bcpg.sig.SignatureCreationTime; import org.spongycastle.bcpg.sig.SignatureExpirationTime; import org.spongycastle.bcpg.sig.SignerUserID; +import org.spongycastle.openpgp.PGPException; /** * Container for a list of signature subpackets. @@ -89,6 +94,27 @@ public class PGPSignatureSubpacketVector return vals; } + public PGPSignatureList getEmbeddedSignatures() throws IOException, PGPException + { + SignatureSubpacket[] sigs = getSubpackets(SignatureSubpacketTags.EMBEDDED_SIGNATURE); + ArrayList l = new ArrayList(); + for (int i = 0; i < sigs.length; i++) { + byte[] data = sigs[i].getData(); + PGPSignature tmpSig = null; + BCPGInputStream in = new BCPGInputStream(new ByteArrayInputStream(data)); + try { + tmpSig = new PGPSignature(new SignaturePacket(in)); + } catch (IOException e) { + tmpSig = null; + } catch (PGPException e) { + tmpSig = null; + } + if (tmpSig != null) + l.add(tmpSig); + } + return new PGPSignatureList((PGPSignature[])l.toArray(new PGPSignature[l.size()])); + } + public long getIssuerKeyID() { SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.ISSUER_KEY_ID);