66 lines
2.0 KiB
JavaScript
66 lines
2.0 KiB
JavaScript
var unit = require('../unit.js');
|
|
|
|
unit.register("Encryption/decryption", function() {
|
|
var openpgp = require('../../');
|
|
var keyring = require('../../src/openpgp.keyring.js');
|
|
var result = [];
|
|
var key = openpgp.generateKeyPair(openpgp.enums.publicKey.rsa_encrypt_sign, 512,
|
|
'Test McTestington <test@example.com>', 'hello world');
|
|
|
|
var info = '\npassphrase: ' + passphrase + '\n'
|
|
+ 'userid: ' + userid + '\n'
|
|
+ 'message: ' + message;
|
|
|
|
if(!priv_key.decryptSecretMPIs(passphrase)) {
|
|
return new test_result('Generating a decryptable private key failed'
|
|
+ info,
|
|
false);
|
|
}
|
|
|
|
var encrypted = openpgp.write_signed_and_encrypted_message(priv_key,
|
|
pub_key, message);
|
|
|
|
openpgp.keyring.importPublicKey(key.publicKeyArmored)
|
|
|
|
|
|
var msg = openpgp.read_message(encrypted);
|
|
var keymat = null;
|
|
var sesskey = null;
|
|
|
|
// Find the private (sub)key for the session key of the message
|
|
for (var i = 0; i< msg[0].sessionKeys.length; i++) {
|
|
if (priv_key.privateKeyPacket.publicKey.getKeyId() == msg[0].sessionKeys[i].keyId.bytes) {
|
|
keymat = { key: priv_key, keymaterial: priv_key.privateKeyPacket};
|
|
sesskey = msg[0].sessionKeys[i];
|
|
break;
|
|
}
|
|
for (var j = 0; j < priv_key.subKeys.length; j++) {
|
|
if (priv_key.subKeys[j].publicKey.getKeyId() == msg[0].sessionKeys[i].keyId.bytes) {
|
|
keymat = { key: priv_key, keymaterial: priv_key.subKeys[j]};
|
|
sesskey = msg[0].sessionKeys[i];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
var decrypted = '';
|
|
if (keymat !== null) {
|
|
if (!keymat.keymaterial.decryptSecretMPIs(passphrase)) {
|
|
return new test_result("Password for secrect key was incorrect!",
|
|
+ info, false);
|
|
}
|
|
|
|
decrypted = msg[0].decrypt(keymat, sesskey);
|
|
} else {
|
|
return new test_result("No private key found!" + info, false);
|
|
}
|
|
|
|
result.push(new test_result(message + ' == ' + decrypted + info, message == decrypted));
|
|
|
|
//result.push(test('password', 'Test McTestington <test@example.com>', 'hello world'));
|
|
//result.push(test('●●●●', '♔♔♔♔ <test@example.com>', 'łäóć'));
|
|
|
|
return result;
|
|
});
|
|
|