UNPKG

asn1-ts

Version:

ASN.1 encoding and decoding, including BER, CER, and DER.

41 lines (40 loc) 1.93 kB
import DERElement from "../../../codecs/der.mjs"; import { ASN1TagClass, ASN1UniversalType, ASN1Construction } from "../../../values.mjs"; import ASN1Element from "../../../asn1.mjs"; export default function encodeExternal(value) { let directReferenceElement = undefined; if (value.directReference) { directReferenceElement = new DERElement(ASN1TagClass.universal, ASN1Construction.primitive, ASN1UniversalType.objectIdentifier); directReferenceElement.objectIdentifier = value.directReference; } let indirectReferenceElement = undefined; if (value.indirectReference) { indirectReferenceElement = new DERElement(ASN1TagClass.universal, ASN1Construction.primitive, ASN1UniversalType.integer); indirectReferenceElement.integer = value.indirectReference; } let dataValueDescriptorElement = undefined; if (value.dataValueDescriptor) { dataValueDescriptorElement = new DERElement(ASN1TagClass.universal, ASN1Construction.primitive, ASN1UniversalType.objectDescriptor); dataValueDescriptorElement.objectDescriptor = value.dataValueDescriptor; } let encodingElement = undefined; if (value.encoding instanceof ASN1Element) { encodingElement = new DERElement(ASN1TagClass.context, ASN1Construction.constructed, 0); encodingElement.inner = value.encoding; } else if (value.encoding instanceof Uint8Array) { encodingElement = new DERElement(ASN1TagClass.context, ASN1Construction.primitive, 1); encodingElement.octetString = value.encoding; } else { encodingElement = new DERElement(ASN1TagClass.context, ASN1Construction.primitive, 2); encodingElement.bitString = value.encoding; } const ret = DERElement.fromSequence([ directReferenceElement, indirectReferenceElement, dataValueDescriptorElement, encodingElement, ]); return ret.value; }