Fix isValidEncryptionKeyPacket function: access key flags by index

This commit is contained in:
Thomas Oberndörfer 2014-02-04 15:51:47 +01:00
parent ce1239f4e8
commit 57849437d9
2 changed files with 20 additions and 5 deletions

View File

@ -327,17 +327,17 @@ Key.prototype.getPreferredHashAlgorithm = function() {
function isValidEncryptionKeyPacket(keyPacket, signature) { function isValidEncryptionKeyPacket(keyPacket, signature) {
return keyPacket.algorithm !== enums.read(enums.publicKey, enums.publicKey.dsa) && 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_sign) &&
((signature.keyFlags & enums.keyFlags.encrypt_communication) !== 0 || (!signature.keyFlags ||
(signature.keyFlags & enums.keyFlags.encrypt_storage) !== 0 || (signature.keyFlags[0] & enums.keyFlags.encrypt_communication) !== 0 ||
!signature.keyFlags); (signature.keyFlags[0] & enums.keyFlags.encrypt_storage) !== 0);
} }
function isValidSigningKeyPacket(keyPacket, signature) { function isValidSigningKeyPacket(keyPacket, signature) {
return (keyPacket.algorithm == enums.read(enums.publicKey, enums.publicKey.dsa) || 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_sign) ||
keyPacket.algorithm == enums.read(enums.publicKey, enums.publicKey.rsa_encrypt_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);
} }
/** /**

View File

@ -293,5 +293,20 @@ describe('Key', function() {
expect(status).to.equal(openpgp.enums.keyStatus.revoked); expect(status).to.equal(openpgp.enums.keyStatus.revoked);
done(); 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;
});
}); });