1
0
mirror of https://github.com/moparisthebest/mail synced 2024-11-29 12:22:22 -05:00

check PGP signature and throw an error if verification fails

This commit is contained in:
Tankred Hase 2013-12-05 13:00:00 +01:00
parent f6b15ac151
commit 76b2b90e0e
3 changed files with 343 additions and 253 deletions

View File

@ -177,10 +177,15 @@ define(function(require) {
* Decrypt and verify a pgp message for a single sender
*/
PGP.prototype.decrypt = function(ciphertext, senderKey, callback) {
var privateKey, msg, keymat, sesskey, decrypted;
var privateKey, publicKey, pubKeys, msg, keymat, sesskey, decrypted;
privateKey = openpgp.keyring.exportPrivateKey(0).obj;
senderKey = openpgp.read_publicKey(senderKey)[0];
publicKey = openpgp.read_publicKey(senderKey)[0];
pubKeys = [{
armored: senderKey,
obj: publicKey,
keyId: publicKey.getKeyId()
}];
try {
msg = openpgp.read_message(ciphertext)[0];
@ -223,15 +228,26 @@ define(function(require) {
// decrypt and verify ciphertext
try {
decrypted = msg.decryptAndVerifySignature(keymat, sesskey, senderKey);
decrypted = msg.decryptAndVerifySignature(keymat, sesskey, pubKeys);
} catch (err) {
callback({
errMsg: 'Error reading PGP message!',
errMsg: 'Error decrypting PGP message!',
err: err
});
return;
}
// check if signatures are ok
for (var k = 0; k < decrypted.validSignatures.length; k++) {
if (!decrypted.validSignatures[k]) {
callback({
errMsg: 'Error verifying PGP signature!'
});
return;
}
}
// return decrypted plaintext
callback(null, decrypted.text);
};

File diff suppressed because it is too large Load Diff

View File

@ -118,8 +118,7 @@ define(function(require) {
});
describe('Encryption', function() {
var message = 'Hello, World!',
ciphertext;
var message = 'Hello, World!';
beforeEach(function(done) {
pgp.importKeys({
@ -151,7 +150,7 @@ define(function(require) {
});
});
describe('Encrypt', function() {
describe('Encrypt and sign', function() {
it('should fail', function(done) {
var input = null;
@ -166,13 +165,23 @@ define(function(require) {
pgp.encrypt(message, [pubkey], function(err, ct) {
expect(err).to.not.exist;
expect(ct).to.exist;
ciphertext = ct;
done();
});
});
});
describe('Decrypt', function() {
describe('Decrypt and verify', function() {
var ciphertext;
beforeEach(function(done) {
pgp.encrypt(message, [pubkey], function(err, ct) {
expect(err).to.not.exist;
expect(ct).to.exist;
ciphertext = ct;
done();
});
});
it('should fail', function(done) {
var input = 'asdfa\rsdf';