|
1 var btoa; |
|
2 |
|
3 function test_derive(cryptoSvc) { |
|
4 // Extracted from test_utils_deriveKey. |
|
5 let pp = "secret phrase"; |
|
6 let salt = "RE5YUHpQcGl3bg=="; // btoa("DNXPzPpiwn") |
|
7 |
|
8 // 16-byte, extract key data. |
|
9 let k = cryptoSvc.deriveKeyFromPassphrase(pp, salt, 16); |
|
10 do_check_eq(16, k.length); |
|
11 do_check_eq(btoa(k), "d2zG0d2cBfXnRwMUGyMwyg=="); |
|
12 |
|
13 // Test different key lengths. |
|
14 k = cryptoSvc.deriveKeyFromPassphrase(pp, salt, 32); |
|
15 do_check_eq(32, k.length); |
|
16 let encKey = btoa(k); |
|
17 |
|
18 // Test via encryption. |
|
19 let iv = cryptoSvc.generateRandomIV(); |
|
20 do_check_eq(cryptoSvc.decrypt(cryptoSvc.encrypt("bacon", encKey, iv), encKey, iv), "bacon"); |
|
21 |
|
22 // Test default length (32). |
|
23 k = cryptoSvc.deriveKeyFromPassphrase(pp, salt, null); |
|
24 do_check_eq(32, k.length); |
|
25 do_check_eq(encKey, btoa(k)); |
|
26 } |
|
27 |
|
28 function run_test() { |
|
29 let cryptoSvc; |
|
30 try { |
|
31 let backstagePass = Components.utils.import("resource://services-crypto/WeaveCrypto.js"); |
|
32 btoa = backstagePass.btoa; |
|
33 } catch (ex) { |
|
34 _("Aborting test: no WeaveCrypto.js."); |
|
35 return; |
|
36 } |
|
37 test_derive(new WeaveCrypto()); |
|
38 } |