<!DOCTYPE html>
<meta charset="utf-8">
<title>navigator.credentials.create() prf extension tests with authenticator support</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src=helpers.js></script>
<body></body>
<script>
standardSetup(function() {
  "use strict";

  promise_test(async t => {
    const credential = await createCredential({
      options: {
        publicKey: {
          extensions: {
            prf: {},
          },
        },
      },
    });
    assert_true(credential.getClientExtensionResults().prf.enabled);
  }, "navigator.credentials.create() with prf requested");

  promise_test(async t => {
    const promise = createCredential({
      options: {
        publicKey: {
          extensions: {
            prf: {evalByCredential: {"Zm9v": {first: new Uint8Array([1,2,3,4]).buffer}}},
          },
        },
      },
    });
    return promise_rejects_dom(t, "NotSupportedError", promise);
  }, "navigator.credentials.create() with nonsensical evalByCredential");

  promise_test(async t => {
    // Evaluating the PRF at creation time is not supported by security keys
    // because it cannot be expressed with the CTAP2 hmac-secret extension,
    // but it is defined at the WebAuthn level.

    const credential = await createCredential({
      options: {
        publicKey: {
          extensions: {
            prf: {eval: {first: new Uint8Array([1,2,3,4]).buffer}},
          },
        },
      },
    });
    assert_true(credential.getClientExtensionResults().prf.enabled,
                "prf.enabled");
    assert_true('results' in credential.getClientExtensionResults().prf,
                "has results");
    assert_true('first' in credential.getClientExtensionResults().prf.results,
                "has results.first");
    assert_equals(
        credential.getClientExtensionResults().prf.results.first.byteLength, 32,
        "correct length output");
  }, "navigator.credentials.create() with eval");
}, {
  protocol: "ctap2_1",
  extensions: ["prf"],
});
</script>
