diff --git a/src/key.js b/src/key.js index 1b1b375f..5e9ae18d 100644 --- a/src/key.js +++ b/src/key.js @@ -287,11 +287,6 @@ function isValidSigningKeyPacket(keyPacket, signature, date=new Date()) { Key.prototype.getSigningKeyPacket = async function (keyId=null, date=new Date(), userId={}) { const primaryKey = this.primaryKey; if (await this.verifyPrimaryKey(date, userId) === enums.keyStatus.valid) { - const primaryUser = await this.getPrimaryUser(date, userId); - if (primaryUser && (!keyId || primaryKey.getKeyId().equals(keyId)) && - isValidSigningKeyPacket(primaryKey, primaryUser.selfCertification, date)) { - return primaryKey; - } for (let i = 0; i < this.subKeys.length; i++) { if (!keyId || this.subKeys[i].subKey.getKeyId().equals(keyId)) { // eslint-disable-next-line no-await-in-loop @@ -303,6 +298,11 @@ Key.prototype.getSigningKeyPacket = async function (keyId=null, date=new Date(), } } } + const primaryUser = await this.getPrimaryUser(date, userId); + if (primaryUser && (!keyId || primaryKey.getKeyId().equals(keyId)) && + isValidSigningKeyPacket(primaryKey, primaryUser.selfCertification, date)) { + return primaryKey; + } } return null; }; diff --git a/test/general/signature.js b/test/general/signature.js index 45d09779..7657db8c 100644 --- a/test/general/signature.js +++ b/test/general/signature.js @@ -653,7 +653,7 @@ yYDnCgA= const plaintext = 'short message\nnext line\n한국어/조선말'; const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0]; const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0]; - await privKey.primaryKey.decrypt('hello world'); + await privKey.decrypt('hello world'); return openpgp.sign({ privateKeys:[privKey], data:plaintext }).then(function(signed) { @@ -673,7 +673,7 @@ yYDnCgA= const plaintext = pub_key_arm2; const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0]; const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0]; - await privKey.primaryKey.decrypt('hello world'); + await privKey.decrypt('hello world'); return openpgp.sign({ privateKeys:[privKey], data:plaintext }).then(function(signed) { @@ -693,7 +693,7 @@ yYDnCgA= const plaintext = 'space: \nspace and tab: \t\nno trailing space\n \ntab:\t\ntab and space:\t '; const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0]; const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0]; - await privKey.primaryKey.decrypt('hello world'); + await privKey.decrypt('hello world'); return openpgp.sign({ privateKeys:[privKey], data:plaintext }).then(function(signed) { @@ -713,7 +713,7 @@ yYDnCgA= const plaintext = openpgp.util.str_to_Uint8Array('short message\nnext line\n한국어/조선말'); const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0]; const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0]; - await privKey.primaryKey.decrypt('hello world'); + await privKey.decrypt('hello world'); return openpgp.sign({ privateKeys:[privKey], data:plaintext }).then(function(signed) { @@ -733,7 +733,7 @@ yYDnCgA= const plaintext = openpgp.util.str_to_Uint8Array('short message\nnext line\n한국어/조선말'); const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0]; const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0]; - await privKey.primaryKey.decrypt('hello world'); + await privKey.decrypt('hello world'); return openpgp.sign({ privateKeys:[privKey], data:plaintext, armor:false }).then(function(signed) { @@ -753,7 +753,7 @@ yYDnCgA= const plaintext = 'short message\nnext line\n한국어/조선말'; const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0]; const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0]; - await privKey.primaryKey.decrypt('hello world'); + await privKey.decrypt('hello world'); return openpgp.sign({ privateKeys:[privKey], data:plaintext, detached: true}).then(function(signed) { const signature = openpgp.signature.readArmored(signed.signature); return openpgp.verify({ publicKeys:[pubKey], message: openpgp.message.fromBinary(openpgp.util.str_to_Uint8Array(openpgp.util.encode_utf8(plaintext))), signature: signature });