| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>WebAuthn getPublicKey</title> |
| <meta name="timeout" content="long"> |
| <link rel="help" href="https://w3c.github.io/webauthn/#sctn-public-key-easy"> |
| <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> |
| <script src="resources/utils.js"></script> |
| <script> |
| function testGetPublicKey() { |
| standardSetup(function() { |
| promise_test(async t => { |
| let cred = await createCredential(); |
| const response = cred.response; |
| assert_equals(response.getPublicKeyAlgorithm(), |
| cose_alg_ECDSA_w_SHA256); |
| |
| const attestationObject = |
| new Cbor(response.attestationObject).getCBOR(); |
| const claimedAuthDataHex = uint8ArrayToHex( |
| new Uint8Array(response.getAuthenticatorData())); |
| const actualAuthDataHex = uint8ArrayToHex(attestationObject.authData); |
| assert_equals(actualAuthDataHex, claimedAuthDataHex); |
| |
| // Check that the x and y coordinates of the public key appear in |
| // the claimed SPKI, at least. |
| const spkiHex = uint8ArrayToHex( |
| new Uint8Array(response.getPublicKey())); |
| const authData = parseAuthenticatorData(attestationObject.authData); |
| const pubKey = authData.attestedCredentialData.credentialPublicKey; |
| const xHex = uint8ArrayToHex(pubKey.x); |
| const yHex = uint8ArrayToHex(pubKey.y); |
| assert_not_equals(-1, spkiHex.indexOf(xHex)); |
| assert_not_equals(-1, spkiHex.indexOf(yHex)); |
| |
| t.done(); |
| }); |
| }); |
| } |
| |
| testGetPublicKey(); |
| /* JSHINT */ |
| /* globals standardSetup, createCredential */ |
| </script> |
| </head> |
| <body></body> |
| </html> |