From bc756d0ed4fca4df5d43251c53e59ba95b774cb8 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Fri, 3 May 2019 12:37:43 +0200 Subject: [PATCH] Make key.isDecrypted() and key.encrypt() consistent for gnu-dummy keys --- src/packet/secret_key.js | 6 ++++++ test/general/signature.js | 21 +++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/packet/secret_key.js b/src/packet/secret_key.js index ffe07e83..558a7682 100644 --- a/src/packet/secret_key.js +++ b/src/packet/secret_key.js @@ -164,6 +164,11 @@ SecretKey.prototype.isDecrypted = function() { * @async */ SecretKey.prototype.encrypt = async function (passphrase) { + if (this.isDecrypted() && this.encrypted) { // gnu-dummy + this.isEncrypted = true; + return false; + } + if (this.isDecrypted() && !passphrase) { this.encrypted = null; return false; @@ -258,6 +263,7 @@ SecretKey.prototype.decrypt = async function (passphrase) { i += s2k.read(this.encrypted.subarray(i, this.encrypted.length)); if (s2k.type === 'gnu-dummy') { + this.isEncrypted = false; return false; } key = await produceEncryptionKey(s2k, passphrase, symmetric); diff --git a/test/general/signature.js b/test/general/signature.js index 72429ab2..6d2863d6 100644 --- a/test/general/signature.js +++ b/test/general/signature.js @@ -338,15 +338,20 @@ describe("Signature", function() { '=GQsY', '-----END PGP PRIVATE KEY BLOCK-----'].join("\n"))).keys[0]; const pub_key = (await openpgp.key.readArmored(pub_key_arm1)).keys[0]; - const msg = await openpgp.message.readArmored(msg_arm1); - + const message = await openpgp.message.readArmored(msg_arm1); + const primaryKey_packet = priv_key_gnupg_ext.primaryKey.write(); + expect(priv_key_gnupg_ext.isDecrypted()).to.be.false; await priv_key_gnupg_ext.decrypt("abcd"); - return openpgp.decrypt({ message: msg, privateKeys: [priv_key_gnupg_ext], publicKeys: [pub_key] }).then(function(msg) { - expect(msg.signatures).to.exist; - expect(msg.signatures).to.have.length(1); - expect(msg.signatures[0].valid).to.be.true; - expect(msg.signatures[0].signature.packets.length).to.equal(1); - }); + expect(priv_key_gnupg_ext.isDecrypted()).to.be.true; + const msg = await openpgp.decrypt({ message, privateKeys: [priv_key_gnupg_ext], publicKeys: [pub_key] }); + expect(msg.signatures).to.exist; + expect(msg.signatures).to.have.length(1); + expect(msg.signatures[0].valid).to.be.true; + expect(msg.signatures[0].signature.packets.length).to.equal(1); + await priv_key_gnupg_ext.encrypt("abcd"); + expect(priv_key_gnupg_ext.isDecrypted()).to.be.false; + const primaryKey_packet2 = priv_key_gnupg_ext.primaryKey.write(); + expect(primaryKey_packet).to.deep.equal(primaryKey_packet2); }); it('Verify V4 signature. Hash: SHA1. PK: RSA. Signature Type: 0x00 (binary document)', async function() {