import { isoCBOR } from './iso/index.ts'; /** * Convert an AttestationObject buffer to a proper object * * @param base64AttestationObject Attestation Object buffer */ export function decodeAttestationObject( attestationObject: Uint8Array, ): AttestationObject { return _decodeAttestationObjectInternals.stubThis( isoCBOR.decodeFirst(attestationObject), ); } export type AttestationFormat = | 'fido-u2f' | 'packed' | 'android-safetynet' | 'android-key' | 'tpm' | 'apple' | 'none'; export type AttestationObject = { get(key: 'fmt'): AttestationFormat; get(key: 'attStmt'): AttestationStatement; get(key: 'authData'): Uint8Array; }; /** * `AttestationStatement` will be an instance of `Map`, but these keys help make finite the list of * possible values within it. */ export type AttestationStatement = { get(key: 'sig'): Uint8Array | undefined; get(key: 'x5c'): Uint8Array[] | undefined; get(key: 'response'): Uint8Array | undefined; get(key: 'alg'): number | undefined; get(key: 'ver'): string | undefined; get(key: 'certInfo'): Uint8Array | undefined; get(key: 'pubArea'): Uint8Array | undefined; // `Map` properties readonly size: number; }; // Make it possible to stub the return value during testing export const _decodeAttestationObjectInternals = { stubThis: (value: AttestationObject) => value, };