Zum Inhalt springen
ecdsa.com
ring (Rust crate)Rust

Fehlermeldung

KeyRejected("InvalidEncoding")

Auch ausgegeben als

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

Der Grund variiert: `InvalidEncoding`, `WrongAlgorithm`, `InconsistentComponents`, `TooSmall` … `Display` gibt nur den Grund aus, zum Beispiel `InvalidEncoding`.

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

Was der Fehler bedeutet

ring hat die Bytes des privaten Schlüssels abgelehnt. ring akzeptiert pro Schlüsseltyp genau eine Kodierung – DER-kodiertes PKCS#8 (v1 oder v2) für ECDSA und Ed25519, bei RSA zusätzlich PKCS#1 als DER über `from_der` – und meldet nur einen kurzen Grund: `InvalidEncoding`, wenn die Bytes nicht diese Struktur haben, `WrongAlgorithm`, wenn sie ein gültiges PKCS#8-Dokument für einen anderen Algorithmus oder eine andere Kurve sind. PEM parst ring nie selbst.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    PEM dekodieren und sein Label prüfen

    Verwende einen PEM-Parser, bestehe auf dem Label `PRIVATE KEY` und übergib den dekodierten Inhalt an 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.

    Veraltete Schlüsseldateien in PKCS#8 (DER) konvertieren

    OpenSSL konvertiert private Schlüssel im Format SEC 1 und PKCS#1 in PKCS#8; `-outform DER` schreibt genau die Bytes, die ring erwartet.

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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen