Saltar al contenido
ecdsa.com
WebCrypto crypto.subtle.importKeyWebCrypto

Mensaje de error

DataError: Data provided to an operation does not meet requirements

Lo que hay que comprobar es el nombre de la DOMException, DataError; el texto del mensaje varía según el entorno de ejecución. Firefox y Safari muestran la frase genérica de arriba; Chrome a menudo deja el mensaje vacío o indica el motivo («The imported EC key specifies a different curve than requested»); Node imprime «Invalid keyData» o un motivo concreto, como «Named curve mismatch».

WebCrypto crypto.subtle.importKey — browsers & Node

Qué significa

importKey (o unwrapKey) rechazó los bytes de la clave: no se pueden analizar en el formato declarado o su contenido contradice los parámetros del algoritmo (curva incorrecta, campos JWK que no concuerdan). Es el equivalente en WebCrypto de «estos bytes no son la clave que dices que son», y se lanza antes de que se cree ningún objeto de clave.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Convertir correctamente PEM → ArrayBuffer

    Quita las líneas de armadura, decodifica el cuerpo de base64 y elige el formato según la etiqueta PEM: PUBLIC KEY → spki, PRIVATE KEY → pkcs8.

    js
    function pemToArrayBuffer(pem) {
      const b64 = pem.replace(/-----[^-]+-----/g, "").replace(/\s+/g, "");
      return Uint8Array.from(atob(b64), (c) => c.charCodeAt(0)).buffer;
    }
    
    const key = await crypto.subtle.importKey(
      "spki", pemToArrayBuffer(publicKeyPem),
      { name: "ECDSA", namedCurve: "P-256" },
      false, ["verify"],
    );
  2. 2.

    Preferir JWK cuando tienes material de clave en JSON

    Los endpoints JWKS ya sirven objetos listos para WebCrypto: sin conversión binaria, y crv viaja con la clave.

    js
    const key = await crypto.subtle.importKey(
      "jwk", jwk,
      { name: "ECDSA", namedCurve: jwk.crv },
      false, ["verify"],
    );
  3. 3.

    Confirmar qué son realmente los bytes

    Pega la clave en el decodificador de certificados o en el verificador de firmas de abajo: ambos analizan SPKI/PKCS#8/JWK localmente e indican la curva y el tipo de clave reales, lo que suele revelar la discrepancia de inmediato.

Errores relacionados

Explorar toda la base de datos de errores de firma