aboutsummaryrefslogtreecommitdiffstats
path: root/OpenPGP-Keychain/src/org
diff options
context:
space:
mode:
authorAshley Hughes <spirit.returned@gmail.com>2014-01-14 15:48:05 +0000
committerAshley Hughes <spirit.returned@gmail.com>2014-01-14 15:48:05 +0000
commitcd4a3dd2377d64f73da08711007e89c4733f9cef (patch)
tree24eefbdd9689f336b5346cc09c6c1e2b032d30e2 /OpenPGP-Keychain/src/org
parentbb0baa815e224004a72bee5ff1fad46c530df5d8 (diff)
downloadopen-keychain-cd4a3dd2377d64f73da08711007e89c4733f9cef.tar.gz
open-keychain-cd4a3dd2377d64f73da08711007e89c4733f9cef.tar.bz2
open-keychain-cd4a3dd2377d64f73da08711007e89c4733f9cef.zip
begin refactor
Diffstat (limited to 'OpenPGP-Keychain/src/org')
-rw-r--r--OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpOperation.java54
1 files changed, 40 insertions, 14 deletions
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpOperation.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpOperation.java
index 6f0821fdc..1525c9462 100644
--- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpOperation.java
+++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/pgp/PgpOperation.java
@@ -927,20 +927,12 @@ public class PgpOperation {
if (tmp_subkeyBinding_isok)
subkeyBinding_isok = true;
if (tmp_subkeyBinding_isok) {
- PGPSignatureSubpacketVector hPkts = sig.getHashedSubPackets();
- PGPSignatureSubpacketVector uhPkts = sig.getUnhashedSubPackets();
- if (uhPkts.hasSubpacket(SignatureSubpacketTags.EMBEDDED_SIGNATURE)) {
- PGPSignatureList eSigList = uhPkts.getEmbeddedSignatures();
- for (int j = 0; j < eSigList.size(); ++j) {
- PGPSignature emSig = eSigList.get(j);
- emSig.init(contentVerifierBuilderProvider, signatureKey);
- primkeyBinding_isok = emSig.verifyCertification(mKey, signatureKey);
- if (primkeyBinding_isok)
- break;
- }
- }
- if (hPkts.hasSubpacket(SignatureSubpacketTags.EMBEDDED_SIGNATURE)) {
- }
+ primkeyBinding_isok = verifyPrimaryBinding(sig.getUnhashedSubPackets(), mKey, signatureKey);
+ if (primkeyBinding_isok)
+ break;
+ primkeyBinding_isok = verifyPrimaryBinding(sig.getHashedSubPackets(), mKey, signatureKey);
+ if (primkeyBinding_isok)
+ break;
}
}
}
@@ -954,6 +946,40 @@ public class PgpOperation {
return returnData;
}
+ private boolean verifyPrimaryBinding(PGPSignatureSubpacketVector Pkts, PGPPublicKey masterPublicKey, PGPPublicKey signingPublicKey)
+ {
+ boolean primkeyBinding_isok = false;
+ JcaPGPContentVerifierBuilderProvider contentVerifierBuilderProvider = new JcaPGPContentVerifierBuilderProvider()
+ .setProvider(Constants.BOUNCY_CASTLE_PROVIDER_NAME);
+ PGPSignatureList eSigList;
+
+ 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) {
+ try {
+ emSig.init(contentVerifierBuilderProvider, signingPublicKey);
+ primkeyBinding_isok = emSig.verifyCertification(masterPublicKey, signingPublicKey);
+ if (primkeyBinding_isok)
+ break;
+ } catch (PGPException e) {
+ continue;
+ } catch (SignatureException e) {
+ continue;
+ }
+ }
+ }
+ }
+ return primkeyBinding_isok;
+ }
+
private static void processLine(final String pLine, final ArmoredOutputStream pArmoredOutput,
final PGPSignatureGenerator pSignatureGenerator) throws IOException, SignatureException {