Merge branch 'master' of github.com:open-keychain/open-keychain

This commit is contained in:
Dominik Schürmann 2015-05-21 10:32:15 +02:00
commit 7e55ba1b36
2 changed files with 39 additions and 13 deletions

View File

@ -99,6 +99,14 @@ public class PgpKeyOperationTest {
parcel.mAddUserIds.add("twi"); parcel.mAddUserIds.add("twi");
parcel.mAddUserIds.add("pink"); parcel.mAddUserIds.add("pink");
{
int type = 42;
byte[] data = new byte[] { 0, 1, 2, 3, 4 };
WrappedUserAttribute uat = WrappedUserAttribute.fromSubpacket(type, data);
parcel.mAddUserAttribute.add(uat);
}
parcel.mNewUnlock = new ChangeUnlockParcel(passphrase); parcel.mNewUnlock = new ChangeUnlockParcel(passphrase);
PgpKeyOperation op = new PgpKeyOperation(null); PgpKeyOperation op = new PgpKeyOperation(null);
@ -231,6 +239,17 @@ public class PgpKeyOperationTest {
Assert.assertEquals("number of user ids must be two", Assert.assertEquals("number of user ids must be two",
2, ring.getPublicKey().getUnorderedUserIds().size()); 2, ring.getPublicKey().getUnorderedUserIds().size());
ArrayList<WrappedUserAttribute> attributes =
ring.getPublicKey().getUnorderedUserAttributes();
Assert.assertEquals("number of user attributes must be one",
1, attributes.size());
Assert.assertEquals("user attribute must be correct type",
42, attributes.get(0).getType());
Assert.assertEquals("user attribute must have one subpacket",
1, attributes.get(0).getSubpackets().length);
Assert.assertArrayEquals("user attribute must have correct data",
new byte[] { 0, 1, 2, 3, 4 }, attributes.get(0).getSubpackets()[0]);
List<UncachedPublicKey> subkeys = KeyringTestingHelper.itToList(ring.getPublicKeys()); List<UncachedPublicKey> subkeys = KeyringTestingHelper.itToList(ring.getPublicKeys());
Assert.assertEquals("number of subkeys must be three", 3, subkeys.size()); Assert.assertEquals("number of subkeys must be three", 3, subkeys.size());

View File

@ -553,7 +553,8 @@ public class PgpKeyOperation {
PGPSignature cert = generateUserAttributeSignature( PGPSignature cert = generateUserAttributeSignature(
getSignatureGenerator(masterSecretKey, cryptoInput), getSignatureGenerator(masterSecretKey, cryptoInput),
cryptoInput.getSignatureTime(), cryptoInput.getSignatureTime(),
masterPrivateKey, masterPublicKey, vector); masterPrivateKey, masterPublicKey, vector,
masterKeyFlags, masterKeyExpiry);
modifiedPublicKey = PGPPublicKey.addCertification(modifiedPublicKey, vector, cert); modifiedPublicKey = PGPPublicKey.addCertification(modifiedPublicKey, vector, cert);
} catch (NfcInteractionNeeded e) { } catch (NfcInteractionNeeded e) {
nfcSignOps.addHash(e.hashToSign, e.hashAlgo); nfcSignOps.addHash(e.hashToSign, e.hashAlgo);
@ -1319,11 +1320,9 @@ public class PgpKeyOperation {
} }
private PGPSignature generateUserIdSignature( private static PGPSignatureSubpacketGenerator generateHashedSelfSigSubpackets(
PGPSignatureGenerator sGen, Date creationTime, Date creationTime, PGPPublicKey pKey, boolean primary, int flags, long expiry
PGPPrivateKey masterPrivateKey, PGPPublicKey pKey, String userId, boolean primary, ) {
int flags, long expiry)
throws IOException, PGPException, SignatureException {
PGPSignatureSubpacketGenerator hashedPacketsGen = new PGPSignatureSubpacketGenerator(); PGPSignatureSubpacketGenerator hashedPacketsGen = new PGPSignatureSubpacketGenerator();
{ {
@ -1357,6 +1356,17 @@ public class PgpKeyOperation {
} }
} }
return hashedPacketsGen;
}
private static PGPSignature generateUserIdSignature(
PGPSignatureGenerator sGen, Date creationTime,
PGPPrivateKey masterPrivateKey, PGPPublicKey pKey, String userId, boolean primary,
int flags, long expiry)
throws IOException, PGPException, SignatureException {
PGPSignatureSubpacketGenerator hashedPacketsGen =
generateHashedSelfSigSubpackets(creationTime, pKey, primary, flags, expiry);
sGen.setHashedSubpackets(hashedPacketsGen.generate()); sGen.setHashedSubpackets(hashedPacketsGen.generate());
sGen.init(PGPSignature.POSITIVE_CERTIFICATION, masterPrivateKey); sGen.init(PGPSignature.POSITIVE_CERTIFICATION, masterPrivateKey);
return sGen.generateCertification(userId, pKey); return sGen.generateCertification(userId, pKey);
@ -1365,15 +1375,12 @@ public class PgpKeyOperation {
private static PGPSignature generateUserAttributeSignature( private static PGPSignature generateUserAttributeSignature(
PGPSignatureGenerator sGen, Date creationTime, PGPSignatureGenerator sGen, Date creationTime,
PGPPrivateKey masterPrivateKey, PGPPublicKey pKey, PGPPrivateKey masterPrivateKey, PGPPublicKey pKey,
PGPUserAttributeSubpacketVector vector) PGPUserAttributeSubpacketVector vector,
int flags, long expiry)
throws IOException, PGPException, SignatureException { throws IOException, PGPException, SignatureException {
PGPSignatureSubpacketGenerator hashedPacketsGen = new PGPSignatureSubpacketGenerator(); PGPSignatureSubpacketGenerator hashedPacketsGen =
{ generateHashedSelfSigSubpackets(creationTime, pKey, false, flags, expiry);
/* critical subpackets: we consider those important for a modern pgp implementation */
hashedPacketsGen.setSignatureCreationTime(true, creationTime);
}
sGen.setHashedSubpackets(hashedPacketsGen.generate()); sGen.setHashedSubpackets(hashedPacketsGen.generate());
sGen.init(PGPSignature.POSITIVE_CERTIFICATION, masterPrivateKey); sGen.init(PGPSignature.POSITIVE_CERTIFICATION, masterPrivateKey);
return sGen.generateCertification(vector, pKey); return sGen.generateCertification(vector, pKey);