Message d’erreur
NotSupportedError: Unrecognized algorithm name
Le texte ci-dessus est celui de Node ; Node signale aussi « Unrecognized namedCurve » pour les courbes inconnues. Chrome affiche « Failed to execute 'generateKey' on 'SubtleCrypto': Algorithm: Unrecognized name », Firefox « Operation is not supported », Safari « The operation is not supported. » ; le nom de la DOMException, NotSupportedError, est la partie stable.
WebCrypto crypto.subtle — browsers & Node
Ce que cela signifie
L’algorithme (ou la courbe) que vous avez nommé ne fait pas partie de ceux que propose cette implémentation WebCrypto. Soit l’identifiant contient une faute de frappe, soit vous avez demandé quelque chose qui sort réellement de l’ensemble standard : le plus souvent secp256k1, que WebCrypto n’inclut pas bien qu’il s’agisse d’une courbe EC comme celles de la famille P-*. La vérification a lieu avant que le moindre élément de clé ne soit manipulé : le même appel réussit donc une fois le nom corrigé.
Pourquoi cela se produit
secp256k1 demandé à WebCrypto
fréquenteLe code Bitcoin/Ethereum suppose souvent que namedCurve: "secp256k1" fonctionnera comme P-256. Cela n’a jamais été le cas : le registre WebCrypto ne couvre que P-256, P-384 et P-521. (Le module crypto de Node, hors WebCrypto, prend bien en charge secp256k1.)
Noms de style JWT utilisés comme noms d’algorithme
fréquente« ES256 », « RS256 » ou « ECDSA_P256_SHA256 » sont des identifiants de JOSE ou d’autres écosystèmes. WebCrypto attend { name: "ECDSA", namedCurve: "P-256" } pour les clés et { name: "ECDSA", hash: "SHA-256" } pour les opérations.
Algorithmes récents sur des environnements d’exécution anciens
occasionnelleEd25519/X25519 sont arrivés dans WebCrypto entre 2023 et 2025 ; les anciens navigateurs, les anciennes versions de Node et certaines WebView les rejettent encore. Détectez leur prise en charge avant de vous en servir.
Comment corriger l’erreur
- 1.
Utiliser les identifiants WebCrypto exacts
Les noms sont comparés sans tenir compte de la casse, mais il doit s’agir des noms enregistrés ; les noms de courbes, eux, doivent être exacts. Notez les deux dictionnaires : generateKey/importKey prennent namedCurve, tandis que sign/verify prennent hash ; les confondre est une variante à part entière de cette erreur.
js const key = await crypto.subtle.generateKey( { name: "ECDSA", namedCurve: "P-256" }, // not "ES256", not "secp256r1" false, ["sign", "verify"], ); const sig = await crypto.subtle.sign({ name: "ECDSA", hash: "SHA-256" }, key.privateKey, data); - 2.
Pour secp256k1, utiliser une bibliothèque
Dans les navigateurs, une implémentation auditée en JavaScript pur est la voie habituelle ; dans Node, le module crypto intégré (hors WebCrypto) gère la courbe nativement : le code serveur a donc deux options.
js // browser: @noble/curves (audited, dependency-free) import { secp256k1 } from "@noble/curves/secp256k1"; const ok = secp256k1.verify(signature, msgHash, publicKey); // node: built-in crypto.generateKeyPairSync("ec", { namedCurve: "secp256k1" });