@wildboar/pkcs
Version:
Public Key Cryptography Standard PDUs in TypeScript
324 lines (323 loc) • 12.1 kB
JavaScript
/* eslint-disable */
import { ASN1TagClass as _TagClass, } from "@wildboar/asn1";
import * as $ from "@wildboar/asn1/functional";
import { _decode_AlgorithmInfo, _encode_AlgorithmInfo, } from "../PKCS-15/AlgorithmInfo.ta.mjs";
import { _decode_Label, _encode_Label } from "../PKCS-15/Label.ta.mjs";
import { _decode_LastUpdate, _encode_LastUpdate, } from "../PKCS-15/LastUpdate.ta.mjs";
import { _decode_RecordInfo, _encode_RecordInfo, } from "../PKCS-15/RecordInfo.ta.mjs";
import { _decode_SecurityEnvironmentInfo, _encode_SecurityEnvironmentInfo, } from "../PKCS-15/SecurityEnvironmentInfo.ta.mjs";
import { _decode_TokenFlags, _encode_TokenFlags, } from "../PKCS-15/TokenFlags.ta.mjs";
import { _decode_TokenInfo_version, _encode_TokenInfo_version, } from "../PKCS-15/TokenInfo-version.ta.mjs";
/**
* @summary TokenInfo
* @description
*
* ### ASN.1 Definition:
*
* ```asn1
* TokenInfo ::= SEQUENCE {
* version INTEGER {v1(0)} (v1,...),
* serialNumber OCTET STRING,
* manufacturerID Label OPTIONAL,
* label [0] Label OPTIONAL,
* tokenflags TokenFlags,
* seInfo SEQUENCE OF SecurityEnvironmentInfo OPTIONAL,
* recordInfo [1] RecordInfo OPTIONAL,
* supportedAlgorithms [2] SEQUENCE OF AlgorithmInfo OPTIONAL,
* ...,
* issuerId [3] Label OPTIONAL,
* holderId [4] Label OPTIONAL,
* lastUpdate [5] LastUpdate OPTIONAL,
* preferredLanguage PrintableString OPTIONAL -- In accordance with IETF RFC 1766
* } (CONSTRAINED BY { -- Each AlgorithmInfo.reference value must be unique -- })
* ```
*
*/
export class TokenInfo {
version;
serialNumber;
manufacturerID;
label;
tokenflags;
seInfo;
recordInfo;
supportedAlgorithms;
issuerId;
holderId;
lastUpdate;
preferredLanguage;
_unrecognizedExtensionsList;
constructor(
/**
* @summary `version`.
* @public
* @readonly
*/
version,
/**
* @summary `serialNumber`.
* @public
* @readonly
*/
serialNumber,
/**
* @summary `manufacturerID`.
* @public
* @readonly
*/
manufacturerID,
/**
* @summary `label`.
* @public
* @readonly
*/
label,
/**
* @summary `tokenflags`.
* @public
* @readonly
*/
tokenflags,
/**
* @summary `seInfo`.
* @public
* @readonly
*/
seInfo,
/**
* @summary `recordInfo`.
* @public
* @readonly
*/
recordInfo,
/**
* @summary `supportedAlgorithms`.
* @public
* @readonly
*/
supportedAlgorithms,
/**
* @summary `issuerId`.
* @public
* @readonly
*/
issuerId,
/**
* @summary `holderId`.
* @public
* @readonly
*/
holderId,
/**
* @summary `lastUpdate`.
* @public
* @readonly
*/
lastUpdate,
/**
* @summary `preferredLanguage`.
* @public
* @readonly
*/
preferredLanguage,
/**
* @summary Extensions that are not recognized.
* @public
* @readonly
*/
_unrecognizedExtensionsList = []) {
this.version = version;
this.serialNumber = serialNumber;
this.manufacturerID = manufacturerID;
this.label = label;
this.tokenflags = tokenflags;
this.seInfo = seInfo;
this.recordInfo = recordInfo;
this.supportedAlgorithms = supportedAlgorithms;
this.issuerId = issuerId;
this.holderId = holderId;
this.lastUpdate = lastUpdate;
this.preferredLanguage = preferredLanguage;
this._unrecognizedExtensionsList = _unrecognizedExtensionsList;
}
/**
* @summary Restructures an object into a TokenInfo
* @description
*
* This takes an `object` and converts it to a `TokenInfo`.
*
* @public
* @static
* @method
* @param {Object} _o An object having all of the keys and values of a `TokenInfo`.
* @returns {TokenInfo}
*/
static _from_object(_o) {
return new TokenInfo(_o.version, _o.serialNumber, _o.manufacturerID, _o.label, _o.tokenflags, _o.seInfo, _o.recordInfo, _o.supportedAlgorithms, _o.issuerId, _o.holderId, _o.lastUpdate, _o.preferredLanguage, _o._unrecognizedExtensionsList);
}
}
/**
* @summary The Leading Root Component Types of TokenInfo
* @description
*
* This is an array of `ComponentSpec`s that define how to decode the leading root component type list of a SET or SEQUENCE.
*
* @constant
*/
export const _root_component_type_list_1_spec_for_TokenInfo = [
new $.ComponentSpec("version", false, $.hasTag(_TagClass.universal, 2)),
new $.ComponentSpec("serialNumber", false, $.hasTag(_TagClass.universal, 4)),
new $.ComponentSpec("manufacturerID", true, $.hasTag(_TagClass.universal, 12)),
new $.ComponentSpec("label", true, $.hasTag(_TagClass.context, 0)),
new $.ComponentSpec("tokenflags", false, $.hasTag(_TagClass.universal, 3)),
new $.ComponentSpec("seInfo", true, $.hasTag(_TagClass.universal, 16)),
new $.ComponentSpec("recordInfo", true, $.hasTag(_TagClass.context, 1)),
new $.ComponentSpec("supportedAlgorithms", true, $.hasTag(_TagClass.context, 2)),
];
/**
* @summary The Trailing Root Component Types of TokenInfo
* @description
*
* This is an array of `ComponentSpec`s that define how to decode the trailing root component type list of a SET or SEQUENCE.
*
* @constant
*/
export const _root_component_type_list_2_spec_for_TokenInfo = [];
/**
* @summary The Extension Addition Component Types of TokenInfo
* @description
*
* This is an array of `ComponentSpec`s that define how to decode the extension addition component type list of a SET or SEQUENCE.
*
* @constant
*/
export const _extension_additions_list_spec_for_TokenInfo = [
new $.ComponentSpec("issuerId", true, $.hasTag(_TagClass.context, 3)),
new $.ComponentSpec("holderId", true, $.hasTag(_TagClass.context, 4)),
new $.ComponentSpec("lastUpdate", true, $.hasTag(_TagClass.context, 5)),
new $.ComponentSpec("preferredLanguage", true, $.hasTag(_TagClass.universal, 19)),
];
let _cached_decoder_for_TokenInfo = null;
/**
* @summary Decodes an ASN.1 element into a(n) TokenInfo
* @function
* @param {_Element} el The element being decoded.
* @returns {TokenInfo} The decoded data structure.
*/
export function _decode_TokenInfo(el) {
if (!_cached_decoder_for_TokenInfo) {
_cached_decoder_for_TokenInfo = function (el) {
let version;
let serialNumber;
let manufacturerID;
let label;
let tokenflags;
let seInfo;
let recordInfo;
let supportedAlgorithms;
let issuerId;
let holderId;
let lastUpdate;
let preferredLanguage;
let _unrecognizedExtensionsList = [];
const callbacks = {
version: (_el) => {
version = _decode_TokenInfo_version(_el);
},
serialNumber: (_el) => {
serialNumber = $._decodeOctetString(_el);
},
manufacturerID: (_el) => {
manufacturerID = _decode_Label(_el);
},
label: (_el) => {
label = $._decode_implicit(() => _decode_Label)(_el);
},
tokenflags: (_el) => {
tokenflags = _decode_TokenFlags(_el);
},
seInfo: (_el) => {
seInfo = $._decodeSequenceOf(() => _decode_SecurityEnvironmentInfo)(_el);
},
recordInfo: (_el) => {
recordInfo = $._decode_implicit(() => _decode_RecordInfo)(_el);
},
supportedAlgorithms: (_el) => {
supportedAlgorithms = $._decode_implicit(() => $._decodeSequenceOf(() => _decode_AlgorithmInfo))(_el);
},
issuerId: (_el) => {
issuerId = $._decode_implicit(() => _decode_Label)(_el);
},
holderId: (_el) => {
holderId = $._decode_implicit(() => _decode_Label)(_el);
},
lastUpdate: (_el) => {
lastUpdate = $._decode_explicit(() => _decode_LastUpdate)(_el);
},
preferredLanguage: (_el) => {
preferredLanguage = $._decodePrintableString(_el);
},
};
$._parse_sequence(el, callbacks, _root_component_type_list_1_spec_for_TokenInfo, _extension_additions_list_spec_for_TokenInfo, _root_component_type_list_2_spec_for_TokenInfo, (ext) => {
_unrecognizedExtensionsList.push(ext);
});
return new TokenInfo(version, serialNumber, manufacturerID, label, tokenflags, seInfo, recordInfo, supportedAlgorithms, issuerId, holderId, lastUpdate, preferredLanguage, _unrecognizedExtensionsList);
};
}
return _cached_decoder_for_TokenInfo(el);
}
let _cached_encoder_for_TokenInfo = null;
/**
* @summary Encodes a(n) TokenInfo into an ASN.1 Element.
* @function
* @param value The element being encoded.
* @param elGetter A function that can be used to get new ASN.1 elements.
* @returns {_Element} The TokenInfo, encoded as an ASN.1 Element.
*/
export function _encode_TokenInfo(value, elGetter) {
if (!_cached_encoder_for_TokenInfo) {
_cached_encoder_for_TokenInfo = function (value) {
return $._encodeSequence([]
.concat([
/* REQUIRED */ _encode_TokenInfo_version(value.version, $.BER),
/* REQUIRED */ $._encodeOctetString(value.serialNumber, $.BER),
/* IF_ABSENT */ value.manufacturerID === undefined
? undefined
: _encode_Label(value.manufacturerID, $.BER),
/* IF_ABSENT */ value.label === undefined
? undefined
: $._encode_implicit(_TagClass.context, 0, () => _encode_Label, $.BER)(value.label, $.BER),
/* REQUIRED */ _encode_TokenFlags(value.tokenflags, $.BER),
/* IF_ABSENT */ value.seInfo === undefined
? undefined
: $._encodeSequenceOf(() => _encode_SecurityEnvironmentInfo, $.BER)(value.seInfo, $.BER),
/* IF_ABSENT */ value.recordInfo === undefined
? undefined
: $._encode_implicit(_TagClass.context, 1, () => _encode_RecordInfo, $.BER)(value.recordInfo, $.BER),
/* IF_ABSENT */ value.supportedAlgorithms ===
undefined
? undefined
: $._encode_implicit(_TagClass.context, 2, () => $._encodeSequenceOf(() => _encode_AlgorithmInfo, $.BER), $.BER)(value.supportedAlgorithms, $.BER),
], [
/* IF_ABSENT */ value.issuerId === undefined
? undefined
: $._encode_implicit(_TagClass.context, 3, () => _encode_Label, $.BER)(value.issuerId, $.BER),
/* IF_ABSENT */ value.holderId === undefined
? undefined
: $._encode_implicit(_TagClass.context, 4, () => _encode_Label, $.BER)(value.holderId, $.BER),
/* IF_ABSENT */ value.lastUpdate === undefined
? undefined
: $._encode_explicit(_TagClass.context, 5, () => _encode_LastUpdate, $.BER)(value.lastUpdate, $.BER),
/* IF_ABSENT */ value.preferredLanguage ===
undefined
? undefined
: $._encodePrintableString(value.preferredLanguage, $.BER),
], value._unrecognizedExtensionsList
? value._unrecognizedExtensionsList
: [])
.filter((c) => !!c), $.BER);
};
}
return _cached_encoder_for_TokenInfo(value, elGetter);
}
/* eslint-enable */