Tengo una ECDSA privateKey/publicKey y quiero convertirla en JWK usando node.js y estoy usando WebCrypto API.
class KeyPair { constructor(privateKey, publicKey) { const algorithm = { name: "ECDSA", namedCurve: "P-256", }; subtle .importKey( "jwk", this.getPrivateKeyJWK(privateKey, publicKey), algorithm, false, ["sign"] ) .then((res) => (this._privateKey = res)); subtle .importKey("raw", publicKey, algorithm, false, ["verify"]) .then((res) => (this._publicKey = res)); } getPrivateKeyJWK(privateKey, publicKey) { let jwk = { // this is an example jwk key, other key types are Uint8Array objects kty: "EC", crv: "P-256", d: Buffer.from(privateKey) .toString("base64") .replace("+", "-") .replace("/", "_"), x: Buffer.from(publicKey.slice(1, 33)) .toString("base64") .replace("+", "-") .replace("/", "_"), y: Buffer.from(publicKey.slice(33, 66)) .toString("base64") .replace("+", "-") .replace("/", "_"), ext: true, }; return jwk; } }Sin embargo, cuando se llama a sutil.importKey, recibo el siguiente error:
node:internal/per_context/domexception:70 ErrorCaptureStackTrace(this); ^ DOMException [NotSupportedError]: Unrecognized name. at new DOMException (node:internal/per_context/domexception:70:5) at __node_internal_ (node:internal/util:477:10) at normalizeAlgorithm (node:internal/crypto/util:235:9) at SubtleCrypto.importKey (node:internal/crypto/webcrypto:471:15) at new EcdsaWallet (./EcdsaWallet.js:<line of first subtle.importKey call>:14) at Object.<anonymous> (./EcdsaWallet.js:<line of object creation>:14) at Module._compile (node:internal/modules/cjs/loader:1097:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1151:10) at Module.load (node:internal/modules/cjs/loader:975:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12)La clave que quiero importar es un par de claves públicas y privadas que se proporcionan como cadenas.