services/crypto/tests/unit/test_crypto_random.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 let WeaveCryptoModule = Cu.import("resource://services-crypto/WeaveCrypto.js");
     3 let cryptoSvc = new WeaveCrypto();
     5 function run_test() {
     6   if (this.gczeal) {
     7     _("Running crypto random tests with gczeal(2).");
     8     gczeal(2);
     9   }
    11   // Test salt generation.
    12   var salt;
    14   salt = cryptoSvc.generateRandomBytes(0);
    15   do_check_eq(salt.length, 0);
    16   salt = cryptoSvc.generateRandomBytes(1);
    17   do_check_eq(salt.length, 4);
    18   salt = cryptoSvc.generateRandomBytes(2);
    19   do_check_eq(salt.length, 4);
    20   salt = cryptoSvc.generateRandomBytes(3);
    21   do_check_eq(salt.length, 4);
    22   salt = cryptoSvc.generateRandomBytes(4);
    23   do_check_eq(salt.length, 8);
    24   salt = cryptoSvc.generateRandomBytes(8);
    25   do_check_eq(salt.length, 12);
    27   // sanity check to make sure salts seem random
    28   var salt2 = cryptoSvc.generateRandomBytes(8);
    29   do_check_eq(salt2.length, 12);
    30   do_check_neq(salt, salt2);
    32   salt = cryptoSvc.generateRandomBytes(1024);
    33   do_check_eq(salt.length, 1368);
    34   salt = cryptoSvc.generateRandomBytes(16);
    35   do_check_eq(salt.length, 24);
    38   // Test random key generation
    39   var keydata, keydata2, iv;
    41   keydata  = cryptoSvc.generateRandomKey();
    42   do_check_eq(keydata.length, 44);
    43   keydata2 = cryptoSvc.generateRandomKey();
    44   do_check_neq(keydata, keydata2); // sanity check for randomness
    45   iv = cryptoSvc.generateRandomIV();
    46   do_check_eq(iv.length, 24);
    48   cryptoSvc.algorithm = WeaveCryptoModule.AES_256_CBC;
    49   keydata  = cryptoSvc.generateRandomKey();
    50   do_check_eq(keydata.length, 44);
    51   keydata2 = cryptoSvc.generateRandomKey();
    52   do_check_neq(keydata, keydata2); // sanity check for randomness
    53   iv = cryptoSvc.generateRandomIV();
    54   do_check_eq(iv.length, 24);
    56   if (this.gczeal)
    57     gczeal(0);
    58 }

mercurial