| // META: script=/resources/testdriver.js |
| // META: script=/resources/testdriver-vendor.js |
| // META: script=/resources/utils.js |
| // META: script=helpers.js |
| |
| // The string "test" as ASCII bytes and base64url-encoded. |
| const test_bytes = new Uint8Array([0x74, 0x65, 0x73, 0x74]); |
| const test_b64 = "dGVzdA"; |
| |
| test(() => { |
| let actual = PublicKeyCredential.parseCreationOptionsFromJSON({ |
| rp: { |
| id: "example.com", |
| name: "Example Inc", |
| }, |
| user: { |
| id: test_b64, |
| name: "test@example.com", |
| displayName: "test user" |
| }, |
| challenge: test_b64, |
| pubKeyCredParams: [ |
| { |
| type: "public-key", |
| alg: -7, |
| }, |
| ], |
| }); |
| let expected = { |
| rp: { |
| id: "example.com", |
| name: "Example Inc", |
| }, |
| user: { |
| id: test_bytes, |
| name: "test@example.com", |
| displayName: "test user" |
| }, |
| challenge: test_bytes, |
| pubKeyCredParams: [ |
| { |
| type: "public-key", |
| alg: -7, |
| }, |
| ], |
| // The spec defaults the following fields: |
| attestation: "none", |
| hints: [], |
| }; |
| |
| assertJsonEquals(actual.rp, expected.rp); |
| assert_true(userEntityEquals(actual.user, expected.user)); |
| assert_true(bytesEqual(actual.challenge, expected.challenge)); |
| assertJsonEquals(actual.pubKeyCredParams, expected.pubKeyCredParams, "pk"); |
| assert_equals(actual.attestation, expected.attestation); |
| assertJsonEquals(actual.hints, expected.hints); |
| }, "parseCreationOptionsFromJSON()"); |
| |
| test(() => { |
| assert_throws_dom("EncodingError", () => { |
| PublicKeyCredential.parseCreationOptionsFromJSON({ |
| rp: { |
| id: "example.com", |
| name: "Example Inc", |
| }, |
| user: { |
| id: "not valid base64url", |
| name: "test@example.com", |
| displayName: "test user" |
| }, |
| challenge: "not valid base64url", |
| pubKeyCredParams: [ |
| { |
| type: "public-key", |
| alg: -7, |
| }, |
| ], |
| }); |
| }); |
| }, "parseCreationOptionsFromJSON() throws EncodingError"); |
| |
| test(() => { |
| let actual = PublicKeyCredential.parseCreationOptionsFromJSON({ |
| rp: { |
| id: "example.com", |
| name: "Example Inc", |
| }, |
| user: { |
| id: test_b64, |
| name: "test@example.com", |
| displayName: "test user" |
| }, |
| challenge: test_b64, |
| pubKeyCredParams: [ |
| { |
| type: "public-key", |
| alg: -7, |
| }, |
| ], |
| extensions: { |
| appid: "app id", |
| appidExclude: "app id exclude", |
| hamcCreateSecret: true, |
| uvm: true, |
| credentialProtectionPolicy: "cred protect", |
| enforceCredentialProtectionPolicy: true, |
| minPinLength: true, |
| credProps: true, |
| largeBlob: { |
| support: "large blob support", |
| read: true, |
| write: test_b64, |
| }, |
| credBlob: test_b64, |
| getCredBlob: true, |
| supplementalPubKeys: { |
| scopes: ["spk scope"], |
| attestation: "directest", |
| attestationFormats: ["asn2"], |
| }, |
| prf: { |
| eval: { |
| first: test_b64, |
| second: test_b64, |
| }, |
| evalByCredential: { |
| "test cred": { |
| first: test_b64, |
| second: test_b64, |
| }, |
| }, |
| }, |
| }, |
| }); |
| let expected = { |
| rp: { |
| id: "example.com", |
| name: "Example Inc", |
| }, |
| user: { |
| id: test_bytes, |
| name: "test@example.com", |
| displayName: "test user" |
| }, |
| challenge: test_bytes, |
| pubKeyCredParams: [ |
| { |
| type: "public-key", |
| alg: -7, |
| }, |
| ], |
| extensions: { |
| appid: "app id", |
| appidExclude: "app id exclude", |
| hamcCreateSecret: true, |
| uvm: true, |
| credentialProtectionPolicy: "cred protect", |
| enforceCredentialProtectionPolicy: true, |
| minPinLength: true, |
| credProps: true, |
| largeBlob: { |
| support: "large blob support", |
| read: true, |
| write: test_bytes, |
| }, |
| credBlob: test_bytes, |
| getCredBlob: true, |
| supplementalPubKeys: { |
| scopes: ["spk scope"], |
| attestation: "directest", |
| attestationFormats: ["asn2"], |
| }, |
| prf: { |
| eval: { |
| first: test_bytes, |
| second: test_bytes, |
| }, |
| evalByCredential: { |
| "test cred": { |
| first: test_bytes, |
| second: test_bytes, |
| }, |
| }, |
| }, |
| // The spec defaults the following fields: |
| attestation: "none", |
| hints: [], |
| }, |
| }; |
| |
| assert_equals(actual.extensions.appid, expected.extensions.appid); |
| assert_equals(actual.extensions.appidExclude, expected.extensions.appidExclude); |
| assert_equals(actual.extensions.hmacCreateSecret, expected.extensions.hmacCreateSecret); |
| assert_equals(actual.extensions.uvm, expected.extensions.uvm); |
| assert_equals(actual.extensions.credentialProtectionPolicy, expected.extensions.credentialProtectionPolicy); |
| assert_equals(actual.extensions.enforceCredentialProtectionPolicy, expected.extensions.enforceCredentialProtectionPolicy); |
| assert_equals(actual.extensions.minPinLength, expected.extensions.minPinLength); |
| assert_equals(actual.extensions.credProps, expected.extensions.credProps); |
| assert_equals(actual.extensions.largeBlob.support, expected.extensions.largeBlob.support, "X"); |
| assert_equals(actual.extensions.largeBlob.read, expected.extensions.largeBlob.read); |
| |
| assert_true(bytesEqual(actual.extensions.largeBlob.write, expected.extensions.largeBlob.write), "XX"); |
| |
| assert_true(bytesEqual(actual.extensions.credBlob, expected.extensions.credBlob), "XXX"); |
| |
| assert_equals(actual.extensions.getCredBlob, expected.extensions.getCredBlob); |
| assertJsonEquals(actual.extensions.supplementalPubKeys, expected.extensions.supplementalPubKeys); |
| let prfValuesEquals = (a, b) => { |
| return bytesEqual(a.first, b.first) && bytesEqual(a.second, b.second); |
| }; |
| assert_true(prfValuesEquals(actual.extensions.prf.eval, expected.extensions.prf.eval), "prf eval"); |
| assert_true(prfValuesEquals(actual.extensions.prf.evalByCredential["test cred"], expected.extensions.prf.evalByCredential["test cred"]), "prf ebc"); |
| }, "parseCreationOptionsFromJSON() with extensions"); |