Files
NapCatQQ/.pnpm-store/v3/files/75/d97722e4aecd3dcd46f77e991d31a36855037629c9e89c19fdac8a8f9429f713d09a35346d90a257f2b632931621e4d0be81ecf1c1293b23ece321e8cade3c
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

35 lines
1.6 KiB
Plaintext

import { AsnParser, OctetString } from '@peculiar/asn1-schema';
import { isoUint8Array } from './iso/index.js';
/**
* Attestation Certificate Extension OID: `id-fido-gen-ce-aaguid`
*
* Sourced from https://fidoalliance.org/specs/fido-v2.0-ps-20150904/fido-key-attestation-v2.0-ps-20150904.html#verifying-an-attestation-statement
*/
const id_fido_gen_ce_aaguid = '1.3.6.1.4.1.45724.1.1.4';
/**
* Look for the id-fido-gen-ce-aaguid certificate extension. If it's present then check it against
* the attestation statement AAGUID.
*/
export function validateExtFIDOGenCEAAGUID(certExtensions, aaguid) {
// The certificate had no extensions so there's nothing to validate
if (!certExtensions) {
return true;
}
const extFIDOGenCEAAGUID = certExtensions.find((ext) => ext.extnID === id_fido_gen_ce_aaguid);
// The extension isn't present so there's nothing to validate
if (!extFIDOGenCEAAGUID) {
return true;
}
// Parse the extension value
const parsedExtFIDOGenCEAAGUID = AsnParser.parse(extFIDOGenCEAAGUID.extnValue, OctetString);
const extValue = new Uint8Array(parsedExtFIDOGenCEAAGUID.buffer);
// Compare the two values
const aaguidAndExtAreEqual = isoUint8Array.areEqual(aaguid, extValue);
if (!aaguidAndExtAreEqual) {
const _debugExtHex = isoUint8Array.toHex(extValue);
const _debugAAGUIDHex = isoUint8Array.toHex(aaguid);
throw new Error(`Certificate extension id-fido-gen-ce-aaguid (${id_fido_gen_ce_aaguid}) value of "${_debugExtHex}" was present but not equal to attestation statement AAGUID value of "${_debugAAGUIDHex}"`);
}
return true;
}