From d2ba6b3c6cafdb731ebdb7b3aac3ce25f6a22cd7 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Fri, 22 Jun 2018 16:01:39 +0200 Subject: [PATCH] Wait for data to be read before resolving signatures --- src/packet/literal.js | 2 +- test/general/openpgp.js | 6 +++--- test/general/packet.js | 16 +++++++++++----- test/general/signature.js | 6 ++++-- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/packet/literal.js b/src/packet/literal.js index 55c099cd..a9e7c343 100644 --- a/src/packet/literal.js +++ b/src/packet/literal.js @@ -108,7 +108,7 @@ Literal.prototype.getBytes = function(clone=false) { this.data = util.str_to_Uint8Array(util.encode_utf8(text)); } if (clone) { - return stream.clone(this.data); + return stream.passiveClone(this.data); } return this.data; }; diff --git a/test/general/openpgp.js b/test/general/openpgp.js index 6fb19a3c..caa4ed58 100644 --- a/test/general/openpgp.js +++ b/test/general/openpgp.js @@ -1828,13 +1828,13 @@ describe('OpenPGP.js public api tests', function() { expect(literals.length).to.equal(1); expect(+literals[0].date).to.equal(+past); let signatures = await packets.verify(encryptOpt.publicKeys, past); + expect(await openpgp.stream.readToEnd(packets.getText())).to.equal(plaintext); signatures = await openpgp.stream.readToEnd(signatures, arr => arr); expect(+signatures[0].signature.packets[0].created).to.equal(+past); expect(signatures[0].valid).to.be.true; expect(encryptOpt.privateKeys[0].getSigningKey(signatures[0].keyid, past)) .to.be.not.null; expect(signatures[0].signature.packets.length).to.equal(1); - expect(await openpgp.stream.readToEnd(packets.getText())).to.equal(plaintext); }); }); @@ -1857,13 +1857,13 @@ describe('OpenPGP.js public api tests', function() { expect(literals[0].format).to.equal('binary'); expect(+literals[0].date).to.equal(+future); let signatures = await packets.verify(encryptOpt.publicKeys, future); + expect(await openpgp.stream.readToEnd(packets.getLiteralData())).to.deep.equal(data); signatures = await openpgp.stream.readToEnd(signatures, arr => arr); expect(+signatures[0].signature.packets[0].created).to.equal(+future); expect(signatures[0].valid).to.be.true; expect(encryptOpt.privateKeys[0].getSigningKey(signatures[0].keyid, future)) .to.be.not.null; expect(signatures[0].signature.packets.length).to.equal(1); - expect(await openpgp.stream.readToEnd(packets.getLiteralData())).to.deep.equal(data); }); }); @@ -1887,13 +1887,13 @@ describe('OpenPGP.js public api tests', function() { expect(literals[0].format).to.equal('mime'); expect(+literals[0].date).to.equal(+future); let signatures = await packets.verify(encryptOpt.publicKeys, future); + expect(await openpgp.stream.readToEnd(packets.getLiteralData())).to.deep.equal(data); signatures = await openpgp.stream.readToEnd(signatures, arr => arr); expect(+signatures[0].signature.packets[0].created).to.equal(+future); expect(signatures[0].valid).to.be.true; expect(encryptOpt.privateKeys[0].getSigningKey(signatures[0].keyid, future)) .to.be.not.null; expect(signatures[0].signature.packets.length).to.equal(1); - expect(await openpgp.stream.readToEnd(packets.getLiteralData())).to.deep.equal(data); }); }); diff --git a/test/general/packet.js b/test/general/packet.js index dbf01d7e..fb93572b 100644 --- a/test/general/packet.js +++ b/test/general/packet.js @@ -705,11 +705,14 @@ describe("Packet", function() { await msg[1].decrypt(msg[0].sessionKeyAlgorithm, msg[0].sessionKey); const payload = msg[1].packets[0].packets; - await openpgp.stream.readToEnd(payload.stream, packets => packets.forEach(payload.push.bind(payload))); + payload.concat(await openpgp.stream.readToEnd(payload.stream, arr => arr)); - await expect(payload[2].verify( - key[0], payload[1] - )).to.eventually.be.true; + await Promise.all([ + expect(payload[2].verify( + key[0], payload[1] + )).to.eventually.be.true, + openpgp.stream.pipe(payload[1].getBytes(), new WritableStream()) + ]); }); }); @@ -831,7 +834,10 @@ kePFjAnu9cpynKXu3usf8+FuBw2zLsg1Id1n7ttxoAte416KjBN9lFBt8mcu await signed2.read(raw); signed2.concat(await openpgp.stream.readToEnd(signed2.stream, arr => arr)); - await expect(signed2[1].verify(key, signed2[0])).to.eventually.be.true; + await Promise.all([ + expect(signed2[1].verify(key, signed2[0])).to.eventually.be.true, + openpgp.stream.pipe(signed2[0].getBytes(), new WritableStream()) + ]); }); }); }); diff --git a/test/general/signature.js b/test/general/signature.js index bf30ca37..9513ec8a 100644 --- a/test/general/signature.js +++ b/test/general/signature.js @@ -343,6 +343,7 @@ describe("Signature", function() { await priv_key_gnupg_ext.subKeys[0].keyPacket.decrypt("abcd"); return msg.decrypt([priv_key_gnupg_ext]).then(function(msg) { return msg.verify([pub_key]).then(async verified => { + openpgp.stream.pipe(msg.getLiteralData(), new WritableStream()); verified = await openpgp.stream.readToEnd(verified, arr => arr); expect(verified).to.exist; expect(verified).to.have.length(1); @@ -368,6 +369,7 @@ describe("Signature", function() { const sMsg = await openpgp.message.readArmored(signedArmor); const pub_key = (await openpgp.key.readArmored(pub_key_arm2)).keys[0]; return sMsg.verify([pub_key]).then(async verified => { + openpgp.stream.pipe(sMsg.getLiteralData(), new WritableStream()); verified = await openpgp.stream.readToEnd(verified, arr => arr); expect(verified).to.exist; expect(verified).to.have.length(1); @@ -439,6 +441,7 @@ describe("Signature", function() { expect(pubKey3.getKeys(keyids[0])).to.not.be.empty; return sMsg.verify([pubKey2, pubKey3]).then(async verifiedSig => { + expect(await openpgp.stream.readToEnd(sMsg.getText())).to.equal(plaintext); verifiedSig = await openpgp.stream.readToEnd(verifiedSig, arr => arr); expect(verifiedSig).to.exist; expect(verifiedSig).to.have.length(2); @@ -446,8 +449,6 @@ describe("Signature", function() { expect(verifiedSig[1].valid).to.be.true; expect(verifiedSig[0].signature.packets.length).to.equal(1); expect(verifiedSig[1].signature.packets.length).to.equal(1); - - expect(await openpgp.stream.readToEnd(sMsg.getText())).to.equal(plaintext); }); }); @@ -884,6 +885,7 @@ yYDnCgA= const msg = openpgp.message.fromText(content); await msg.appendSignature(detachedSig); return msg.verify(publicKeys).then(async result => { + openpgp.stream.pipe(msg.getLiteralData(), new WritableStream()); result = await openpgp.stream.readToEnd(result, arr => arr); expect(result[0].valid).to.be.true; });