tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

argon2.js (2110B)


      1 function define_tests() {
      2  var subtle = self.crypto.subtle;
      3 
      4  var testData = getTestData();
      5  var testVectors = testData.testVectors;
      6 
      7  return setUpBaseKeys().then(function (allKeys) {
      8    var baseKeys = allKeys.baseKeys;
      9 
     10    testVectors.forEach(function (vector) {
     11      var algorithmName = vector.algorithm;
     12      var params = vector.params;
     13      var expected = vector.expected;
     14 
     15      var testName = algorithmName + ' deriveBits';
     16 
     17      // Test deriveBits
     18      subsetTest(
     19        promise_test,
     20        function (test) {
     21          var algorithm = Object.assign({ name: algorithmName }, params);
     22          return subtle
     23            .deriveBits(algorithm, baseKeys[algorithmName], 256)
     24            .then(
     25              function (derivation) {
     26                assert_true(
     27                  equalBuffers(derivation, expected),
     28                  'Derived correct key'
     29                );
     30              },
     31              function (err) {
     32                assert_unreached(
     33                  'deriveBits failed with error ' +
     34                    err.name +
     35                    ': ' +
     36                    err.message
     37                );
     38              }
     39            );
     40        },
     41        testName
     42      );
     43    });
     44  });
     45 
     46  function setUpBaseKeys() {
     47    var promises = [];
     48    var baseKeys = {};
     49 
     50    testVectors.forEach(function (vector) {
     51      var algorithmName = vector.algorithm;
     52      var password = vector.password;
     53 
     54      // Key for normal operations
     55      promises.push(
     56        subtle
     57          .importKey('raw-secret', password, algorithmName, false, [
     58            'deriveBits',
     59          ])
     60          .then(function (key) {
     61            baseKeys[algorithmName] = key;
     62          })
     63      );
     64    });
     65 
     66    return Promise.all(promises).then(function () {
     67      return {
     68        baseKeys: baseKeys,
     69      };
     70    });
     71  }
     72 }
     73 
     74 function equalBuffers(a, b) {
     75  if (a.byteLength !== b.byteLength) {
     76    return false;
     77  }
     78 
     79  var aView = new Uint8Array(a);
     80  var bView = new Uint8Array(b);
     81 
     82  for (var i = 0; i < aView.length; i++) {
     83    if (aView[i] !== bView[i]) {
     84      return false;
     85    }
     86  }
     87 
     88  return true;
     89 }