diff options
Diffstat (limited to 'OpenKeychain/src/main/java')
| -rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java | 33 | 
1 files changed, 20 insertions, 13 deletions
| 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 89db378a9..2f771d8f2 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java @@ -553,7 +553,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); @@ -1319,11 +1320,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();          { @@ -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.init(PGPSignature.POSITIVE_CERTIFICATION, masterPrivateKey);          return sGen.generateCertification(userId, pKey); @@ -1365,15 +1375,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); | 
