diff --git a/test/general/openpgp.js b/test/general/openpgp.js index 9cde0211..209e9ab1 100644 --- a/test/general/openpgp.js +++ b/test/general/openpgp.js @@ -663,6 +663,29 @@ describe('OpenPGP.js public api tests', function() { }); }); + it('should encrypt/sign and decrypt/verify with detached signatures', function(done) { + var encOpt = { + data: plaintext, + publicKeys: publicKey.keys, + privateKeys: privateKey.keys, + detached: true + }; + var decOpt = { + privateKey: privateKey.keys[0], + publicKeys: publicKey.keys + }; + openpgp.encrypt(encOpt).then(function(encrypted) { + decOpt.message = openpgp.message.readArmored(encrypted.data); + decOpt.signature = openpgp.signature.readArmored(encrypted.signature); + return openpgp.decrypt(decOpt); + }).then(function(decrypted) { + expect(decrypted.data).to.equal(plaintext); + expect(decrypted.signatures[0].valid).to.be.true; + expect(decrypted.signatures[0].keyid.toHex()).to.equal(privateKey.keys[0].getSigningKeyPacket().getKeyId().toHex()); + done(); + }); + }); + it('should fail to verify decrypted data with wrong public pgp key', function(done) { var encOpt = { data: plaintext, @@ -684,6 +707,29 @@ describe('OpenPGP.js public api tests', function() { }); }); + it('should fail to verify decrypted data with wrong public pgp key with detached signatures', function(done) { + var encOpt = { + data: plaintext, + publicKeys: publicKey.keys, + privateKeys: privateKey.keys, + detached: true + }; + var decOpt = { + privateKey: privateKey.keys[0], + publicKeys: openpgp.key.readArmored(wrong_pubkey).keys + }; + openpgp.encrypt(encOpt).then(function(encrypted) { + decOpt.message = openpgp.message.readArmored(encrypted.data); + decOpt.signature = openpgp.signature.readArmored(encrypted.signature); + 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()); + done(); + }); + }); + it('should sign and verify cleartext data', function(done) { var signOpt = { data: plaintext, @@ -704,6 +750,27 @@ describe('OpenPGP.js public api tests', function() { }); }); + it('should sign and verify cleartext data with detached signatures', function(done) { + var signOpt = { + data: plaintext, + privateKeys: privateKey.keys, + detached: true + }; + var verifyOpt = { + publicKeys: publicKey.keys + }; + openpgp.sign(signOpt).then(function(signed) { + verifyOpt.message = openpgp.cleartext.readArmored(signed.data); + verifyOpt.signature = openpgp.signature.readArmored(signed.signature); + return openpgp.verify(verifyOpt); + }).then(function(verified) { + expect(verified.data).to.equal(plaintext); + expect(verified.signatures[0].valid).to.be.true; + expect(verified.signatures[0].keyid.toHex()).to.equal(privateKey.keys[0].getSigningKeyPacket().getKeyId().toHex()); + done(); + }); + }); + it('should sign and fail to verify cleartext data with wrong public pgp key', function(done) { var signOpt = { data: plaintext, @@ -723,6 +790,27 @@ describe('OpenPGP.js public api tests', function() { }); }); + it('should sign and fail to verify cleartext data with wrong public pgp key with detached signature', function(done) { + var signOpt = { + data: plaintext, + privateKeys: privateKey.keys, + detached: true + }; + var verifyOpt = { + publicKeys: openpgp.key.readArmored(wrong_pubkey).keys + }; + openpgp.sign(signOpt).then(function(signed) { + verifyOpt.message = openpgp.cleartext.readArmored(signed.data); + verifyOpt.signature = openpgp.signature.readArmored(signed.signature); + return openpgp.verify(verifyOpt); + }).then(function(verified) { + expect(verified.data).to.equal(plaintext); + expect(verified.signatures[0].valid).to.be.null; + expect(verified.signatures[0].keyid.toHex()).to.equal(privateKey.keys[0].getSigningKeyPacket().getKeyId().toHex()); + done(); + }); + }); + it('should sign and verify cleartext data and not armor', function(done) { var signOpt = { data: plaintext, @@ -742,6 +830,28 @@ describe('OpenPGP.js public api tests', function() { done(); }); }); + + it('should sign and verify cleartext data and not armor with detached signatures', function(done) { + var signOpt = { + data: plaintext, + privateKeys: privateKey.keys, + detached: true, + armor: false + }; + var verifyOpt = { + publicKeys: publicKey.keys + }; + openpgp.sign(signOpt).then(function(signed) { + verifyOpt.message = signed.message; + verifyOpt.signature = signed.signature; + return openpgp.verify(verifyOpt); + }).then(function(verified) { + expect(verified.data).to.equal(plaintext); + expect(verified.signatures[0].valid).to.be.true; + expect(verified.signatures[0].keyid.toHex()).to.equal(privateKey.keys[0].getSigningKeyPacket().getKeyId().toHex()); + done(); + }); + }); }); describe('ELG / DSA encrypt, decrypt, sign, verify', function() {