summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src/helpers/parseAuthenticatorData.ts
diff options
context:
space:
mode:
authorMatthew Miller <matthew@millerti.me>2021-07-08 20:36:32 -0700
committerMatthew Miller <matthew@millerti.me>2021-07-08 20:36:32 -0700
commit8e008f57c6db23b6b6753d99d90ca537d52281d3 (patch)
tree69dccd3f2fa63aaa100cf25852ae0dbeed39e2ea /packages/server/src/helpers/parseAuthenticatorData.ts
parent499ad79d3cd9661e2c5bf0d9ae51c59e37e38d0d (diff)
Switch to addition assignment for buffer slicing
Diffstat (limited to 'packages/server/src/helpers/parseAuthenticatorData.ts')
-rw-r--r--packages/server/src/helpers/parseAuthenticatorData.ts33
1 files changed, 12 insertions, 21 deletions
diff --git a/packages/server/src/helpers/parseAuthenticatorData.ts b/packages/server/src/helpers/parseAuthenticatorData.ts
index cce6756..9b13195 100644
--- a/packages/server/src/helpers/parseAuthenticatorData.ts
+++ b/packages/server/src/helpers/parseAuthenticatorData.ts
@@ -11,14 +11,11 @@ export default function parseAuthenticatorData(authData: Buffer): ParsedAuthenti
);
}
- let intBuffer = authData;
+ let pointer = 0;
- const rpIdHash = intBuffer.slice(0, 32);
- intBuffer = intBuffer.slice(32);
-
- const flagsBuf = intBuffer.slice(0, 1);
- intBuffer = intBuffer.slice(1);
+ const rpIdHash = authData.slice(pointer, (pointer += 32));
+ const flagsBuf = authData.slice(pointer, (pointer += 1));
const flagsInt = flagsBuf[0];
const flags = {
@@ -29,9 +26,7 @@ export default function parseAuthenticatorData(authData: Buffer): ParsedAuthenti
flagsInt,
};
- const counterBuf = intBuffer.slice(0, 4);
- intBuffer = intBuffer.slice(4);
-
+ const counterBuf = authData.slice(pointer, (pointer += 4));
const counter = counterBuf.readUInt32BE(0);
let aaguid: Buffer | undefined = undefined;
@@ -39,33 +34,29 @@ export default function parseAuthenticatorData(authData: Buffer): ParsedAuthenti
let credentialPublicKey: Buffer | undefined = undefined;
if (flags.at) {
- aaguid = intBuffer.slice(0, 16);
- intBuffer = intBuffer.slice(16);
-
- const credIDLenBuf = intBuffer.slice(0, 2);
- intBuffer = intBuffer.slice(2);
+ aaguid = authData.slice(pointer, (pointer += 16));
+ const credIDLenBuf = authData.slice(pointer, (pointer += 2));
const credIDLen = credIDLenBuf.readUInt16BE(0);
- credentialID = intBuffer.slice(0, credIDLen);
- intBuffer = intBuffer.slice(credIDLen);
+ credentialID = authData.slice(pointer, (pointer += credIDLen));
// Decode the next CBOR item in the buffer, then re-encode it back to a Buffer
- const firstDecoded = decodeCborFirst(intBuffer);
+ const firstDecoded = decodeCborFirst(authData.slice(pointer));
const firstEncoded = Buffer.from(cbor.encode(firstDecoded) as ArrayBuffer);
credentialPublicKey = firstEncoded;
- intBuffer = intBuffer.slice(firstEncoded.byteLength);
+ authData = authData.slice((pointer += firstEncoded.byteLength));
}
let extensionsDataBuffer: Buffer | undefined = undefined;
if (flags.ed) {
- const firstDecoded = decodeCborFirst(intBuffer);
+ const firstDecoded = decodeCborFirst(authData);
const firstEncoded = Buffer.from(cbor.encode(firstDecoded) as ArrayBuffer);
extensionsDataBuffer = firstEncoded;
- intBuffer = intBuffer.slice(firstEncoded.byteLength);
+ authData = authData.slice((pointer += firstEncoded.byteLength));
}
- if (intBuffer.byteLength > 0) {
+ if (authData.byteLength > pointer) {
throw new Error('Leftover bytes detected while parsing authenticator data');
}