diff --git a/src/key.js b/src/key.js index 9bf95f89..195e9ec5 100644 --- a/src/key.js +++ b/src/key.js @@ -327,17 +327,17 @@ Key.prototype.getPreferredHashAlgorithm = function() { function isValidEncryptionKeyPacket(keyPacket, signature) { return keyPacket.algorithm !== enums.read(enums.publicKey, enums.publicKey.dsa) && keyPacket.algorithm !== enums.read(enums.publicKey, enums.publicKey.rsa_sign) && - ((signature.keyFlags & enums.keyFlags.encrypt_communication) !== 0 || - (signature.keyFlags & enums.keyFlags.encrypt_storage) !== 0 || - !signature.keyFlags); + (!signature.keyFlags || + (signature.keyFlags[0] & enums.keyFlags.encrypt_communication) !== 0 || + (signature.keyFlags[0] & enums.keyFlags.encrypt_storage) !== 0); } function isValidSigningKeyPacket(keyPacket, signature) { return (keyPacket.algorithm == enums.read(enums.publicKey, enums.publicKey.dsa) || keyPacket.algorithm == enums.read(enums.publicKey, enums.publicKey.rsa_sign) || keyPacket.algorithm == enums.read(enums.publicKey, enums.publicKey.rsa_encrypt_sign)) && - ((signature.keyFlags & enums.keyFlags.sign_data) !== 0 || - !signature.keyFlags); + (!signature.keyFlags || + (signature.keyFlags[0] & enums.keyFlags.sign_data) !== 0); } /** diff --git a/test/general/key.js b/test/general/key.js index 75657025..377c9575 100644 --- a/test/general/key.js +++ b/test/general/key.js @@ -293,5 +293,20 @@ describe('Key', function() { expect(status).to.equal(openpgp.enums.keyStatus.revoked); done(); }); + + it('Evaluate key flags to find valid encryption key packet', function() { + var pubKeys = openpgp.key.readArmored(pub_sig_test); + expect(pubKeys).to.exist; + expect(pubKeys.err).to.not.exist; + expect(pubKeys.keys).to.have.length(1); + + var pubKey = pubKeys.keys[0]; + // remove subkeys + pubKey.subKeys = null; + // primary key has only key flags for signing + var keyPacket = pubKey.getEncryptionKeyPacket(); + expect(keyPacket).to.not.exist; + }); + });