Aller au contenu
ecdsa.com
ring (Rust crate)Rust

Message d’erreur

KeyRejected("InvalidEncoding")

Également affiché sous la forme

  • KeyRejected("WrongAlgorithm")
  • called `Result::unwrap()` on an `Err` value: KeyRejected("InvalidEncoding")

La chaîne du motif varie : `InvalidEncoding`, `WrongAlgorithm`, `InconsistentComponents`, `TooSmall`… `Display` n’affiche que le motif, par exemple `InvalidEncoding`.

ring (Rust crate) — ring::error::KeyRejected from EcdsaKeyPair::from_pkcs8 / Ed25519KeyPair::from_pkcs8

Ce que cela signifie

ring a refusé les octets de la clé privée. ring accepte exactement un encodage par type de clé (PKCS#8 encodé en DER, v1 ou v2, pour ECDSA et Ed25519, et pour RSA également PKCS#1 DER via `from_der`) et ne donne qu’un motif succinct : `InvalidEncoding` lorsque les octets n’ont pas cette structure, `WrongAlgorithm` lorsqu’il s’agit d’un document PKCS#8 valide pour un autre algorithme ou une autre courbe. ring n’analyse jamais lui-même le PEM.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Décoder le PEM et vérifier son étiquette

    Utilisez un analyseur PEM, exigez l’étiquette `PRIVATE KEY` et passez le contenu décodé à ring.

    rust
    // Cargo.toml: pem = "3"
    let pem = pem::parse(std::fs::read_to_string("key.pem")?)?;
    anyhow::ensure!(pem.tag() == "PRIVATE KEY", "expected PKCS#8, got {}", pem.tag());
    let key_pair = EcdsaKeyPair::from_pkcs8(&ECDSA_P256_SHA256_FIXED_SIGNING, pem.contents(), &rng)
        .map_err(|e| anyhow::anyhow!("key rejected: {e}"))?;
  2. 2.

    Convertir les anciens fichiers de clés en PKCS#8 DER

    OpenSSL convertit les clés privées SEC 1 et PKCS#1 en PKCS#8 ; `-outform DER` écrit exactement les octets qu’attend ring.

    bash
    openssl pkcs8 -topk8 -nocrypt -in ec-sec1.pem -outform DER -out key.pk8   # SEC 1 -> PKCS#8 DER

Erreurs associées

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