import * as asn1js from "asn1js"; import * as pvtsutils from "pvtsutils"; import * as pvutils from "pvutils"; import { EMPTY_STRING } from "./constants"; import { ECNamedCurves } from "./ECNamedCurves"; import { ECPublicKey, ECPublicKeyParameters } from "./ECPublicKey"; import { AsnError, ParameterError } from "./errors"; import { PkiObject, PkiObjectParameters } from "./PkiObject"; import * as Schema from "./Schema";
/** * Represents the PrivateKeyInfo structure described in [RFC5915](https://datatracker.ietf.org/doc/html/rfc5915)
*/
export class ECPrivateKey extends PkiObject implements IECPrivateKey {
public version!: number; public privateKey!: asn1js.OctetString; public namedCurve?: string; public publicKey?: ECPublicKey;
/** * Initializes a new instance of the {@link ECPrivateKey} class * @param parameters Initialization parameters
*/
constructor(parameters: ECPrivateKeyParameters = {}) { super();
this.version = pvutils.getParametersValue(parameters, VERSION, ECPrivateKey.defaultValues(VERSION)); this.privateKey = pvutils.getParametersValue(parameters, PRIVATE_KEY, ECPrivateKey.defaultValues(PRIVATE_KEY)); if (NAMED_CURVE in parameters) { this.namedCurve = pvutils.getParametersValue(parameters, NAMED_CURVE, ECPrivateKey.defaultValues(NAMED_CURVE));
} if (PUBLIC_KEY in parameters) { this.publicKey = pvutils.getParametersValue(parameters, PUBLIC_KEY, ECPrivateKey.defaultValues(PUBLIC_KEY));
}
if (parameters.json) { this.fromJSON(parameters.json);
}
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 VERSION): 1; publicstatic override defaultValues(memberName: typeof PRIVATE_KEY): asn1js.OctetString; publicstatic override defaultValues(memberName: typeof NAMED_CURVE): string; publicstatic override defaultValues(memberName: typeof PUBLIC_KEY): ECPublicKey; publicstatic override defaultValues(memberName: string): any { switch (memberName) { case VERSION: return1; case PRIVATE_KEY: returnnew asn1js.OctetString(); case NAMED_CURVE: return EMPTY_STRING; case PUBLIC_KEY: returnnew ECPublicKey(); 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) { case VERSION: return (memberValue === ECPrivateKey.defaultValues(memberName)); case PRIVATE_KEY: return (memberValue.isEqual(ECPrivateKey.defaultValues(memberName))); case NAMED_CURVE: return (memberValue === EMPTY_STRING); case PUBLIC_KEY: return ((ECPublicKey.compareWithDefault(NAMED_CURVE, memberValue.namedCurve)) &&
(ECPublicKey.compareWithDefault("x", memberValue.x)) &&
(ECPublicKey.compareWithDefault("y", memberValue.y))); default: returnsuper.defaultValues(memberName);
}
}
public toJSON(): ECPrivateKeyJson { if (!this.namedCurve || ECPrivateKey.compareWithDefault(NAMED_CURVE, this.namedCurve)) { thrownew Error("Not enough information for making JSON: absent \"namedCurve\" value");
}
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.