x509-ts
Version:
Encode and decode X.509 (TLS) Certificates, Attribute Certificates, CRLs, and more.
253 lines • 11.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const asn1_ts_1 = require("asn1-ts");
const UnboundedDirectoryString_1 = __importDefault(require("../SelectedAttributeTypes/Version8/UnboundedDirectoryString"));
const errors = __importStar(require("../errors"));
class AttributeTypeAndValue {
constructor(type, value) {
this.type = type;
this.value = value;
}
static escapeDirectoryCharacters(unescaped) {
return unescaped.replace(",", "\\,").replace("+", "\\+");
}
toString() {
const oidString = this.type.toString();
if (oidString in AttributeTypeAndValue.attributeToNameMapping
&& oidString in AttributeTypeAndValue.attributeToValuePrinterMapping) {
const attributeNameString = AttributeTypeAndValue.attributeToNameMapping[oidString];
const valueString = AttributeTypeAndValue.escapeDirectoryCharacters(AttributeTypeAndValue.attributeToValuePrinterMapping[oidString](this.value));
return `${attributeNameString}=${valueString}`;
}
else {
return `${oidString}=${this.value.toBytes()}`;
}
}
static fromElement(value) {
const attributeTypeAndValueElements = value.sequence;
if (attributeTypeAndValueElements.length !== 2) {
throw new errors.X509Error("Invalid number of elements in AttributeTypeAndValue");
}
switch (attributeTypeAndValueElements[0].validateTag([asn1_ts_1.ASN1TagClass.universal], [asn1_ts_1.ASN1Construction.primitive], [asn1_ts_1.ASN1UniversalType.objectIdentifier])) {
case 0: break;
case -1: throw new errors.X509Error("Invalid tag class on AttributeTypeAndValue.type");
case -2: throw new errors.X509Error("Invalid construction on AttributeTypeAndValue.type");
case -3: throw new errors.X509Error("Invalid tag number on AttributeTypeAndValue.type");
default: throw new errors.X509Error("Undefined error when validating AttributeTypeAndValue.type tag");
}
return new AttributeTypeAndValue(attributeTypeAndValueElements[0].objectIdentifier, attributeTypeAndValueElements[1]);
}
toElement() {
const typeElement = new asn1_ts_1.DERElement();
typeElement.tagNumber = asn1_ts_1.ASN1UniversalType.objectIdentifier;
typeElement.objectIdentifier = this.type;
const attributeTypeAndValueElement = new asn1_ts_1.DERElement();
attributeTypeAndValueElement.tagClass = asn1_ts_1.ASN1TagClass.universal;
attributeTypeAndValueElement.construction = asn1_ts_1.ASN1Construction.constructed;
attributeTypeAndValueElement.tagNumber = asn1_ts_1.ASN1UniversalType.sequence;
attributeTypeAndValueElement.sequence = [typeElement, this.value];
return attributeTypeAndValueElement;
}
static fromBytes(value) {
const el = new asn1_ts_1.DERElement();
el.fromBytes(value);
return AttributeTypeAndValue.fromElement(el);
}
toBytes() {
return this.toElement().toBytes();
}
}
exports.default = AttributeTypeAndValue;
AttributeTypeAndValue.attributeToNameMapping = {
"2.5.4.3": "cn",
"2.5.4.7.1": "c-l",
"2.5.4.8.1": "c-st",
"2.5.4.9.1": "c-street",
"2.5.4.10.1": "c-o",
"2.5.4.11.1": "c-ou",
"2.5.4.16.1": "c-PostalAddress",
"2.5.4.17.1": "c-PostalCode",
"2.5.4.18.1": "c-PostOfficeBox",
"2.5.4.19.1": "c-PhysicalDeliveryOfficeName",
"2.5.4.20.1": "c-TelephoneNumber",
"2.5.4.21.1": "c-TelexNumber",
"2.5.4.23.1": "c-FacsimileTelephoneNumber",
"2.5.4.25.1": "c-InternationalISDNNumber",
"2.5.4.2": "knowledgeInformation",
"2.5.4.4": "sn",
"2.5.4.5": "serialNumber",
"2.5.4.6": "c",
"2.5.4.7": "l",
"2.5.4.8": "st",
"2.5.4.9": "streetAddress",
"2.5.4.10": "o",
"2.5.4.11": "ou",
"2.5.4.12": "title",
"2.5.4.14": "searchGuide",
"2.5.4.15": "businessCategory",
"2.5.4.16": "postalAddress",
"2.5.4.17": "postalCode",
"2.5.4.18": "postOfficeBox",
"2.5.4.19": "physicalDeliveryOfficeName",
"2.5.4.20": "telephoneNumber",
"2.5.4.21": "telexNumber",
"2.5.4.22": "teletexTerminalIdentifier",
"2.5.4.23": "facsimileTelephoneNumber",
"2.5.4.24": "x121Address",
"2.5.4.25": "internationaliSDNNumber",
"2.5.4.26": "registeredAddress",
"2.5.4.27": "destinationIndicator",
"2.5.4.28": "preferredDeliveryMethod",
"2.5.4.29": "presentationAddress",
"2.5.4.30": "supportedApplicationContext",
"2.5.4.31": "member",
"2.5.4.32": "owner",
"2.5.4.33": "roleOccupant",
"2.5.4.36": "userCertificate",
"2.5.4.37": "cACertificate",
"2.5.4.38": "authorityRevocationList",
"2.5.4.39": "certificateRevocationList",
"2.5.4.40": "crossCertificatePair",
"2.5.4.42": "gn",
"2.5.4.43": "initials",
"2.5.4.44": "generationQualifier",
"2.5.4.45": "x500UniqueIdentifier",
"2.5.4.46": "dnQualifier",
"2.5.4.47": "enhancedSearchGuide",
"2.5.4.48": "protocolInformation",
"2.5.4.50": "uniqueMember",
"2.5.4.51": "houseIdentifier",
"2.5.4.52": "supportedAlgorithms",
"2.5.4.53": "deltaRevocationList",
"2.5.4.54": "dmdName",
"2.5.4.65": "pseudonym",
"0.9.2342.19200300.100.1.3": "mail",
"0.9.2342.19200300.100.1.25": "dc",
"0.9.2342.19200300.100.1.37": "associatedDomain",
"1.2.840.113549.1.9.1": "emailAddress",
"0.9.2342.19200300.100.1.2": "textEncodedORAddress",
"0.9.2342.19200300.100.1.4": "info",
"0.9.2342.19200300.100.1.5": "favouriteDrink",
"0.9.2342.19200300.100.1.6": "roomNumber",
"0.9.2342.19200300.100.1.7": "photo",
"0.9.2342.19200300.100.1.8": "userClass",
"0.9.2342.19200300.100.1.9": "host",
"0.9.2342.19200300.100.1.10": "manager",
"0.9.2342.19200300.100.1.11": "documentIdentifier",
"0.9.2342.19200300.100.1.12": "documentTitle",
"0.9.2342.19200300.100.1.13": "documentVersion",
"0.9.2342.19200300.100.1.14": "documentAuthor",
"0.9.2342.19200300.100.1.15": "documentLocation",
"0.9.2342.19200300.100.1.20": "homeTelephoneNumber",
"0.9.2342.19200300.100.1.21": "secretary",
"0.9.2342.19200300.100.1.22": "otherMailbox",
"0.9.2342.19200300.100.1.26": "aRecord",
"0.9.2342.19200300.100.1.27": "mDRecord",
"0.9.2342.19200300.100.1.28": "mXRecord",
"0.9.2342.19200300.100.1.29": "nSRecord",
"0.9.2342.19200300.100.1.30": "sOARecord",
"0.9.2342.19200300.100.1.31": "cNAMERecord",
"0.9.2342.19200300.100.1.38": "associatedName",
"0.9.2342.19200300.100.1.39": "homePostalAddress",
"0.9.2342.19200300.100.1.40": "personalTitle",
"0.9.2342.19200300.100.1.41": "mobileTelephoneNumber",
"0.9.2342.19200300.100.1.42": "pagerTelephoneNumber",
"0.9.2342.19200300.100.1.43": "friendlyCountryName",
"0.9.2342.19200300.100.1.44": "uniqueIdentifier",
"0.9.2342.19200300.100.1.45": "organizationalStatus",
"0.9.2342.19200300.100.1.46": "janetMailbox",
"0.9.2342.19200300.100.1.47": "mailPreferenceOption",
"0.9.2342.19200300.100.1.48": "buildingName",
"0.9.2342.19200300.100.1.49": "dSAQuality",
"0.9.2342.19200300.100.1.50": "singleLevelQuality",
"0.9.2342.19200300.100.1.51": "subtreeMinimumQuality",
"0.9.2342.19200300.100.1.52": "subtreeMaximumQuality",
"0.9.2342.19200300.100.1.53": "personalSignature",
"0.9.2342.19200300.100.1.54": "dITRedirect",
"0.9.2342.19200300.100.1.55": "audio",
"0.9.2342.19200300.100.1.56": "documentPublisher",
"2.16.840.1.113730.3.1.1": "carLicense",
"2.16.840.1.113730.3.1.2": "departmentNumber",
"2.16.840.1.113730.3.1.241": "displayName",
"2.16.840.1.113730.3.1.3": "employeeNumber",
"2.16.840.1.113730.3.1.4": "employeeType",
"0.9.2342.19200300.100.1.60": "jpegPhoto",
"2.16.840.1.113730.3.1.39": "preferredLanguage",
"2.16.840.1.113730.3.1.40": "userSMIMECertificate",
"2.16.840.1.113730.3.1.216": "userPKCS12",
"2.16.840.1.113730.3.1.13": "mailLocalAddress",
"2.16.840.1.113730.3.1.18": "mailHost",
"2.16.840.1.113730.3.1.47": "mailRoutingAddress",
"1.3.6.1.4.1.42.2.27.2.1.15": "rfc822MailMember",
"1.3.6.1.1.1.1.2": "gecos",
"1.3.6.1.1.1.1.3": "homeDirectory",
"1.3.6.1.1.1.1.4": "loginShell",
"1.3.6.1.1.1.1.5": "shadowLastChange",
"1.3.6.1.1.1.1.6": "shadowMin",
"1.3.6.1.1.1.1.7": "shadowMax",
"1.3.6.1.1.1.1.8": "shadowWarning",
"1.3.6.1.1.1.1.9": "shadowInactive",
"1.3.6.1.1.1.1.10": "shadowExpire",
"1.3.6.1.1.1.1.11": "shadowFlag",
"1.3.6.1.1.1.1.12": "memberUid",
"1.3.6.1.1.1.1.13": "memberNisNetgroup",
"1.3.6.1.1.1.1.14": "nisNetgroupTriple",
"1.3.6.1.1.1.1.15": "ipServicePort",
"1.3.6.1.1.1.1.16": "ipServiceProtocol",
"1.3.6.1.1.1.1.17": "ipProtocolNumber",
"1.3.6.1.1.1.1.18": "oncRpcNumber",
"1.3.6.1.1.1.1.19": "ipHostNumber",
"1.3.6.1.1.1.1.20": "ipNetworkNumber",
"1.3.6.1.1.1.1.21": "ipNetmaskNumber",
"1.3.6.1.1.1.1.22": "macAddress",
"1.3.6.1.1.1.1.23": "bootParameter",
"1.3.6.1.1.1.1.24": "bootFile",
"1.3.6.1.1.1.1.26": "nisMapName",
"1.3.6.1.1.1.1.27": "nisMapEntry",
"2.5.4.72": "role",
"2.5.4.75": "xmlPrivilegeInfo",
"2.5.4.58": "attributeCertificateA",
"2.5.4.61": "aACertificate",
"2.5.4.62": "attributeDescriptorCertificate",
"2.5.4.59": "attributeCertificateRevocationList",
"2.5.4.63": "attributeAuthorityRevocationList",
"2.5.4.73": "delegationPath",
"2.5.4.71": "privPolicy",
"2.5.4.74": "protPrivPolicy",
"2.5.4.76": "xmlPrivPolicy",
};
AttributeTypeAndValue.attributeToValuePrinterMapping = {
"2.5.4.3": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.4": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.5": (element) => element.printableString,
"2.5.4.6": (element) => element.printableString,
"2.5.4.7": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.8": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.9": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.10": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.11": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.12": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.15": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.17": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.18": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.19": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.20": (element) => element.printableString,
"2.5.4.24": (element) => element.numericString,
"2.5.4.25": (element) => element.numericString,
"2.5.4.27": (element) => element.printableString,
"2.5.4.42": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.43": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.44": (element) => UnboundedDirectoryString_1.default.print(element),
"2.5.4.46": (element) => element.printableString,
};
//# sourceMappingURL=AttributeTypeAndValue.js.map