UNPKG

asn1-ts

Version:

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

147 lines (146 loc) 10.7 kB
import { ASN1Element, ASN1TagClass, ASN1Construction, CharacterString } from "./index.mjs"; import type { BIT_STRING, INTEGER, OBJECT_IDENTIFIER, ObjectDescriptor, REAL, RELATIVE_OID, RELATIVE_OID_IRI, TIME, TIME_OF_DAY, DURATION, DATE, DATE_TIME, EXTERNAL, EMBEDDED_PDV, NULL, ENUMERATED, BOOLEAN, INSTANCE_OF, OID_IRI, OCTET_STRING, BMPString, VisibleString, VideotexString, TeletexString, T61String, UniversalString, GeneralString, GeneralizedTime, UTCTime, PrintableString, GraphicString, IA5String, ISO646String, NumericString, UTF8String, SEQUENCE, SEQUENCE_OF, SET, SET_OF } from "./index.mjs"; export interface ASN1ElementGetter<T> { (value?: T): ASN1Element; } export interface ASN1Encoder<T> { (value: T, elGetter: ASN1Encoder<T>): ASN1Element; } export interface ASN1Decoder<T> { (el: ASN1Element): T; } export interface TagValidator { (index: number, elements: ASN1Element[]): boolean; } export type Selection<T, K extends string> = T extends Record<K, any> ? T[K] : never; export type AllUnionMemberKeys<T> = T extends any ? keyof T : never; export type InextensibleChoice<T> = T; export type ExtensibleChoice<T> = (T | ASN1Element); export type DecodingCallback = (el: ASN1Element, name?: string) => void; export type DecodingMap = Record<string, DecodingCallback>; export declare function hasTag(tagClass: ASN1TagClass, tagNumber: number): TagValidator; export declare function hasAnyTag(): boolean; export declare function hasTagClass(tagClass: ASN1TagClass): TagValidator; export declare function hasTagNumberIn(tagNumbers: number[]): TagValidator; export declare function and(...fns: TagValidator[]): TagValidator; export declare function or(...fns: TagValidator[]): TagValidator; export declare function not(fn: TagValidator): TagValidator; export declare function tagClassName(tagClass: ASN1TagClass): string; export declare function deepEq(value1: unknown, value2: unknown): boolean; export declare function isDefault(defaultValue: any): (actualValue: any) => boolean; export declare function present(value: any): boolean; export declare function _encode_explicit(class_: ASN1TagClass | undefined, tag: number | undefined, encoderGetter: () => ASN1Encoder<any>, outer: ASN1Encoder<any>): ASN1Encoder<any>; export declare function _decode_explicit<T>(decoderGetter: () => (el: ASN1Element) => T): ASN1Decoder<T>; export declare function _encode_implicit(class_: ASN1TagClass | undefined, tag: number | undefined, encoderGetter: () => ASN1Encoder<any>, _: ASN1Encoder<any>): ASN1Encoder<any>; export declare function _decode_implicit<T>(decoderGetter: () => (el: ASN1Element) => T): ASN1Decoder<T>; export declare function _tagClass(class_: ASN1TagClass, encoderGetter: () => () => ASN1Element): ASN1Element; export declare function _construction(con: ASN1Construction, encoderGetter: () => () => ASN1Element): ASN1Element; export declare function _tagNumber(tag: number, encoderGetter: () => () => ASN1Element): ASN1Element; export declare const BER: ASN1Encoder<any>; export declare const CER: ASN1Encoder<any>; export declare const DER: ASN1Encoder<any>; export declare const _encodeBitString: ASN1Encoder<BIT_STRING>; export declare const _decodeBitString: ASN1Decoder<BIT_STRING>; export declare const _encodeBoolean: ASN1Encoder<BOOLEAN>; export declare const _decodeBoolean: ASN1Decoder<BOOLEAN>; export declare const _encodeUnrestrictedCharacterString: ASN1Encoder<CharacterString>; export declare const _decodeUnrestrictedCharacterString: ASN1Decoder<CharacterString>; export declare const _encodeDate: ASN1Encoder<DATE>; export declare const _decodeDate: ASN1Decoder<DATE>; export declare const _encodeDateTime: ASN1Encoder<DATE_TIME>; export declare const _decodeDateTime: ASN1Decoder<DATE_TIME>; export declare const _encodeDuration: ASN1Encoder<DURATION>; export declare const _decodeDuration: ASN1Decoder<DURATION>; export declare const _encodeEmbeddedPDV: ASN1Encoder<EMBEDDED_PDV>; export declare const _decodeEmbeddedPDV: ASN1Decoder<EMBEDDED_PDV>; export declare const _encodeEnumerated: ASN1Encoder<ENUMERATED>; export declare const _decodeEnumerated: ASN1Decoder<ENUMERATED>; export declare const _encodeExternal: ASN1Encoder<EXTERNAL>; export declare const _decodeExternal: ASN1Decoder<EXTERNAL>; export declare const _encodeInstanceOf: ASN1Encoder<INSTANCE_OF>; export declare const _decodeInstanceOf: ASN1Decoder<INSTANCE_OF>; export declare const _encodeInteger: ASN1Encoder<INTEGER>; export declare const _decodeInteger: ASN1Decoder<INTEGER>; export declare const _encodeIRI: ASN1Encoder<OID_IRI>; export declare const _decodeIRI: ASN1Decoder<OID_IRI>; export declare const _encodeNull: ASN1Encoder<NULL>; export declare const _decodeNull: ASN1Decoder<NULL>; export declare const _encodeObjectIdentifier: ASN1Encoder<OBJECT_IDENTIFIER>; export declare const _decodeObjectIdentifier: ASN1Decoder<OBJECT_IDENTIFIER>; export declare const _encodeOctetString: ASN1Encoder<OCTET_STRING>; export declare const _decodeOctetString: ASN1Decoder<OCTET_STRING>; export declare const _encodeReal: ASN1Encoder<REAL>; export declare const _decodeReal: ASN1Decoder<REAL>; export declare const _encodeRelativeIRI: ASN1Encoder<RELATIVE_OID_IRI>; export declare const _decodeRelativeIRI: ASN1Decoder<RELATIVE_OID_IRI>; export declare const _encodeRelativeOID: ASN1Encoder<RELATIVE_OID>; export declare const _decodeRelativeOID: ASN1Decoder<RELATIVE_OID>; export declare const _encodeSequence: ASN1Encoder<SEQUENCE<ASN1Element>>; export declare const _decodeSequence: ASN1Decoder<SEQUENCE<ASN1Element>>; export declare const _encodeSet: ASN1Encoder<SET<ASN1Element>>; export declare const _decodeSet: ASN1Decoder<SET<ASN1Element>>; export declare const _encodeTime: ASN1Encoder<TIME>; export declare const _decodeTime: ASN1Decoder<TIME>; export declare const _encodeTimeOfDay: ASN1Encoder<TIME_OF_DAY>; export declare const _decodeTimeOfDay: ASN1Decoder<TIME_OF_DAY>; export declare const _encodeBMPString: ASN1Encoder<BMPString>; export declare const _decodeBMPString: ASN1Decoder<BMPString>; export declare const _encodeGeneralString: ASN1Encoder<GeneralString>; export declare const _decodeGeneralString: ASN1Decoder<GeneralString>; export declare const _encodeGraphicString: ASN1Encoder<GraphicString>; export declare const _decodeGraphicString: ASN1Decoder<GraphicString>; export declare const _encodeIA5String: ASN1Encoder<IA5String>; export declare const _decodeIA5String: ASN1Decoder<IA5String>; export declare const _encodeISO646String: ASN1Encoder<ISO646String>; export declare const _decodeISO646String: ASN1Decoder<ISO646String>; export declare const _encodeNumericString: ASN1Encoder<NumericString>; export declare const _decodeNumericString: ASN1Decoder<NumericString>; export declare const _encodePrintableString: ASN1Encoder<PrintableString>; export declare const _decodePrintableString: ASN1Decoder<PrintableString>; export declare const _encodeTeletexString: ASN1Encoder<TeletexString>; export declare const _decodeTeletexString: ASN1Decoder<TeletexString>; export declare const _encodeT61String: ASN1Encoder<T61String>; export declare const _decodeT61String: ASN1Decoder<T61String>; export declare const _encodeUniversalString: ASN1Encoder<UniversalString>; export declare const _decodeUniversalString: ASN1Decoder<UniversalString>; export declare const _encodeUTF8String: ASN1Encoder<UTF8String>; export declare const _decodeUTF8String: ASN1Decoder<UTF8String>; export declare const _encodeVideotexString: ASN1Encoder<VideotexString>; export declare const _decodeVideotexString: ASN1Decoder<VideotexString>; export declare const _encodeVisibleString: ASN1Encoder<VisibleString>; export declare const _decodeVisibleString: ASN1Decoder<VisibleString>; export declare const _encodeGeneralizedTime: ASN1Encoder<GeneralizedTime>; export declare const _decodeGeneralizedTime: ASN1Decoder<GeneralizedTime>; export declare const _encodeUTCTime: ASN1Encoder<UTCTime>; export declare const _decodeUTCTime: ASN1Decoder<UTCTime>; export declare const _encodeObjectDescriptor: ASN1Encoder<ObjectDescriptor>; export declare const _decodeObjectDescriptor: ASN1Decoder<ObjectDescriptor>; export declare const _encodeAny: ASN1Encoder<ASN1Element>; export declare const _decodeAny: ASN1Decoder<ASN1Element>; export declare class ComponentSpec { readonly name: string; readonly optional: boolean; readonly selector: TagValidator; readonly groupIndex?: number | undefined; readonly versionNumber?: number | undefined; constructor(name: string, optional: boolean, selector: TagValidator, groupIndex?: number | undefined, versionNumber?: number | undefined); } export declare function _parse_set(set: ASN1Element, decodingCallbacks: DecodingMap, rootComponentTypeList1: ComponentSpec[], extensionAdditionsList: ComponentSpec[], rootComponentTypeList2: ComponentSpec[], unrecognizedExtensionHandler?: DecodingCallback, maximumElements?: number): void; export declare function _get_possible_initial_components(componentTypeList: ComponentSpec[]): ComponentSpec[]; export declare function _parse_sequence(seq: ASN1Element, decodingCallbacks: DecodingMap, rootComponentTypeList1: ComponentSpec[], extensionAdditionsList: ComponentSpec[], rootComponentTypeList2: ComponentSpec[], unrecognizedExtensionHandler?: DecodingCallback): void; export declare function _encode_choice<T extends object>(choices: Record<keyof T, ASN1Encoder<T[AllUnionMemberKeys<T>]>>, elGetter: ASN1Encoder<T>): ASN1Encoder<T>; export declare function _decode_inextensible_choice<T>(choices: Record<string, [ AllUnionMemberKeys<T>, ASN1Decoder<T[AllUnionMemberKeys<T>]> ]>): ASN1Decoder<InextensibleChoice<T>>; export declare function _decode_extensible_choice<T>(choices: Record<string, [AllUnionMemberKeys<T>, ASN1Decoder<T[AllUnionMemberKeys<T>]>]>): ASN1Decoder<ExtensibleChoice<T>>; export type SequenceOfDecoder<T> = ASN1Decoder<SEQUENCE_OF<T>>; export type SetOfDecoder<T> = ASN1Decoder<SET_OF<T>>; export type SequenceOfEncoder<T> = ASN1Encoder<SEQUENCE_OF<T>>; export type SetOfEncoder<T> = ASN1Encoder<SET_OF<T>>; export declare function _decodeSequenceOf<T>(decoderGetter: () => ASN1Decoder<T>): SequenceOfDecoder<T>; export declare function _encodeSequenceOf<T>(encoderGetter: () => (value: T, innerElGetter: ASN1Encoder<T>) => ASN1Element, outerElGetter: ASN1Encoder<any>): SequenceOfEncoder<T>; export declare function _decodeSetOf<T>(decoderGetter: () => (el: ASN1Element) => T): SetOfDecoder<T>; export declare function _encodeSetOf<T>(encoderGetter: () => (value: T, innerElGetter: ASN1Encoder<T>) => ASN1Element, outerElGetter: ASN1Encoder<any>): SetOfEncoder<T>; export declare const _encodeBigInt: ASN1Encoder<OCTET_STRING>; export declare const _decodeBigInt: ASN1Decoder<OCTET_STRING>;