import * as asn1js from "asn1js"; import * as pvutils from "pvutils"; import { EMPTY_STRING } from "./constants"; import { AsnError } from "./errors"; import { GeneralName, GeneralNameJson, GeneralNameSchema } from "./GeneralName"; import { PkiObject, PkiObjectParameters } from "./PkiObject"; import * as Schema from "./Schema";
const BASE = "base"; const MINIMUM = "minimum"; const MAXIMUM = "maximum"; const CLEAR_PROPS = [
BASE,
MINIMUM,
MAXIMUM
];
export interface IGeneralSubtree {
base: GeneralName;
minimum: number | asn1js.Integer;
maximum?: number | asn1js.Integer;
}
export interface GeneralSubtreeJson {
base: GeneralNameJson;
minimum?: number | asn1js.IntegerJson;
maximum?: number | asn1js.IntegerJson;
}
export type GeneralSubtreeParameters = PkiObjectParameters & Partial<IGeneralSubtree>;
/** * Represents the GeneralSubtree structure described in [RFC5280](https://datatracker.ietf.org/doc/html/rfc5280)
*/
export class GeneralSubtree extends PkiObject implements IGeneralSubtree {
public base!: GeneralName; public minimum!: number | asn1js.Integer; public maximum?: number | asn1js.Integer;
/** * Initializes a new instance of the {@link GeneralSubtree} class * @param parameters Initialization parameters
*/
constructor(parameters: GeneralSubtreeParameters = {}) { super();
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 BASE): GeneralName; publicstatic override defaultValues(memberName: typeof MINIMUM): number; publicstatic override defaultValues(memberName: typeof MAXIMUM): number; publicstatic override defaultValues(memberName: string): any { switch (memberName) { case BASE: returnnew GeneralName(); case MINIMUM: return0; case MAXIMUM: return0; default: returnsuper.defaultValues(memberName);
}
}
public fromSchema(schema: Schema.SchemaType): void { // Clear input data first
pvutils.clearProps(schema, CLEAR_PROPS);
// Check the schema is valid const asn1 = asn1js.compareSchema(schema,
schema,
GeneralSubtree.schema({
names: {
base: {
names: {
blockName: BASE
}
},
minimum: MINIMUM,
maximum: MAXIMUM
}
})
);
AsnError.assertSchema(asn1, this.className);
// Get internal properties from parsed schema this.base = new GeneralName({ schema: asn1.result.base });
if (MINIMUM in asn1.result) { if (asn1.result.minimum.valueBlock.isHexOnly) this.minimum = asn1.result.minimum; else this.minimum = asn1.result.minimum.valueBlock.valueDec;
}
if (MAXIMUM in asn1.result) { if (asn1.result.maximum.valueBlock.isHexOnly) this.maximum = asn1.result.maximum; else this.maximum = asn1.result.maximum.valueBlock.valueDec;
}
}
public toSchema(): asn1js.Sequence { //#region Create array for output sequence const outputArray = [];
outputArray.push(this.base.toSchema());
if (this.minimum !== 0) {
let valueMinimum: number | asn1js.Integer = 0;
if (this.minimum instanceof asn1js.Integer) {
valueMinimum = this.minimum;
} else {
valueMinimum = new asn1js.Integer({ value: this.minimum });
}
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.