create new keys without lots of extra certification

This commit is contained in:
Ashley Hughes
2014-02-01 17:01:03 +00:00
8 changed files with 89 additions and 90 deletions

View File

@@ -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:

View File

@@ -64,7 +64,7 @@ public class PGPSecretKey
this(privKey, pubKey, checksumCalculator, false, keyEncryptor);
}
PGPSecretKey(
public PGPSecretKey(
PGPPrivateKey privKey,
PGPPublicKey pubKey,
PGPDigestCalculator checksumCalculator,

View File

@@ -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));
}
}