summaryrefslogtreecommitdiffhomepage
path: root/packages/browser/src
diff options
context:
space:
mode:
authorakanass <akanass@icloud.com>2021-05-09 19:15:18 +0200
committerakanass <akanass@icloud.com>2021-05-09 19:15:18 +0200
commitd89d5d57d0c618410c958c96d5aee9492348f768 (patch)
tree6a528b6adc6da63216e3a480e6b3d26cce23614d /packages/browser/src
parentd061d213ace42d382fa605a363f3ef2b781a1ce3 (diff)
parent7d015c27d523da2c34495b65b8ca1a10044dad0d (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'packages/browser/src')
-rw-r--r--packages/browser/src/helpers/bufferToUTF8String.ts7
-rw-r--r--packages/browser/src/helpers/utf8StringToBuffer.ts (renamed from packages/browser/src/helpers/toUint8Array.ts)4
-rw-r--r--packages/browser/src/methods/startAssertion.test.ts12
-rw-r--r--packages/browser/src/methods/startAssertion.ts3
-rw-r--r--packages/browser/src/methods/startAttestation.test.ts6
-rw-r--r--packages/browser/src/methods/startAttestation.ts4
6 files changed, 22 insertions, 14 deletions
diff --git a/packages/browser/src/helpers/bufferToUTF8String.ts b/packages/browser/src/helpers/bufferToUTF8String.ts
new file mode 100644
index 0000000..a4b97c9
--- /dev/null
+++ b/packages/browser/src/helpers/bufferToUTF8String.ts
@@ -0,0 +1,7 @@
+/**
+ * A helper method to convert an arbitrary ArrayBuffer, returned from an authenticator, to a UTF-8
+ * string.
+ */
+export default function bufferToUTF8String(value: ArrayBuffer): string {
+ return new TextDecoder('utf-8').decode(value);
+}
diff --git a/packages/browser/src/helpers/toUint8Array.ts b/packages/browser/src/helpers/utf8StringToBuffer.ts
index 1e2243f..32cb717 100644
--- a/packages/browser/src/helpers/toUint8Array.ts
+++ b/packages/browser/src/helpers/utf8StringToBuffer.ts
@@ -1,7 +1,7 @@
/**
- * A helper method to convert an arbitrary string sent from the server to a Uint8Array the
+ * A helper method to convert an arbitrary string sent from the server to an ArrayBuffer the
* authenticator will expect.
*/
-export default function toUint8Array(value: string): Uint8Array {
+export default function utf8StringToBuffer(value: string): ArrayBuffer {
return new TextEncoder().encode(value);
}
diff --git a/packages/browser/src/methods/startAssertion.test.ts b/packages/browser/src/methods/startAssertion.test.ts
index c077219..f005a26 100644
--- a/packages/browser/src/methods/startAssertion.test.ts
+++ b/packages/browser/src/methods/startAssertion.test.ts
@@ -6,7 +6,7 @@ import {
} from '@simplewebauthn/typescript-types';
import supportsWebauthn from '../helpers/supportsWebauthn';
-import toUint8Array from '../helpers/toUint8Array';
+import utf8StringToBuffer from '../helpers/utf8StringToBuffer';
import bufferToBase64URLString from '../helpers/bufferToBase64URLString';
import startAssertion from './startAssertion';
@@ -23,7 +23,7 @@ const mockUserHandle = 'mockUserHandle';
// With ASCII challenge
const goodOpts1: PublicKeyCredentialRequestOptionsJSON = {
- challenge: bufferToBase64URLString(toUint8Array('fizz')),
+ challenge: bufferToBase64URLString(utf8StringToBuffer('fizz')),
allowCredentials: [
{
id: 'C0VGlvYFratUdAV1iCw-ULpUW8E-exHPXQChBfyVeJZCMfjMFcwDmOFgoMUz39LoMtCJUBW8WPlLkGT6q8qTCg',
@@ -36,7 +36,7 @@ const goodOpts1: PublicKeyCredentialRequestOptionsJSON = {
// With UTF-8 challenge
const goodOpts2UTF8: PublicKeyCredentialRequestOptionsJSON = {
- challenge: bufferToBase64URLString(toUint8Array('やれやれだぜ')),
+ challenge: bufferToBase64URLString(utf8StringToBuffer('やれやれだぜ')),
allowCredentials: [],
timeout: 1,
};
@@ -78,7 +78,7 @@ test('should convert options before passing to navigator.credentials.get(...)',
test('should support optional allowCredential', async () => {
await startAssertion({
- challenge: bufferToBase64URLString(toUint8Array('fizz')),
+ challenge: bufferToBase64URLString(utf8StringToBuffer('fizz')),
timeout: 1,
});
@@ -87,7 +87,7 @@ test('should support optional allowCredential', async () => {
test('should convert allow allowCredential to undefined when empty', async () => {
await startAssertion({
- challenge: bufferToBase64URLString(toUint8Array('fizz')),
+ challenge: bufferToBase64URLString(utf8StringToBuffer('fizz')),
timeout: 1,
allowCredentials: [],
});
@@ -120,7 +120,7 @@ test('should return base64url-encoded response values', async done => {
expect(response.response.authenticatorData).toEqual('bW9ja0F1dGhlbnRpY2F0b3JEYXRh');
expect(response.response.clientDataJSON).toEqual('bW9ja0NsaWVudERhdGFKU09O');
expect(response.response.signature).toEqual('bW9ja1NpZ25hdHVyZQ');
- expect(response.response.userHandle).toEqual('bW9ja1VzZXJIYW5kbGU');
+ expect(response.response.userHandle).toEqual('mockUserHandle');
done();
});
diff --git a/packages/browser/src/methods/startAssertion.ts b/packages/browser/src/methods/startAssertion.ts
index fa25f47..786d55b 100644
--- a/packages/browser/src/methods/startAssertion.ts
+++ b/packages/browser/src/methods/startAssertion.ts
@@ -6,6 +6,7 @@ import {
import bufferToBase64URLString from '../helpers/bufferToBase64URLString';
import base64URLStringToBuffer from '../helpers/base64URLStringToBuffer';
+import bufferToUTF8String from '../helpers/bufferToUTF8String';
import supportsWebauthn from '../helpers/supportsWebauthn';
import toPublicKeyCredentialDescriptor from '../helpers/toPublicKeyCredentialDescriptor';
@@ -46,7 +47,7 @@ export default async function startAssertion(
let userHandle = undefined;
if (response.userHandle) {
- userHandle = bufferToBase64URLString(response.userHandle);
+ userHandle = bufferToUTF8String(response.userHandle);
}
// Convert values to base64 to make it easier to send back to the server
diff --git a/packages/browser/src/methods/startAttestation.test.ts b/packages/browser/src/methods/startAttestation.test.ts
index b4cfa52..244a4d2 100644
--- a/packages/browser/src/methods/startAttestation.test.ts
+++ b/packages/browser/src/methods/startAttestation.test.ts
@@ -5,7 +5,7 @@ import {
PublicKeyCredentialCreationOptionsJSON,
} from '@simplewebauthn/typescript-types';
-import toUint8Array from '../helpers/toUint8Array';
+import utf8StringToBuffer from '../helpers/utf8StringToBuffer';
import supportsWebauthn from '../helpers/supportsWebauthn';
import bufferToBase64URLString from '../helpers/bufferToBase64URLString';
@@ -20,7 +20,7 @@ const mockAttestationObject = 'mockAtte';
const mockClientDataJSON = 'mockClie';
const goodOpts1: PublicKeyCredentialCreationOptionsJSON = {
- challenge: bufferToBase64URLString(toUint8Array('fizz')),
+ challenge: bufferToBase64URLString(utf8StringToBuffer('fizz')),
attestation: 'direct',
pubKeyCredParams: [
{
@@ -90,7 +90,7 @@ test('should return base64url-encoded response values', async done => {
return new Promise(resolve => {
resolve({
id: 'foobar',
- rawId: toUint8Array('foobar'),
+ rawId: utf8StringToBuffer('foobar'),
response: {
attestationObject: Buffer.from(mockAttestationObject, 'ascii'),
clientDataJSON: Buffer.from(mockClientDataJSON, 'ascii'),
diff --git a/packages/browser/src/methods/startAttestation.ts b/packages/browser/src/methods/startAttestation.ts
index 22ebe64..379e295 100644
--- a/packages/browser/src/methods/startAttestation.ts
+++ b/packages/browser/src/methods/startAttestation.ts
@@ -4,7 +4,7 @@ import {
AttestationCredentialJSON,
} from '@simplewebauthn/typescript-types';
-import toUint8Array from '../helpers/toUint8Array';
+import utf8StringToBuffer from '../helpers/utf8StringToBuffer';
import bufferToBase64URLString from '../helpers/bufferToBase64URLString';
import base64URLStringToBuffer from '../helpers/base64URLStringToBuffer';
import supportsWebauthn from '../helpers/supportsWebauthn';
@@ -28,7 +28,7 @@ export default async function startAttestation(
challenge: base64URLStringToBuffer(creationOptionsJSON.challenge),
user: {
...creationOptionsJSON.user,
- id: toUint8Array(creationOptionsJSON.user.id),
+ id: utf8StringToBuffer(creationOptionsJSON.user.id),
},
excludeCredentials: creationOptionsJSON.excludeCredentials.map(toPublicKeyCredentialDescriptor),
};