
work correctly with utf8 strings. Fixeda visibility issue with the testing suite and added relevant unit tests.
70 lines
1.9 KiB
JavaScript
70 lines
1.9 KiB
JavaScript
|
|
unittests.register("Encryption/decryption", function() {
|
|
|
|
openpgp.init();
|
|
|
|
|
|
|
|
function test(passphrase, userid, message) {
|
|
var key = openpgp.generate_key_pair(1, 512, userid, passphrase),
|
|
priv_key = key.privateKey,
|
|
pub_key = openpgp.read_publicKey(key.publicKeyArmored);
|
|
|
|
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);
|
|
}
|
|
|
|
return new test_result(message + ' == ' + decrypted + info, message == decrypted);
|
|
}
|
|
|
|
var result = []
|
|
result.push(test('password', 'Test McTestington <test@example.com>', 'hello world'));
|
|
result.push(test('●●●●', '♔♔♔♔ <test@example.com>', 'łäóć'));
|
|
|
|
return result
|
|
});
|