michael@0: let WeaveCryptoModule = Cu.import("resource://services-crypto/WeaveCrypto.js"); michael@0: michael@0: let cryptoSvc = new WeaveCrypto(); michael@0: michael@0: function run_test() { michael@0: if (this.gczeal) { michael@0: _("Running crypto random tests with gczeal(2)."); michael@0: gczeal(2); michael@0: } michael@0: michael@0: // Test salt generation. michael@0: var salt; michael@0: michael@0: salt = cryptoSvc.generateRandomBytes(0); michael@0: do_check_eq(salt.length, 0); michael@0: salt = cryptoSvc.generateRandomBytes(1); michael@0: do_check_eq(salt.length, 4); michael@0: salt = cryptoSvc.generateRandomBytes(2); michael@0: do_check_eq(salt.length, 4); michael@0: salt = cryptoSvc.generateRandomBytes(3); michael@0: do_check_eq(salt.length, 4); michael@0: salt = cryptoSvc.generateRandomBytes(4); michael@0: do_check_eq(salt.length, 8); michael@0: salt = cryptoSvc.generateRandomBytes(8); michael@0: do_check_eq(salt.length, 12); michael@0: michael@0: // sanity check to make sure salts seem random michael@0: var salt2 = cryptoSvc.generateRandomBytes(8); michael@0: do_check_eq(salt2.length, 12); michael@0: do_check_neq(salt, salt2); michael@0: michael@0: salt = cryptoSvc.generateRandomBytes(1024); michael@0: do_check_eq(salt.length, 1368); michael@0: salt = cryptoSvc.generateRandomBytes(16); michael@0: do_check_eq(salt.length, 24); michael@0: michael@0: michael@0: // Test random key generation michael@0: var keydata, keydata2, iv; michael@0: michael@0: keydata = cryptoSvc.generateRandomKey(); michael@0: do_check_eq(keydata.length, 44); michael@0: keydata2 = cryptoSvc.generateRandomKey(); michael@0: do_check_neq(keydata, keydata2); // sanity check for randomness michael@0: iv = cryptoSvc.generateRandomIV(); michael@0: do_check_eq(iv.length, 24); michael@0: michael@0: cryptoSvc.algorithm = WeaveCryptoModule.AES_256_CBC; michael@0: keydata = cryptoSvc.generateRandomKey(); michael@0: do_check_eq(keydata.length, 44); michael@0: keydata2 = cryptoSvc.generateRandomKey(); michael@0: do_check_neq(keydata, keydata2); // sanity check for randomness michael@0: iv = cryptoSvc.generateRandomIV(); michael@0: do_check_eq(iv.length, 24); michael@0: michael@0: if (this.gczeal) michael@0: gczeal(0); michael@0: }