Aller au contenu
ecdsa.com
Node.js cryptoNode.js crypto

Message d’erreur

Invalid key object type public, expected private.

Les deux noms varient selon la clé et l’opération : sign() avec une clé secrète signale « Invalid key object type secret, expected private. », verify() avec une clé secrète « Invalid key object type secret, expected private or public. » La fonction verify() accepte d’ailleurs une clé privée et effectue le contrôle avec sa moitié publique. La structure du message est stable.

Node.js crypto — TypeError, code ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE

Ce que cela signifie

Vous avez passé un KeyObject de la mauvaise classe pour l’opération : crypto.sign() a besoin d’une clé privée mais a reçu une clé publique (ou verify() a reçu une clé secrète, etc.). Les objets de clé de Node connaissent leur propre type (public, privé ou secret), et chaque API n’accepte que certains types.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Contrôler le type de clé au point d’entrée

    KeyObject.type vaut "public" | "private" | "secret". Une assertion d’une ligne transforme, dès le chargement, une erreur cryptographique déroutante en une erreur évidente.

    js
    import { createPrivateKey } from "node:crypto";
    
    const signingKey = createPrivateKey(pem);
    if (signingKey.type !== "private") {
      throw new Error(`expected private key, got ${signingKey.type}`);
    }
  2. 2.

    Utiliser chaque moitié de la paire pour sa propre opération

    La clé privée signe, la clé publique vérifie. Si vous ne détenez qu’une clé privée, dérivez-en la moitié publique pour la vérification au lieu de réutiliser l’objet privé partout.

    js
    import { createPublicKey, sign, verify } from "node:crypto";
    
    const signature = sign("sha256", data, privateKey);          // private → sign
    const publicKey = createPublicKey(privateKey);               // derive public half
    const ok = verify("sha256", data, publicKey, signature);     // public → verify

Erreurs associées

Parcourir toute la base de données des erreurs de signature