summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webauthn/idlharness-manual.https.window.js
blob: 884702753d84ba92f85204f24227d2ed7b44cce7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// META: timeout=long
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: script=helpers.js

// https://w3c.github.io/webauthn/

'use strict';

idl_test(
  ['webauthn'],
  ['credential-management'],
  async idlArray => {
    idlArray.add_untested_idls("[Exposed=(Window,Worker)] interface ArrayBuffer {};");

    idlArray.add_objects({
      PublicKeyCredential: ['cred', 'assertion'],
      AuthenticatorAttestationResponse: ['cred.response'],
      AuthenticatorAssertionResponse: ['assertion.response']
    });

    const challengeBytes = new Uint8Array(16);
    window.crypto.getRandomValues(challengeBytes);

    self.cred = await Promise.race([
      new Promise((_, reject) => window.setTimeout(() => {
        reject('Timed out waiting for user to touch security key')
      }, 3000)),
      createCredential({
        options: {
          publicKey: {
            timeout: 3000,
            user: {
              id: new Uint8Array(16),
            },
          }
        }
      }),
    ]);

    self.assertion = await navigator.credentials.get({
      publicKey: {
        timeout: 3000,
        allowCredentials: [{
          id: cred.rawId,
          transports: ["usb", "nfc", "ble"],
          type: "public-key"
        }],
        challenge: challengeBytes,
      }
    });
  }
);