From e4621fc688777fb8214a2685eb74c6d3f0fe84d8 Mon Sep 17 00:00:00 2001 From: Sanjana Rajan Date: Wed, 15 Mar 2017 17:44:43 -0700 Subject: [PATCH] initialize publicKeys to empty array, test case where signed message is decrypted without public keys to verify --- src/openpgp.js | 3 +++ test/general/openpgp.js | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/openpgp.js b/src/openpgp.js index 58656bf8..1a55187a 100644 --- a/src/openpgp.js +++ b/src/openpgp.js @@ -244,6 +244,9 @@ export function decrypt({ message, privateKey, publicKeys, sessionKey, password, const result = parseMessage(message, format); if (result.data) { // verify + if (!publicKeys) { + publicKeys = []; + } if (signature) { //detached signature result.signatures = message.verifyDetached(signature, publicKeys); diff --git a/test/general/openpgp.js b/test/general/openpgp.js index 917a0aae..ac3fd50d 100644 --- a/test/general/openpgp.js +++ b/test/general/openpgp.js @@ -711,6 +711,27 @@ describe('OpenPGP.js public api tests', function() { }); }); + it('should successfully decrypt signed message without public keys to verify', function(done) { + var encOpt = { + data: plaintext, + publicKeys: publicKey.keys, + privateKeys: privateKey.keys + }; + var decOpt = { + privateKey: privateKey.keys[0], + }; + openpgp.encrypt(encOpt).then(function(encrypted) { + decOpt.message = openpgp.message.readArmored(encrypted.data); + return openpgp.decrypt(decOpt); + }).then(function(decrypted) { + expect(decrypted.data).to.equal(plaintext); + expect(decrypted.signatures[0].valid).to.be.null; + expect(decrypted.signatures[0].keyid.toHex()).to.equal(privateKey.keys[0].getSigningKeyPacket().getKeyId().toHex()); + expect(decrypted.signatures[0].signature.packets.length).to.equal(1); + done(); + }); + }); + it('should fail to verify decrypted data with wrong public pgp key with detached signatures', function(done) { var encOpt = { data: plaintext,