2010-06-22 00:20:31 -07:00
|
|
|
Cu.import("resource://services-sync/util.js");
|
|
|
|
|
2009-07-21 15:02:30 -07:00
|
|
|
function run_test() {
|
2010-06-22 00:20:31 -07:00
|
|
|
let cryptoSvc = Svc.Crypto;
|
2009-07-21 15:02:30 -07:00
|
|
|
|
|
|
|
var salt = cryptoSvc.generateRandomBytes(16);
|
|
|
|
var iv = cryptoSvc.generateRandomIV();
|
|
|
|
var symKey = cryptoSvc.generateRandomKey();
|
|
|
|
|
|
|
|
// Tests with a 2048 bit key (the default)
|
|
|
|
do_check_eq(cryptoSvc.keypairBits, 2048)
|
|
|
|
var pubOut = {};
|
|
|
|
var privOut = {};
|
|
|
|
cryptoSvc.generateKeypair("old passphrase", salt, iv, pubOut, privOut);
|
|
|
|
var pubKey = pubOut.value;
|
|
|
|
var privKey = privOut.value;
|
|
|
|
|
|
|
|
// do some key wrapping
|
|
|
|
var wrappedKey = cryptoSvc.wrapSymmetricKey(symKey, pubKey);
|
|
|
|
var unwrappedKey = cryptoSvc.unwrapSymmetricKey(wrappedKey, privKey,
|
|
|
|
"old passphrase", salt, iv);
|
|
|
|
|
|
|
|
// Is our unwrapped key the same thing we started with?
|
|
|
|
do_check_eq(unwrappedKey, symKey);
|
|
|
|
|
|
|
|
// Rewrap key with a new passphrase
|
|
|
|
var newPrivKey = cryptoSvc.rewrapPrivateKey(privKey, "old passphrase",
|
|
|
|
salt, iv, "new passphrase");
|
|
|
|
|
|
|
|
// Unwrap symkey with new symkey
|
|
|
|
var newUnwrappedKey = cryptoSvc.unwrapSymmetricKey(wrappedKey, newPrivKey,
|
|
|
|
"new passphrase", salt, iv);
|
|
|
|
|
|
|
|
// The acid test... Is this unwrapped symkey the same as before?
|
|
|
|
do_check_eq(newUnwrappedKey, unwrappedKey);
|
|
|
|
}
|