summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMatthew Miller <matthew@millerti.me>2021-08-22 15:53:06 -0700
committerMatthew Miller <matthew@millerti.me>2021-08-22 15:53:06 -0700
commit90cfeeb2f7743aa5089d581ce83db672b7f7765c (patch)
tree70989a2893465087aed756a8ae65e305e5a04687
parent1a832c613d69d58fe0ee046976db60e1e5996fa6 (diff)
Add tests for parseAuthenticatorData
-rw-r--r--packages/server/src/helpers/parseAuthenticatorData.test.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/server/src/helpers/parseAuthenticatorData.test.ts b/packages/server/src/helpers/parseAuthenticatorData.test.ts
new file mode 100644
index 0000000..3bba4b6
--- /dev/null
+++ b/packages/server/src/helpers/parseAuthenticatorData.test.ts
@@ -0,0 +1,53 @@
+import cbor from 'cbor';
+
+import parseAuthenticatorData from './parseAuthenticatorData';
+
+// Grabbed this from a Conformance test, contains attestation data
+const authDataWithAT = Buffer.from(
+ 'SZYN5YgOjGh0NBcPZHZgW4/krrmihjLHmVzzuoMdl2NBAAAAJch83ZdWwUm4niTLNjZU81AAIHa7Ksm5br3hAh3UjxP9+4rqu8BEsD+7SZ2xWe1/yHv6pAEDAzkBACBZAQDcxA7Ehs9goWB2Hbl6e9v+aUub9rvy2M7Hkvf+iCzMGE63e3sCEW5Ru33KNy4um46s9jalcBHtZgtEnyeRoQvszis+ws5o4Da0vQfuzlpBmjWT1dV6LuP+vs9wrfObW4jlA5bKEIhv63+jAxOtdXGVzo75PxBlqxrmrr5IR9n8Fw7clwRsDkjgRHaNcQVbwq/qdNwU5H3hZKu9szTwBS5NGRq01EaDF2014YSTFjwtAmZ3PU1tcO/QD2U2zg6eB5grfWDeAJtRE8cbndDWc8aLL0aeC37Q36+TVsGe6AhBgHEw6eO3I3NW5r9v/26CqMPBDwmEundeq1iGyKfMloobIUMBAAE=',
+ 'base64',
+);
+// Grabbed this from a Conformance test, contains extension data
+const authDataWithED = Buffer.from(
+ 'SZYN5YgOjGh0NBcPZHZgW4/krrmihjLHmVzzuoMdl2OBAAAAjaFxZXhhbXBsZS5leHRlbnNpb254dlRoaXMgaXMgYW4gZXhhbXBsZSBleHRlbnNpb24hIElmIHlvdSByZWFkIHRoaXMgbWVzc2FnZSwgeW91IHByb2JhYmx5IHN1Y2Nlc3NmdWxseSBwYXNzaW5nIGNvbmZvcm1hbmNlIHRlc3RzLiBHb29kIGpvYiE=',
+ 'base64',
+);
+
+test('should parse flags', () => {
+ const parsed = parseAuthenticatorData(authDataWithED);
+
+ const { flags } = parsed;
+
+ expect(flags.up).toEqual(true);
+ expect(flags.uv).toEqual(false);
+ expect(flags.at).toEqual(false);
+ expect(flags.ed).toEqual(true);
+});
+
+test('should parse attestation data', () => {
+ const parsed = parseAuthenticatorData(authDataWithAT);
+
+ const { credentialID, credentialPublicKey, aaguid } = parsed;
+
+ expect(credentialID?.toString('base64')).toEqual('drsqybluveECHdSPE/37iuq7wESwP7tJnbFZ7X/Ie/o=');
+ expect(credentialPublicKey?.toString('base64')).toEqual(
+ 'pAEDAzkBACBZAQDcxA7Ehs9goWB2Hbl6e9v+aUub9rvy2M7Hkvf+iCzMGE63e3sCEW5Ru33KNy4um46s9jalcBHtZgtEnyeRoQvszis+ws5o4Da0vQfuzlpBmjWT1dV6LuP+vs9wrfObW4jlA5bKEIhv63+jAxOtdXGVzo75PxBlqxrmrr5IR9n8Fw7clwRsDkjgRHaNcQVbwq/qdNwU5H3hZKu9szTwBS5NGRq01EaDF2014YSTFjwtAmZ3PU1tcO/QD2U2zg6eB5grfWDeAJtRE8cbndDWc8aLL0aeC37Q36+TVsGe6AhBgHEw6eO3I3NW5r9v/26CqMPBDwmEundeq1iGyKfMloobIUMBAAE=',
+ );
+ expect(aaguid?.toString('base64')).toEqual('yHzdl1bBSbieJMs2NlTzUA==');
+});
+
+test('should parse extension data', () => {
+ expect.assertions(1);
+
+ const parsed = parseAuthenticatorData(authDataWithED);
+
+ const { extensionsDataBuffer } = parsed;
+
+ if (extensionsDataBuffer) {
+ const decoded = cbor.decodeFirstSync(extensionsDataBuffer);
+ expect(decoded).toEqual({
+ 'example.extension':
+ 'This is an example extension! If you read this message, you probably successfully passing conformance tests. Good job!',
+ });
+ }
+});