michael@0: var btoa; michael@0: michael@0: function test_derive(cryptoSvc) { michael@0: // Extracted from test_utils_deriveKey. michael@0: let pp = "secret phrase"; michael@0: let salt = "RE5YUHpQcGl3bg=="; // btoa("DNXPzPpiwn") michael@0: michael@0: // 16-byte, extract key data. michael@0: let k = cryptoSvc.deriveKeyFromPassphrase(pp, salt, 16); michael@0: do_check_eq(16, k.length); michael@0: do_check_eq(btoa(k), "d2zG0d2cBfXnRwMUGyMwyg=="); michael@0: michael@0: // Test different key lengths. michael@0: k = cryptoSvc.deriveKeyFromPassphrase(pp, salt, 32); michael@0: do_check_eq(32, k.length); michael@0: let encKey = btoa(k); michael@0: michael@0: // Test via encryption. michael@0: let iv = cryptoSvc.generateRandomIV(); michael@0: do_check_eq(cryptoSvc.decrypt(cryptoSvc.encrypt("bacon", encKey, iv), encKey, iv), "bacon"); michael@0: michael@0: // Test default length (32). michael@0: k = cryptoSvc.deriveKeyFromPassphrase(pp, salt, null); michael@0: do_check_eq(32, k.length); michael@0: do_check_eq(encKey, btoa(k)); michael@0: } michael@0: michael@0: function run_test() { michael@0: let cryptoSvc; michael@0: try { michael@0: let backstagePass = Components.utils.import("resource://services-crypto/WeaveCrypto.js"); michael@0: btoa = backstagePass.btoa; michael@0: } catch (ex) { michael@0: _("Aborting test: no WeaveCrypto.js."); michael@0: return; michael@0: } michael@0: test_derive(new WeaveCrypto()); michael@0: }