@li0ard/tsemrtd
Version:
simple library for eMRTD. supports browsers, node, bun and more!
39 lines (38 loc) • 1.71 kB
JavaScript
import { TLV } from "@li0ard/tinytlv";
import { Enums, Oids } from "./index";
import { AsnConvert } from "@peculiar/asn1-schema";
import { ChipAuthenticationDomainParameterInfo, ChipAuthenticationInfo, ChipAuthenticationPublicKeyInfo, SecurityInfos, TerminalAuthenticationInfo } from "./asn1/eac";
/**
* Class for working with DG14 (EAC/PACE authentication info)
*/
export class DG14 {
/**
* Get EAC/PACE security informations
* @param data Data of EF.DG14 file
*/
static load(data) {
let tlv = TLV.parse(data);
if (parseInt(tlv.tag, 16) != Enums.TAGS.DG14)
throw new Error(`Invalid DG14 tag "0x${tlv.tag}", expected 0x${Enums.TAGS.DG14.toString(16)}`);
let infos = AsnConvert.parse(tlv.byteValue, SecurityInfos);
let set = new SecurityInfos();
for (let i of infos) {
if (i.protocol == Oids.TerminalAuthentication) {
set.push(AsnConvert.parse(AsnConvert.serialize(i), TerminalAuthenticationInfo));
}
else if (Object.values(Oids.ChipAuthInfo).includes(i.protocol)) {
set.push(AsnConvert.parse(AsnConvert.serialize(i), ChipAuthenticationInfo));
}
else if (Object.values(Oids.ChipAuthPublicKey).includes(i.protocol)) {
set.push(AsnConvert.parse(AsnConvert.serialize(i), ChipAuthenticationPublicKeyInfo));
}
else if (Object.values(Oids.ChipAuthDomainParameters).includes(i.protocol)) {
set.push(AsnConvert.parse(AsnConvert.serialize(i), ChipAuthenticationDomainParameterInfo));
}
else {
set.push(i);
}
}
return set;
}
}