Pular para o conteúdo
ecdsa.com
Node.js cryptoMódulo crypto do Node.js

Mensagem de erro

Invalid JWK EC key

Node.js crypto — TypeError, code ERR_CRYPTO_INVALID_JWK

O que significa

createPublicKey/createPrivateKey com format: "jwk" rejeitou o objeto JWK: faltam membros obrigatórios, as coordenadas não podem ser decodificadas ou o ponto (x, y) não está de fato na curva indicada. O Node valida o ponto na importação, então uma coordenada corrompida ou truncada é detectada aqui, em vez de produzir uma chave que nunca verifica nenhuma assinatura. As mesmas verificações acontecem quer a JWK venha de um endpoint JWKS, de um arquivo de configuração ou de outro serviço — o erro aponta para o objeto, não para o transporte.

Por que acontece

Como corrigir

  1. 1.

    Validar a estrutura da JWK antes de importá-la

    Confira os membros e os comprimentos após a decodificação. Para P-256, x e y precisam decodificar, cada um, para exatamente 32 bytes.

    js
    const x = Buffer.from(jwk.x, "base64url");
    const y = Buffer.from(jwk.y, "base64url");
    console.log(jwk.kty, jwk.crv, x.length, y.length); // EC P-256 32 32
  2. 2.

    Completar coordenadas curtas com zeros à esquerda

    Se quem gerou o valor removeu os zeros à esquerda, restaure o comprimento fixo antes de montar a JWK.

    js
    const pad32 = (b) => Buffer.concat([Buffer.alloc(32 - b.length), b]);
    jwk.x = pad32(Buffer.from(jwk.x, "base64url")).toString("base64url");
    jwk.y = pad32(Buffer.from(jwk.y, "base64url")).toString("base64url");
    const key = crypto.createPublicKey({ key: jwk, format: "jwk" });
  3. 3.

    Regenerar a partir de uma fonte confiável

    Se as coordenadas não passam na validação e não foi você quem montou a JWK, busque-a de novo no endpoint JWKS do emissor em vez de consertar bytes — uma JWK que precisa de cirurgia é uma JWK em que você não deve confiar.

Erros relacionados

Ver toda a base de erros de assinatura