aboutsummaryrefslogtreecommitdiffstats
path: root/libraries
diff options
context:
space:
mode:
authorAshley Hughes <spirit.returned@gmail.com>2014-02-01 17:01:03 +0000
committerAshley Hughes <spirit.returned@gmail.com>2014-02-01 17:01:03 +0000
commitaf5e01db8e847e0f77cfcf53daf2dd4b241aaee3 (patch)
treeaa9d21b44e30309cca1fac3f5edcf8c43fb76670 /libraries
parentb87f0b2658c471a5c4186f9c874ad52b070b5f1d (diff)
parent3f0f3cca6afa65dba4ff5868e5112cce39e2dc94 (diff)
downloadopen-keychain-af5e01db8e847e0f77cfcf53daf2dd4b241aaee3.tar.gz
open-keychain-af5e01db8e847e0f77cfcf53daf2dd4b241aaee3.tar.bz2
open-keychain-af5e01db8e847e0f77cfcf53daf2dd4b241aaee3.zip
create new keys without lots of extra certification
Diffstat (limited to 'libraries')
-rw-r--r--libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPObjectFactory.java9
-rw-r--r--libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKey.java2
-rw-r--r--libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKeyRing.java19
3 files changed, 29 insertions, 1 deletions
diff --git a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPObjectFactory.java b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPObjectFactory.java
index 11fb3a53c..73b11b9a1 100644
--- a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPObjectFactory.java
+++ b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPObjectFactory.java
@@ -103,6 +103,15 @@ public class PGPObjectFactory
{
throw new IOException("can't create secret key object: " + e);
}
+ case PacketTags.SECRET_SUBKEY:
+ try
+ {
+ return PGPSecretKeyRing.readSubkey(in, fingerPrintCalculator);
+ }
+ catch (PGPException e)
+ {
+ throw new IOException("processing error: " + e.getMessage());
+ }
case PacketTags.PUBLIC_KEY:
return new PGPPublicKeyRing(in, fingerPrintCalculator);
case PacketTags.PUBLIC_SUBKEY:
diff --git a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKey.java b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKey.java
index d705e5ce6..c0f7dfa3b 100644
--- a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKey.java
+++ b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKey.java
@@ -64,7 +64,7 @@ public class PGPSecretKey
this(privKey, pubKey, checksumCalculator, false, keyEncryptor);
}
- PGPSecretKey(
+ public PGPSecretKey(
PGPPrivateKey privKey,
PGPPublicKey pubKey,
PGPDigestCalculator checksumCalculator,
diff --git a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKeyRing.java b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKeyRing.java
index c182a1f1e..4805721a8 100644
--- a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKeyRing.java
+++ b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/PGPSecretKeyRing.java
@@ -477,4 +477,23 @@ public class PGPSecretKeyRing
return new PGPSecretKeyRing(keys, secRing.extraPubKeys);
}
+
+ static PGPSecretKey readSubkey(BCPGInputStream in, KeyFingerPrintCalculator fingerPrintCalculator)
+ throws IOException, PGPException
+ {
+ SecretSubkeyPacket sub = (SecretSubkeyPacket)in.readPacket();
+
+ //
+ // ignore GPG comment packets if found.
+ //
+ while (in.nextPacketTag() == PacketTags.EXPERIMENTAL_2)
+ {
+ in.readPacket();
+ }
+
+ TrustPacket subTrust = readOptionalTrustPacket(in);
+ List sigList = readSignaturesAndTrust(in);
+
+ return new PGPSecretKey(sub, new PGPPublicKey(sub.getPublicKeyPacket(), subTrust, sigList, fingerPrintCalculator));
+ }
}