aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-05-28 16:37:15 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2015-05-28 16:37:15 +0200
commit40703fe961eef8d884800b70d9af57da9fce2769 (patch)
tree243575bae2a32a872c2b5f902cb259bd383d15a7
parent4ecd4389b3f09ad7b8ee30cc072f64da3f2b4f51 (diff)
parentee02e110e7f1a90d2a91c4fc09834b8c073cbba7 (diff)
downloadopen-keychain-40703fe961eef8d884800b70d9af57da9fce2769.tar.gz
open-keychain-40703fe961eef8d884800b70d9af57da9fce2769.tar.bz2
open-keychain-40703fe961eef8d884800b70d9af57da9fce2769.zip
Merge branch 'master' into development
Conflicts: OpenKeychain/src/main/res/values/strings.xml
-rw-r--r--OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperationTest.java19
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java33
2 files changed, 39 insertions, 13 deletions
diff --git a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperationTest.java b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperationTest.java
index 18210d91a..312875229 100644
--- a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperationTest.java
+++ b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperationTest.java
@@ -100,6 +100,14 @@ public class PgpKeyOperationTest {
parcel.mAddUserIds.add("twi");
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);
PgpKeyOperation op = new PgpKeyOperation(null);
@@ -232,6 +240,17 @@ public class PgpKeyOperationTest {
Assert.assertEquals("number of user ids must be two",
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());
Assert.assertEquals("number of subkeys must be three", 3, subkeys.size());
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java
index 4c24d771d..ea0b2cee7 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java
@@ -618,7 +618,8 @@ public class PgpKeyOperation {
PGPSignature cert = generateUserAttributeSignature(
getSignatureGenerator(masterSecretKey, cryptoInput),
cryptoInput.getSignatureTime(),
- masterPrivateKey, masterPublicKey, vector);
+ masterPrivateKey, masterPublicKey, vector,
+ masterKeyFlags, masterKeyExpiry);
modifiedPublicKey = PGPPublicKey.addCertification(modifiedPublicKey, vector, cert);
} catch (NfcInteractionNeeded e) {
nfcSignOps.addHash(e.hashToSign, e.hashAlgo);
@@ -1409,11 +1410,9 @@ public class PgpKeyOperation {
}
- private PGPSignature generateUserIdSignature(
- PGPSignatureGenerator sGen, Date creationTime,
- PGPPrivateKey masterPrivateKey, PGPPublicKey pKey, String userId, boolean primary,
- int flags, long expiry)
- throws IOException, PGPException, SignatureException {
+ private static PGPSignatureSubpacketGenerator generateHashedSelfSigSubpackets(
+ Date creationTime, PGPPublicKey pKey, boolean primary, int flags, long expiry
+ ) {
PGPSignatureSubpacketGenerator hashedPacketsGen = new PGPSignatureSubpacketGenerator();
{
@@ -1447,6 +1446,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.init(PGPSignature.POSITIVE_CERTIFICATION, masterPrivateKey);
return sGen.generateCertification(userId, pKey);
@@ -1455,15 +1465,12 @@ public class PgpKeyOperation {
private static PGPSignature generateUserAttributeSignature(
PGPSignatureGenerator sGen, Date creationTime,
PGPPrivateKey masterPrivateKey, PGPPublicKey pKey,
- PGPUserAttributeSubpacketVector vector)
+ PGPUserAttributeSubpacketVector vector,
+ int flags, long expiry)
throws IOException, PGPException, SignatureException {
- PGPSignatureSubpacketGenerator hashedPacketsGen = new PGPSignatureSubpacketGenerator();
- {
- /* critical subpackets: we consider those important for a modern pgp implementation */
- hashedPacketsGen.setSignatureCreationTime(true, creationTime);
- }
-
+ PGPSignatureSubpacketGenerator hashedPacketsGen =
+ generateHashedSelfSigSubpackets(creationTime, pKey, false, flags, expiry);
sGen.setHashedSubpackets(hashedPacketsGen.generate());
sGen.init(PGPSignature.POSITIVE_CERTIFICATION, masterPrivateKey);
return sGen.generateCertification(vector, pKey);