tor-browser

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

sframe-keys.https.html (3392B)


      1 <!doctype html>
      2 <html>
      3    <head>
      4        <meta charset="utf-8">
      5 <script src="/resources/testharness.js"></script>
      6        <script src="/resources/testharnessreport.js"></script>
      7        <script src=/resources/testdriver.js></script>
      8 <script src=/resources/testdriver-vendor.js></script>
      9 <script src='../mediacapture-streams/permission-helper.js'></script>
     10    </head>
     11    <body>
     12        <video id="audio" autoplay playsInline></video>
     13        <script src ="routines.js"></script>
     14        <script>
     15 let sender, receiver;
     16 let key1, key2, key3, key4;
     17 
     18 promise_test(async (test) => {
     19    const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
     20    const transform = new SFrameTransform;
     21 
     22    await transform.setEncryptionKey(key);
     23    await transform.setEncryptionKey(key, 1);
     24 
     25    await transform.setEncryptionKey(key, BigInt('18446744073709551613'));
     26    await transform.setEncryptionKey(key, BigInt('18446744073709551614'));
     27    await transform.setEncryptionKey(key, BigInt('18446744073709551615'));
     28    await transform.setEncryptionKey(key, BigInt('18446744073709551616')).then(assert_unreached, (e) => {
     29        assert_true(e instanceof RangeError);
     30        assert_equals(e.message, "Not a 64 bits integer");
     31    });
     32 }, "Passing various key IDs");
     33 
     34 promise_test(async (test) => {
     35    key1 = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
     36    key2 = await crypto.subtle.importKey("raw", new Uint8Array([144, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
     37    key3 = await crypto.subtle.importKey("raw", new Uint8Array([145, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
     38    key4 = await crypto.subtle.importKey("raw", new Uint8Array([146, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
     39 
     40    await setMediaPermission("granted", ["microphone"]);
     41    const localStream = await navigator.mediaDevices.getUserMedia({audio: true});
     42    const stream = await new Promise((resolve, reject) => {
     43        const connections = createConnections(test, (firstConnection) => {
     44            sender = firstConnection.addTrack(localStream.getAudioTracks()[0], localStream);
     45            let transform = new SFrameTransform;
     46            transform.setEncryptionKey(key1);
     47            sender.transform = transform;
     48        }, (secondConnection) => {
     49            secondConnection.ontrack = (trackEvent) => {
     50                let transform = new SFrameTransform;
     51                transform.setEncryptionKey(key1);
     52                transform.setEncryptionKey(key2);
     53                transform.setEncryptionKey(key3, 1000);
     54                transform.setEncryptionKey(key4, BigInt('18446744073709551615'));
     55                receiver = trackEvent.receiver;
     56                receiver.transform = transform;
     57                resolve(trackEvent.streams[0]);
     58            };
     59        });
     60 
     61        test.step_timeout(() => reject("Test timed out"), 5000);
     62    });
     63 
     64    audio.srcObject = stream;
     65    await audio.play();
     66 }, "Audio exchange with SFrame setup");
     67        </script>
     68    </body>
     69 </html>