import * as asn1js from "asn1js"; import * as pvutils from "pvutils"; import * as common from "./common"; import { AlgorithmIdentifier, AlgorithmIdentifierJson, AlgorithmIdentifierSchema } from "./AlgorithmIdentifier"; import { ECPublicKey } from "./ECPublicKey"; import { RSAPublicKey } from "./RSAPublicKey"; import * as Schema from "./Schema"; import { PkiObject, PkiObjectParameters } from "./PkiObject"; import { AsnError } from "./errors"; import { EMPTY_STRING } from "./constants";
public algorithm!: AlgorithmIdentifier; public subjectPublicKey!: asn1js.BitString; private _parsedKey?: ECPublicKey | RSAPublicKey | null; public get parsedKey(): ECPublicKey | RSAPublicKey | undefined { if (this._parsedKey === undefined) { switch (this.algorithm.algorithmId) { // TODO Use fabric case"1.2.840.10045.2.1": // ECDSA if ("algorithmParams" in this.algorithm) { if (this.algorithm.algorithmParams.constructor.blockName() === asn1js.ObjectIdentifier.blockName()) { try { this._parsedKey = new ECPublicKey({
namedCurve: this.algorithm.algorithmParams.valueBlock.toString(),
schema: this.subjectPublicKey.valueBlock.valueHexView
});
} catch { // nothing
} // Could be a problems during recognition of internal public key data here. Let's ignore them.
}
} break; case"1.2.840.113549.1.1.1": // RSA
{ const publicKeyASN1 = asn1js.fromBER(this.subjectPublicKey.valueBlock.valueHexView); if (publicKeyASN1.offset !== -1) { try { this._parsedKey = new RSAPublicKey({ schema: publicKeyASN1.result });
} catch { // nothing
} // Could be a problems during recognition of internal public key data here. Let's ignore them.
}
} break; default:
}
this._parsedKey ||= null;
}
return this._parsedKey || undefined;
} public set parsedKey(value: ECPublicKey | RSAPublicKey | undefined) { this._parsedKey = value;
}
//#region Get internal properties from parsed schema this.algorithm = new AlgorithmIdentifier({ schema: asn1.result.algorithm }); this.subjectPublicKey = asn1.result.subjectPublicKey; //#endregion
}
public toSchema(): asn1js.Sequence {
return (new asn1js.Sequence({
value: [ this.algorithm.toSchema(), this.subjectPublicKey
]
}));
}
public toJSON(): PublicKeyInfoJson | JsonWebKey { //#region Return common value in case we do not have enough info fo making JWK if (!this.parsedKey) {
return {
algorithm: this.algorithm.toJSON(),
subjectPublicKey: this.subjectPublicKey.toJSON(),
};
} //#endregion
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.