createcredential-prf.https.html (2229B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>navigator.credentials.create() prf extension tests with authenticator support</title> 4 <meta name="timeout" content="long"> 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=helpers.js></script> 10 <body></body> 11 <script> 12 standardSetup(function() { 13 "use strict"; 14 15 promise_test(async t => { 16 const credential = await createCredential({ 17 options: { 18 publicKey: { 19 extensions: { 20 prf: {}, 21 }, 22 }, 23 }, 24 }); 25 assert_true(credential.getClientExtensionResults().prf.enabled); 26 }, "navigator.credentials.create() with prf requested"); 27 28 promise_test(async t => { 29 const promise = createCredential({ 30 options: { 31 publicKey: { 32 extensions: { 33 prf: {evalByCredential: {"Zm9v": {first: new Uint8Array([1,2,3,4]).buffer}}}, 34 }, 35 }, 36 }, 37 }); 38 return promise_rejects_dom(t, "NotSupportedError", promise); 39 }, "navigator.credentials.create() with nonsensical evalByCredential"); 40 41 promise_test(async t => { 42 // Evaluating the PRF at creation time is not supported by security keys 43 // because it cannot be expressed with the CTAP2 hmac-secret extension, 44 // but it is defined at the WebAuthn level. 45 46 const credential = await createCredential({ 47 options: { 48 publicKey: { 49 extensions: { 50 prf: {eval: {first: new Uint8Array([1,2,3,4]).buffer}}, 51 }, 52 }, 53 }, 54 }); 55 assert_true(credential.getClientExtensionResults().prf.enabled, 56 "prf.enabled"); 57 assert_true('results' in credential.getClientExtensionResults().prf, 58 "has results"); 59 assert_true('first' in credential.getClientExtensionResults().prf.results, 60 "has results.first"); 61 assert_equals( 62 credential.getClientExtensionResults().prf.results.first.byteLength, 32, 63 "correct length output"); 64 }, "navigator.credentials.create() with eval"); 65 }, { 66 protocol: "ctap2_1", 67 extensions: ["prf"], 68 }); 69 </script>