fork-openpgpjs/test/ci-quick.js
2013-12-08 15:41:31 -08:00

205 lines
9.1 KiB
JavaScript

var openpgp = require('openpgp'),
keyring = require('../src/keyring.js');
'use strict';
var expect = chai.expect;
describe('Openpgp integration tests', function() {
var user = 'test@t-online.de',
passphrase = 'asdf',
keySize = 512,
keyId = 'F6F60E9B42CDFF4C',
pubkey = '-----BEGIN PGP PUBLIC KEY BLOCK-----\n' +
'Version: OpenPGP.js v.1.20131011\n' +
'Comment: http://openpgpjs.org\n' +
'\n' +
'xk0EUlhMvAEB/2MZtCUOAYvyLFjDp3OBMGn3Ev8FwjzyPbIF0JUw+L7y2XR5\n' +
'RVGvbK88unV3cU/1tOYdNsXI6pSp/Ztjyv7vbBUAEQEAAc0pV2hpdGVvdXQg\n' +
'VXNlciA8d2hpdGVvdXQudGVzdEB0LW9ubGluZS5kZT7CXAQQAQgAEAUCUlhM\n' +
'vQkQ9vYOm0LN/0wAAAW4Af9C+kYW1AvNWmivdtr0M0iYCUjM9DNOQH1fcvXq\n' +
'IiN602mWrkd8jcEzLsW5IUNzVPLhrFIuKyBDTpLnC07Loce1\n' +
'=6XMW\n' +
'-----END PGP PUBLIC KEY BLOCK-----',
privkey = '-----BEGIN PGP PRIVATE KEY BLOCK-----\n' +
'Version: OpenPGP.js v.1.20131011\n' +
'Comment: http://openpgpjs.org\n' +
'\n' +
'xcBeBFJYTLwBAf9jGbQlDgGL8ixYw6dzgTBp9xL/BcI88j2yBdCVMPi+8tl0\n' +
'eUVRr2yvPLp1d3FP9bTmHTbFyOqUqf2bY8r+72wVABEBAAH+AwMIhNB4ivtv\n' +
'Y2xg6VeMcjjHxZayESHACV+nQx5Tx6ev6xzIF1Qh72fNPDppLhFSFOuTTMsU\n' +
'kTN4c+BVYt29spH+cA1jcDAxQ2ULrNAXo+hheOqhpedTs8aCbcLFkJAS16hk\n' +
'YSk4OnJgp/z24rVju1SHRSFbgundPzmNgXeX9e8IkviGhhQ11Wc5YwVkx03t\n' +
'Z3MdDMF0jyhopbPIoBdyJB0dhvBh98w3JmwpYh9wjUA9MBHD1tvHpRmSZ3BM\n' +
'UCmATn2ZLWBRWiYqFbgDnL1GM80pV2hpdGVvdXQgVXNlciA8d2hpdGVvdXQu\n' +
'dGVzdEB0LW9ubGluZS5kZT7CXAQQAQgAEAUCUlhMvQkQ9vYOm0LN/0wAAAW4\n' +
'Af9C+kYW1AvNWmivdtr0M0iYCUjM9DNOQH1fcvXqIiN602mWrkd8jcEzLsW5\n' +
'IUNzVPLhrFIuKyBDTpLnC07Loce1\n' +
'=ULta\n' +
'-----END PGP PRIVATE KEY BLOCK-----';
describe('Generate key pair', function() {
it('should work', function(done) {
// generate keypair (keytype 1=RSA)
var errMsg, err;
var keys = null;
try {
var userId = 'Whiteout User <' + user + '>';
var keys = openpgp.generateKeyPair(1, keySize, userId, passphrase);
var keyId = openpgp.util.hexstrdump(keys.key.getKeyPacket().getKeyId()).toUpperCase();
expect(keyId).to.exist;
expect(keys.privateKeyArmored).to.exist;
expect(keys.publicKeyArmored).to.exist;
} catch (e) {
errMsg = 'Keygeneration failed!';
err = e;
}
expect(err).to.not.exist;
done();
});
});
describe('Import key pair', function() {
it('should work', function(done) {
// clear any keypair already in the keychain
keyring.init();
// import private key
keyring.importKey(privkey);
// import public key
keyring.importKey(pubkey);
done();
});
});
describe('Encryption', function() {
var message = 'asdfs\n\nThursday, Nov 21, 2013 7:38 PM asdf@example.com wrote:\n' +
'> asdf\n' +
'> \n' +
'> Thursday, Nov 21, 2013 7:32 PM asdf@example.com wrote:\n' +
'> > secret 3',
ciphertext;
describe('Encrypt and Sign', function() {
it('should work', function(done) {
var signkey = openpgp.key.readArmored(privkey);
expect(signkey).to.exist;
var encryptkey = openpgp.key.readArmored(pubkey);
expect(encryptkey).to.exist;
expect(signkey.decrypt(passphrase)).to.be.true;
ciphertext = openpgp.signAndEncryptMessage([encryptkey], signkey, message);
expect(ciphertext).to.exist;
done();
});
});
describe('Decrypt and Verify', function() {
it('should work', function(done) {
var decryptkey = openpgp.key.readArmored(privkey);
expect(decryptkey, 'decryptkey').to.exist;
var verifykey = openpgp.key.readArmored(pubkey);
expect(verifykey, 'verifykey').to.exist;
var pgpmsg = openpgp.message.readArmored(ciphertext);
expect(pgpmsg, 'pgpmsg').to.exist;
var keyids = pgpmsg.getEncryptionKeyIds();
expect(keyids, 'keyids').to.exist;
expect(decryptkey.decryptKeyPacket(keyids, passphrase), 'decryptKeyPacket()').to.be.true;
var result = openpgp.decryptAndVerifyMessage(decryptkey, [verifykey], pgpmsg);
expect(result, 'decryptAndVerifyMessage() result').to.exist;
expect(result.text, 'decryptAndVerifyMessage() result.text').to.exist.and.equal(message);
expect(result.signatures, 'decryptAndVerifyMessage() result.signatures').to.exist.and.not.be.empty;
expect(result.signatures[0].status, 'decryptAndVerifyMessage() result.signatures[0].status').to.be.true;
done();
});
});
});
describe('Verify clearsign from gpg', function() {
describe('Verify V3 signature', function() {
var v3_clearsign_msg = '-----BEGIN PGP SIGNED MESSAGE-----\r\n' +
'Hash: SHA1\r\n' +
'\r\n' +
'This is a test message.\r\n' +
'\r\n' +
'This paragraph is separated form the next by a line of dashes.\r\n' +
'\r\n' +
'- --------------------------------------------------------------------------\r\n' +
'\r\n' +
'The next paragraph has a number of blank lines between this one and it.\r\n' +
'\r\n' +
'\r\n' +
'\r\n' +
'\r\n' +
'\r\n' +
'\r\n' +
'This is the last paragraph.\r\n' +
'\r\n' +
'- --\r\n' +
'\r\n' +
'Joe Test\r\n' +
'-----BEGIN PGP SIGNATURE-----\r\n' +
'Version: GnuPG v1.4.15 (GNU/Linux)\r\n' +
'\r\n' +
'iQBVAwUBUp/7GPb2DptCzf9MAQKviQH6A6Pqa63kxWI+atMiaSXz5uifgsBoiOof\r\n' +
'E3/oVTIGyGTgB7KnwZiFkDMFrUNREJVSQGt6+4nxje8gARcuYpMnWw==\r\n' +
'=lOCC\r\n' +
'-----END PGP SIGNATURE-----\r\n';
it('should work', function(done) {
var cleartext = openpgp.cleartext.readArmored(v3_clearsign_msg);
expect(cleartext).to.exist;
var verifykey = openpgp.key.readArmored(pubkey);
expect(verifykey, 'verifykey').to.exist;
var result = cleartext.verify([verifykey])
expect(result, 'verify() result').to.exist.and.not.be.empty;
expect(result[0].keyid, 'verify() result[0].keyid').to.exist;
expect(result[0].status, 'verify() result[0].status').to.be.true;
done();
});
});
describe('Verify V4 signature', function() {
var v4_clearsign_msg = '-----BEGIN PGP SIGNED MESSAGE-----\r\n' +
'Hash: SHA1\r\n' +
'\r\n' +
'This is a test message.\r\n' +
'\r\n' +
'This paragraph is separated form the next by a line of dashes.\r\n' +
'\r\n' +
'- --------------------------------------------------------------------------\r\n' +
'\r\n' +
'The next paragraph has a number of blank lines between this one and it.\r\n' +
'\r\n' +
'\r\n' +
'\r\n' +
'\r\n' +
'\r\n' +
'\r\n' +
'This is the last paragraph.\r\n' +
'\r\n' +
'- --\r\n' +
'\r\n' +
'Joe Test\r\n' +
'-----BEGIN PGP SIGNATURE-----\r\n' +
'Version: GnuPG v1.4.15 (GNU/Linux)\r\n' +
'\r\n' +
'iFwEAQECAAYFAlKf5LcACgkQ9vYOm0LN/0ybVwH8CItdDh4kWKVcyUx3Q3hWZnWd\r\n' +
'zP9CUbIa9uToIPABjV3GOTDM3ZgiP0/SE6Al5vG8hlx+/u2piVojoLovk/4LnA==\r\n' +
'=i6ew\r\n' +
'-----END PGP SIGNATURE-----\r\n';
it('should work', function(done) {
var cleartext = openpgp.cleartext.readArmored(v4_clearsign_msg);
expect(cleartext).to.exist;
var verifykey = openpgp.key.readArmored(pubkey);
expect(verifykey, 'verifykey').to.exist;
var result = cleartext.verify([verifykey])
expect(result, 'verify() result').to.exist.and.not.be.empty;
expect(result[0].keyid, 'verify() result[0].keyid').to.exist;
expect(result[0].status, 'verify() result[0].status').to.be.true;
done();
});
});
});
});