tor-browser

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

getRandomValues.any.js (2584B)


      1 // Step 1.
      2 test(function() {
      3    assert_throws_dom("TypeMismatchError", function() {
      4        self.crypto.getRandomValues(new Float16Array(6))
      5    }, "Float16Array")
      6 
      7    assert_throws_dom("TypeMismatchError", function() {
      8        const len = 65536 / Float16Array.BYTES_PER_ELEMENT + 1;
      9        self.crypto.getRandomValues(new Float16Array(len));
     10    }, "Float16Array (too long)")
     11 }, "Float16 arrays");
     12 
     13 test(function() {
     14    assert_throws_dom("TypeMismatchError", function() {
     15        self.crypto.getRandomValues(new Float32Array(6))
     16    }, "Float32Array")
     17    assert_throws_dom("TypeMismatchError", function() {
     18        self.crypto.getRandomValues(new Float64Array(6))
     19    }, "Float64Array")
     20 
     21    assert_throws_dom("TypeMismatchError", function() {
     22        const len = 65536 / Float32Array.BYTES_PER_ELEMENT + 1;
     23        self.crypto.getRandomValues(new Float32Array(len));
     24    }, "Float32Array (too long)")
     25    assert_throws_dom("TypeMismatchError", function() {
     26        const len = 65536 / Float64Array.BYTES_PER_ELEMENT + 1;
     27        self.crypto.getRandomValues(new Float64Array(len))
     28    }, "Float64Array (too long)")
     29 }, "Float arrays");
     30 
     31 test(function() {
     32    assert_throws_dom("TypeMismatchError", function() {
     33        self.crypto.getRandomValues(new DataView(new ArrayBuffer(6)))
     34    }, "DataView")
     35 
     36    assert_throws_dom("TypeMismatchError", function() {
     37        self.crypto.getRandomValues(new DataView(new ArrayBuffer(65536 + 1)))
     38    }, "DataView (too long)")
     39 }, "DataView");
     40 
     41 const arrays = [
     42    'Int8Array',
     43    'Int16Array',
     44    'Int32Array',
     45    'BigInt64Array',
     46    'Uint8Array',
     47    'Uint8ClampedArray',
     48    'Uint16Array',
     49    'Uint32Array',
     50    'BigUint64Array',
     51 ];
     52 
     53 for (const array of arrays) {
     54    const ctor = globalThis[array];
     55 
     56    test(function() {
     57        assert_equals(self.crypto.getRandomValues(new ctor(8)).constructor,
     58                      ctor, "crypto.getRandomValues(new " + array + "(8))")
     59    }, "Integer array: " + array);
     60 
     61    test(function() {
     62        const maxlength = 65536 / ctor.BYTES_PER_ELEMENT;
     63        assert_throws_quotaexceedederror(() => {
     64            self.crypto.getRandomValues(new ctor(maxlength + 1));
     65        }, null, null, "crypto.getRandomValues length over 65536");
     66    }, "Large length: " + array);
     67 
     68    test(function() {
     69        assert_true(self.crypto.getRandomValues(new ctor(0)).length == 0)
     70    }, "Null arrays: " + array);
     71 
     72    test(function() {
     73        class Buffer extends ctor {}
     74        // Must not throw for the test to pass
     75        self.crypto.getRandomValues(new Buffer(256));
     76    }, "Subclass of " + array);
     77 }