services/crypto/tests/unit/test_crypto_deriveKey.js

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 var btoa;
     3 function test_derive(cryptoSvc) {
     4   // Extracted from test_utils_deriveKey.
     5   let pp = "secret phrase";
     6   let salt = "RE5YUHpQcGl3bg==";   // btoa("DNXPzPpiwn")
     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==");
    13   // Test different key lengths.
    14   k = cryptoSvc.deriveKeyFromPassphrase(pp, salt, 32);
    15   do_check_eq(32, k.length);
    16   let encKey = btoa(k);
    18   // Test via encryption.
    19   let iv = cryptoSvc.generateRandomIV();
    20   do_check_eq(cryptoSvc.decrypt(cryptoSvc.encrypt("bacon", encKey, iv), encKey, iv), "bacon");
    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 }
    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 }

mercurial