Wait for data to be read before resolving signatures

This commit is contained in:
Daniel Huigens 2018-06-22 16:01:39 +02:00
parent 3113976dd2
commit d2ba6b3c6c
4 changed files with 19 additions and 11 deletions

View File

@ -108,7 +108,7 @@ Literal.prototype.getBytes = function(clone=false) {
this.data = util.str_to_Uint8Array(util.encode_utf8(text)); this.data = util.str_to_Uint8Array(util.encode_utf8(text));
} }
if (clone) { if (clone) {
return stream.clone(this.data); return stream.passiveClone(this.data);
} }
return this.data; return this.data;
}; };

View File

@ -1828,13 +1828,13 @@ describe('OpenPGP.js public api tests', function() {
expect(literals.length).to.equal(1); expect(literals.length).to.equal(1);
expect(+literals[0].date).to.equal(+past); expect(+literals[0].date).to.equal(+past);
let signatures = await packets.verify(encryptOpt.publicKeys, 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); signatures = await openpgp.stream.readToEnd(signatures, arr => arr);
expect(+signatures[0].signature.packets[0].created).to.equal(+past); expect(+signatures[0].signature.packets[0].created).to.equal(+past);
expect(signatures[0].valid).to.be.true; expect(signatures[0].valid).to.be.true;
expect(encryptOpt.privateKeys[0].getSigningKey(signatures[0].keyid, past)) expect(encryptOpt.privateKeys[0].getSigningKey(signatures[0].keyid, past))
.to.be.not.null; .to.be.not.null;
expect(signatures[0].signature.packets.length).to.equal(1); 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].format).to.equal('binary');
expect(+literals[0].date).to.equal(+future); expect(+literals[0].date).to.equal(+future);
let signatures = await packets.verify(encryptOpt.publicKeys, 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); signatures = await openpgp.stream.readToEnd(signatures, arr => arr);
expect(+signatures[0].signature.packets[0].created).to.equal(+future); expect(+signatures[0].signature.packets[0].created).to.equal(+future);
expect(signatures[0].valid).to.be.true; expect(signatures[0].valid).to.be.true;
expect(encryptOpt.privateKeys[0].getSigningKey(signatures[0].keyid, future)) expect(encryptOpt.privateKeys[0].getSigningKey(signatures[0].keyid, future))
.to.be.not.null; .to.be.not.null;
expect(signatures[0].signature.packets.length).to.equal(1); 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].format).to.equal('mime');
expect(+literals[0].date).to.equal(+future); expect(+literals[0].date).to.equal(+future);
let signatures = await packets.verify(encryptOpt.publicKeys, 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); signatures = await openpgp.stream.readToEnd(signatures, arr => arr);
expect(+signatures[0].signature.packets[0].created).to.equal(+future); expect(+signatures[0].signature.packets[0].created).to.equal(+future);
expect(signatures[0].valid).to.be.true; expect(signatures[0].valid).to.be.true;
expect(encryptOpt.privateKeys[0].getSigningKey(signatures[0].keyid, future)) expect(encryptOpt.privateKeys[0].getSigningKey(signatures[0].keyid, future))
.to.be.not.null; .to.be.not.null;
expect(signatures[0].signature.packets.length).to.equal(1); expect(signatures[0].signature.packets.length).to.equal(1);
expect(await openpgp.stream.readToEnd(packets.getLiteralData())).to.deep.equal(data);
}); });
}); });

View File

@ -705,11 +705,14 @@ describe("Packet", function() {
await msg[1].decrypt(msg[0].sessionKeyAlgorithm, msg[0].sessionKey); await msg[1].decrypt(msg[0].sessionKeyAlgorithm, msg[0].sessionKey);
const payload = msg[1].packets[0].packets; 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( await Promise.all([
key[0], payload[1] expect(payload[2].verify(
)).to.eventually.be.true; 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); await signed2.read(raw);
signed2.concat(await openpgp.stream.readToEnd(signed2.stream, arr => arr)); 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())
]);
}); });
}); });
}); });

View File

@ -343,6 +343,7 @@ describe("Signature", function() {
await priv_key_gnupg_ext.subKeys[0].keyPacket.decrypt("abcd"); await priv_key_gnupg_ext.subKeys[0].keyPacket.decrypt("abcd");
return msg.decrypt([priv_key_gnupg_ext]).then(function(msg) { return msg.decrypt([priv_key_gnupg_ext]).then(function(msg) {
return msg.verify([pub_key]).then(async verified => { return msg.verify([pub_key]).then(async verified => {
openpgp.stream.pipe(msg.getLiteralData(), new WritableStream());
verified = await openpgp.stream.readToEnd(verified, arr => arr); verified = await openpgp.stream.readToEnd(verified, arr => arr);
expect(verified).to.exist; expect(verified).to.exist;
expect(verified).to.have.length(1); expect(verified).to.have.length(1);
@ -368,6 +369,7 @@ describe("Signature", function() {
const sMsg = await openpgp.message.readArmored(signedArmor); const sMsg = await openpgp.message.readArmored(signedArmor);
const pub_key = (await openpgp.key.readArmored(pub_key_arm2)).keys[0]; const pub_key = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
return sMsg.verify([pub_key]).then(async verified => { return sMsg.verify([pub_key]).then(async verified => {
openpgp.stream.pipe(sMsg.getLiteralData(), new WritableStream());
verified = await openpgp.stream.readToEnd(verified, arr => arr); verified = await openpgp.stream.readToEnd(verified, arr => arr);
expect(verified).to.exist; expect(verified).to.exist;
expect(verified).to.have.length(1); expect(verified).to.have.length(1);
@ -439,6 +441,7 @@ describe("Signature", function() {
expect(pubKey3.getKeys(keyids[0])).to.not.be.empty; expect(pubKey3.getKeys(keyids[0])).to.not.be.empty;
return sMsg.verify([pubKey2, pubKey3]).then(async verifiedSig => { 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); verifiedSig = await openpgp.stream.readToEnd(verifiedSig, arr => arr);
expect(verifiedSig).to.exist; expect(verifiedSig).to.exist;
expect(verifiedSig).to.have.length(2); expect(verifiedSig).to.have.length(2);
@ -446,8 +449,6 @@ describe("Signature", function() {
expect(verifiedSig[1].valid).to.be.true; expect(verifiedSig[1].valid).to.be.true;
expect(verifiedSig[0].signature.packets.length).to.equal(1); expect(verifiedSig[0].signature.packets.length).to.equal(1);
expect(verifiedSig[1].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); const msg = openpgp.message.fromText(content);
await msg.appendSignature(detachedSig); await msg.appendSignature(detachedSig);
return msg.verify(publicKeys).then(async result => { return msg.verify(publicKeys).then(async result => {
openpgp.stream.pipe(msg.getLiteralData(), new WritableStream());
result = await openpgp.stream.readToEnd(result, arr => arr); result = await openpgp.stream.readToEnd(result, arr => arr);
expect(result[0].valid).to.be.true; expect(result[0].valid).to.be.true;
}); });