asn1-ts
Version:
ASN.1 encoding and decoding, including BER, CER, and DER.
109 lines (108 loc) • 7.15 kB
JavaScript
export const MAX_UINT_32 = 0x00FFFFFFFF;
export const MIN_UINT_32 = 0x0000000000;
export const MAX_SINT_32 = 0x7FFFFFFF;
export const MIN_SINT_32 = -0x80000000;
export var ASN1TagClass;
(function (ASN1TagClass) {
ASN1TagClass[ASN1TagClass["universal"] = 0] = "universal";
ASN1TagClass[ASN1TagClass["application"] = 1] = "application";
ASN1TagClass[ASN1TagClass["context"] = 2] = "context";
ASN1TagClass[ASN1TagClass["private"] = 3] = "private";
})(ASN1TagClass || (ASN1TagClass = {}));
export var ASN1Construction;
(function (ASN1Construction) {
ASN1Construction[ASN1Construction["primitive"] = 0] = "primitive";
ASN1Construction[ASN1Construction["constructed"] = 1] = "constructed";
})(ASN1Construction || (ASN1Construction = {}));
export var LengthEncodingPreference;
(function (LengthEncodingPreference) {
LengthEncodingPreference[LengthEncodingPreference["definite"] = 0] = "definite";
LengthEncodingPreference[LengthEncodingPreference["indefinite"] = 1] = "indefinite";
})(LengthEncodingPreference || (LengthEncodingPreference = {}));
export var ASN1SpecialRealValue;
(function (ASN1SpecialRealValue) {
ASN1SpecialRealValue[ASN1SpecialRealValue["plusInfinity"] = 64] = "plusInfinity";
ASN1SpecialRealValue[ASN1SpecialRealValue["minusInfinity"] = 65] = "minusInfinity";
ASN1SpecialRealValue[ASN1SpecialRealValue["notANumber"] = 66] = "notANumber";
ASN1SpecialRealValue[ASN1SpecialRealValue["minusZero"] = 67] = "minusZero";
})(ASN1SpecialRealValue || (ASN1SpecialRealValue = {}));
export var ASN1RealEncodingBase;
(function (ASN1RealEncodingBase) {
ASN1RealEncodingBase[ASN1RealEncodingBase["base2"] = 0] = "base2";
ASN1RealEncodingBase[ASN1RealEncodingBase["base8"] = 16] = "base8";
ASN1RealEncodingBase[ASN1RealEncodingBase["base16"] = 32] = "base16";
})(ASN1RealEncodingBase || (ASN1RealEncodingBase = {}));
export var ASN1RealEncodingScale;
(function (ASN1RealEncodingScale) {
ASN1RealEncodingScale[ASN1RealEncodingScale["scale0"] = 0] = "scale0";
ASN1RealEncodingScale[ASN1RealEncodingScale["scale1"] = 4] = "scale1";
ASN1RealEncodingScale[ASN1RealEncodingScale["scale2"] = 8] = "scale2";
ASN1RealEncodingScale[ASN1RealEncodingScale["scale3"] = 12] = "scale3";
})(ASN1RealEncodingScale || (ASN1RealEncodingScale = {}));
export var ASN1UniversalType;
(function (ASN1UniversalType) {
ASN1UniversalType[ASN1UniversalType["endOfContent"] = 0] = "endOfContent";
ASN1UniversalType[ASN1UniversalType["boolean"] = 1] = "boolean";
ASN1UniversalType[ASN1UniversalType["integer"] = 2] = "integer";
ASN1UniversalType[ASN1UniversalType["bitString"] = 3] = "bitString";
ASN1UniversalType[ASN1UniversalType["octetString"] = 4] = "octetString";
ASN1UniversalType[ASN1UniversalType["nill"] = 5] = "nill";
ASN1UniversalType[ASN1UniversalType["objectIdentifier"] = 6] = "objectIdentifier";
ASN1UniversalType[ASN1UniversalType["objectDescriptor"] = 7] = "objectDescriptor";
ASN1UniversalType[ASN1UniversalType["external"] = 8] = "external";
ASN1UniversalType[ASN1UniversalType["realNumber"] = 9] = "realNumber";
ASN1UniversalType[ASN1UniversalType["enumerated"] = 10] = "enumerated";
ASN1UniversalType[ASN1UniversalType["embeddedPDV"] = 11] = "embeddedPDV";
ASN1UniversalType[ASN1UniversalType["utf8String"] = 12] = "utf8String";
ASN1UniversalType[ASN1UniversalType["relativeOID"] = 13] = "relativeOID";
ASN1UniversalType[ASN1UniversalType["reserved14"] = 14] = "reserved14";
ASN1UniversalType[ASN1UniversalType["time"] = 14] = "time";
ASN1UniversalType[ASN1UniversalType["reserved15"] = 15] = "reserved15";
ASN1UniversalType[ASN1UniversalType["sequence"] = 16] = "sequence";
ASN1UniversalType[ASN1UniversalType["set"] = 17] = "set";
ASN1UniversalType[ASN1UniversalType["numericString"] = 18] = "numericString";
ASN1UniversalType[ASN1UniversalType["printableString"] = 19] = "printableString";
ASN1UniversalType[ASN1UniversalType["teletexString"] = 20] = "teletexString";
ASN1UniversalType[ASN1UniversalType["videotexString"] = 21] = "videotexString";
ASN1UniversalType[ASN1UniversalType["ia5String"] = 22] = "ia5String";
ASN1UniversalType[ASN1UniversalType["utcTime"] = 23] = "utcTime";
ASN1UniversalType[ASN1UniversalType["generalizedTime"] = 24] = "generalizedTime";
ASN1UniversalType[ASN1UniversalType["graphicString"] = 25] = "graphicString";
ASN1UniversalType[ASN1UniversalType["visibleString"] = 26] = "visibleString";
ASN1UniversalType[ASN1UniversalType["generalString"] = 27] = "generalString";
ASN1UniversalType[ASN1UniversalType["universalString"] = 28] = "universalString";
ASN1UniversalType[ASN1UniversalType["characterString"] = 29] = "characterString";
ASN1UniversalType[ASN1UniversalType["bmpString"] = 30] = "bmpString";
ASN1UniversalType[ASN1UniversalType["date"] = 31] = "date";
ASN1UniversalType[ASN1UniversalType["timeOfDay"] = 32] = "timeOfDay";
ASN1UniversalType[ASN1UniversalType["dateTime"] = 33] = "dateTime";
ASN1UniversalType[ASN1UniversalType["duration"] = 34] = "duration";
ASN1UniversalType[ASN1UniversalType["oidIRI"] = 35] = "oidIRI";
ASN1UniversalType[ASN1UniversalType["roidIRI"] = 36] = "roidIRI";
})(ASN1UniversalType || (ASN1UniversalType = {}));
export const printableStringCharacters = "etaoinsrhdlucmfywgpbvkxqjzETAOINSRHDLUCMFYWGPBVKXQJZ0123456789 '()+,-./:=?";
export const utcTimeRegex = /^(\d{2})((?:1[0-2])|(?:0\d))((?:3[01])|(?:[0-2]\d))((?:2[0-3])|(?:[01]\d))([0-5]\d)([0-5]\d)?((?:(\+|-)((?:2[0-3])|(?:[01]\d))[0-5]\d)|Z)$/;
export const distinguishedUTCTimeRegex = /^(?<year>\d{2})(?<month>(?:1[0-2])|(?:0\d))(?<date>(?:3[01])|(?:[0-2]\d))(?<hour>(?:2[0-3])|(?:[01]\d))(?<minute>[0-5]\d)(?<second>[0-5]\d)?Z$/;
export const generalizedTimeRegex = /^(\d{4})((?:1[0-2])|(?:0\d))((?:3[01])|(?:[0-2]\d))((?:2[0-3])|(?:[01]\d))([0-5]\d)?([0-5]\d)?(?:(?:\.|,)(\d+))?((?:(?:\+|-)((?:2[0-3])|(?:[01]\d))[0-5]\d)|Z)?$/;
export const distinguishedGeneralizedTimeRegex = /^(?<year>\d{4})(?<month>(?:1[0-2])|(?:0\d))(?<date>(?:3[01])|(?:[0-2]\d))(?<hour>(?:2[0-3])|(?:[01]\d))(?<minute>[0-5]\d)(?<second>[0-5]\d)(?:(\.|,)(?<fraction>\d*[1-9]))?Z$/;
export const nr1Regex = /^ *(\+|-)?\d+$/u;
export const nr2Regex = /^ *(\+|-)?(?:\d+(\.|,)\d*)|(?:\d*(\.|,)\d+)$/u;
export const nr3Regex = /^ *(\+|-)?(?:\d+(\.|,)\d*)|(?:\d*(\.|,)\d+)(e|E)(\+|-)?\d+$/u;
export const canonicalNR3Regex = /^ *-?(?:[1-9]\d*)?[1-9]\.E(?:\+0)|(?:-?[1-9]\d*)$/u;
export const distinguishedNR3Regex = /^ *-?(?:[1-9]\d*)?[1-9]\.E(?:\+0)|(?:-?[1-9]\d*)$/u;
export const CANONICAL_TAG_CLASS_ORDERING = [
ASN1TagClass.universal,
ASN1TagClass.application,
ASN1TagClass.context,
ASN1TagClass.private,
];
export const numberRegex = "(?:0|[1-9]\\d*)(?:\\.\\d+)?";
export const durationRegex = new RegExp("^(?:(" + numberRegex + ")Y)?"
+ "(?:(" + numberRegex + ")M)?"
+ "(?:(" + numberRegex + ")D)?"
+ "(?:T"
+ "(?:(" + numberRegex + ")H)?"
+ "(?:(" + numberRegex + ")M)?"
+ "(?:(" + numberRegex + ")S)?"
+ ")?$");
export const datetimeRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/;