import * as asn1js from "asn1js"; import * as pvtsutils from "pvtsutils"; import * as pvutils from "pvutils"; import { RelativeDistinguishedNames, RelativeDistinguishedNamesSchema } from "./RelativeDistinguishedNames"; import { SingleResponse, SingleResponseJson, SingleResponseSchema } from "./SingleResponse"; import { Extension, ExtensionJson } from "./Extension"; import { Extensions, ExtensionsSchema } from "./Extensions"; import * as Schema from "./Schema"; import { AsnError } from "./errors"; import { PkiObject, PkiObjectParameters } from "./PkiObject"; import { EMPTY_BUFFER } from "./constants";
public version?: number; public tbsView!: Uint8Array; /** * @deprecated Since version 3.0.0
*/ public get tbs(): ArrayBuffer { return pvtsutils.BufferSourceConverter.toArrayBuffer(this.tbsView);
}
/** * @deprecated Since version 3.0.0
*/ public set tbs(value: ArrayBuffer) { this.tbsView = new Uint8Array(value);
} public responderID: any; public producedAt!: Date; public responses!: SingleResponse[]; public responseExtensions?: Extension[];
/** * Initializes a new instance of the {@link ResponseData} class * @param parameters Initialization parameters
*/
constructor(parameters: ResponseDataParameters = {}) { super();
this.tbsView = new Uint8Array(pvutils.getParametersValue(parameters, TBS, ResponseData.defaultValues(TBS))); if (VERSION in parameters) { this.version = pvutils.getParametersValue(parameters, VERSION, ResponseData.defaultValues(VERSION));
} this.responderID = pvutils.getParametersValue(parameters, RESPONDER_ID, ResponseData.defaultValues(RESPONDER_ID)); this.producedAt = pvutils.getParametersValue(parameters, PRODUCED_AT, ResponseData.defaultValues(PRODUCED_AT)); this.responses = pvutils.getParametersValue(parameters, RESPONSES, ResponseData.defaultValues(RESPONSES)); if (RESPONSE_EXTENSIONS in parameters) { this.responseExtensions = pvutils.getParametersValue(parameters, RESPONSE_EXTENSIONS, ResponseData.defaultValues(RESPONSE_EXTENSIONS));
}
if (parameters.schema) { this.fromSchema(parameters.schema);
}
}
/** * Returns default values for all class members * @param memberName String name for a class member * @returns Default value
*/ publicstatic override defaultValues(memberName: typeof TBS): ArrayBuffer; publicstatic override defaultValues(memberName: typeof VERSION): number; publicstatic override defaultValues(memberName: typeof RESPONDER_ID): any; publicstatic override defaultValues(memberName: typeof PRODUCED_AT): Date; publicstatic override defaultValues(memberName: typeof RESPONSES): SingleResponse[]; publicstatic override defaultValues(memberName: typeof RESPONSE_EXTENSIONS): Extension[]; publicstatic override defaultValues(memberName: string): any { switch (memberName) { case VERSION: return0; case TBS: return EMPTY_BUFFER; case RESPONDER_ID: return {}; case PRODUCED_AT: returnnew Date(0, 0, 0); case RESPONSES: case RESPONSE_EXTENSIONS: return []; default: returnsuper.defaultValues(memberName);
}
}
/** * Compare values with default values for all class members * @param memberName String name for a class member * @param memberValue Value to compare with default value
*/ publicstatic compareWithDefault(memberName: string, memberValue: any): boolean { switch (memberName) { // TODO version? case TBS: return (memberValue.byteLength === 0); case RESPONDER_ID: return (Object.keys(memberValue).length === 0); case PRODUCED_AT: return (memberValue === ResponseData.defaultValues(memberName)); case RESPONSES: case RESPONSE_EXTENSIONS: return (memberValue.length === 0); default: returnsuper.defaultValues(memberName);
}
}
//#region Get internal properties from parsed schema this.tbsView = (asn1.result.ResponseData as asn1js.Sequence).valueBeforeDecodeView;
if (RESPONSE_DATA_VERSION in asn1.result) this.version = asn1.result[RESPONSE_DATA_VERSION].valueBlock.valueDec;
if (asn1.result[RESPONSE_DATA_RESPONDER_ID].idBlock.tagNumber === 1) this.responderID = new RelativeDistinguishedNames({ schema: asn1.result[RESPONSE_DATA_RESPONDER_ID].valueBlock.value[0] }); else this.responderID = asn1.result[RESPONSE_DATA_RESPONDER_ID].valueBlock.value[0]; // OCTET_STRING
this.producedAt = asn1.result[RESPONSE_DATA_PRODUCED_AT].toDate(); this.responses = Array.from(asn1.result[RESPONSE_DATA_RESPONSES], element => new SingleResponse({ schema: element }));
if (RESPONSE_DATA_RESPONSE_EXTENSIONS in asn1.result) this.responseExtensions = Array.from(asn1.result[RESPONSE_DATA_RESPONSE_EXTENSIONS].valueBlock.value, element => new Extension({ schema: element })); //#endregion
}
public toSchema(encodeFlag = false): Schema.SchemaType { //#region Decode stored TBS value
let tbsSchema;
if (encodeFlag === false) { if (!this.tbsView.byteLength) {// No stored certificate TBS part return ResponseData.schema();
}
const asn1 = asn1js.fromBER(this.tbsView);
AsnError.assert(asn1, "TBS Response Data");
tbsSchema = asn1.result;
} //#endregion //#region Create TBS schema via assembling from TBS parts else { const outputArray = [];
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.