summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src
diff options
context:
space:
mode:
authorMatthew Miller <matthew@millerti.me>2021-08-20 21:32:14 -0700
committerMatthew Miller <matthew@millerti.me>2021-08-20 21:32:14 -0700
commit63a733b07be72a350f6f33bc4b2dd0e51e278579 (patch)
tree21ecd5d3cc64ca65628a45188681f35d36838bca /packages/server/src
parentf994527c21b27fb9c86374a3c214374be9ec3623 (diff)
Try to match statement alg to metadata algs
Diffstat (limited to 'packages/server/src')
-rw-r--r--packages/server/src/metadata/verifyAttestationWithMetadata.ts20
1 files changed, 15 insertions, 5 deletions
diff --git a/packages/server/src/metadata/verifyAttestationWithMetadata.ts b/packages/server/src/metadata/verifyAttestationWithMetadata.ts
index 6c3db11..c30776c 100644
--- a/packages/server/src/metadata/verifyAttestationWithMetadata.ts
+++ b/packages/server/src/metadata/verifyAttestationWithMetadata.ts
@@ -1,6 +1,6 @@
import { Base64URLString } from '@simplewebauthn/typescript-types';
-import { MetadataStatement } from '../metadata/mdsTypes';
+import { MetadataStatement, AlgSign } from '../metadata/mdsTypes';
import convertCertBufferToPEM from '../helpers/convertCertBufferToPEM';
import validateCertificatePath from '../helpers/validateCertificatePath';
@@ -9,10 +9,20 @@ export default async function verifyAttestationWithMetadata(
alg: number,
x5c: Buffer[] | Base64URLString[],
): Promise<boolean> {
- // Make sure the alg in the attestation statement matches the one specified in the metadata
- const metaCOSE = FIDO_METADATA_AUTH_ALG_TO_COSE[statement.authenticationAlgorithm];
- if (metaCOSE.alg !== alg) {
- throw new Error(`Attestation alg "${alg}" did not match metadata auth alg "${metaCOSE.alg}"`);
+ // Make sure the alg in the attestation statement matches one of the ones specified in metadata
+ const statementCOSEAlgs: Set<number> = new Set();
+ statement.authenticationAlgorithms.forEach(algSign => {
+ // Convert algSign string to { kty, alg, crv }
+ const algSignCOSEINFO = algSignToCOSEInfo(algSign);
+
+ if (algSignCOSEINFO) {
+ statementCOSEAlgs.add(algSignCOSEINFO.alg);
+ }
+ });
+
+ if (!statementCOSEAlgs.has(alg)) {
+ const debugAlgs = Array.from(statementCOSEAlgs).join(', ');
+ throw new Error(`Attestation alg "${alg}" did not match metadata auth algs [${debugAlgs}]`);
}
try {