libsodium bietet eine kleine, bewusst kuratierte Auswahl an Primitiven hinter Funktionen, die sich nur schwer falsch verwenden lassen; die Bibliothek ist in PHP gebündelt, wird von vielen Bindings für andere Sprachen genutzt und steckt in Messaging-Apps. Signaturen gibt es nur mit Ed25519: Die Header von 1.0.22 (geprüft mit dem Paket aus Alpine 3.24.2) deklarieren keine ECDSA-Funktion; alles, was ES256 oder secp256k1 spricht, braucht also eine andere Bibliothek.
Das Signieren mit Ed25519 ist deterministisch, wie RFC 8032 es vorschreibt – zwei Signaturen derselben Nachricht waren identisch –, und die Funktionen crypto_sign_*_ph implementieren Ed25519ph, dessen Signaturen nicht mit einfachem Ed25519 austauschbar sind: Der einfache Verifizierer lehnte im Test eine solche Signatur ab. Der geheime Schlüssel ist 64 Byte lang, der 32-Byte-Seed gefolgt vom öffentlichen Schlüssel, während die meisten anderen Bibliotheken nur den Seed speichern; crypto_sign_ed25519_sk_to_seed und crypto_sign_seed_keypair konvertieren zwischen beiden Formen, wie das Beispiel zeigt.
Die Prüfung ist dort strikt, wo andere Implementierungen voneinander abweichen. Eine Signatur, in der S durch S + L ersetzt war – derselbe Wert modulo der Gruppenordnung, von RFC 8032 verboten –, wurde abgelehnt, ebenso eine Signatur, die gegen das neutrale Element, einen Punkt kleiner Ordnung, als öffentlichen Schlüssel geprüft wurde. Bibliotheken, die solche Eingaben akzeptieren, kommen in Grenzfällen zu einem anderen Ergebnis als libsodium – wichtig für Konsenssysteme, die sich über die Gültigkeit einig sein müssen. crypto_sign_verify_detached nimmt keine Signaturlänge entgegen und liest genau 64 Byte; prüfe die Länge also, bevor du die Funktion aufrufst.
Die Post-Quanten-Unterstützung in 1.0.22 beschränkt sich auf Schlüsselkapselung: crypto_kem_mlkem768_* (öffentliche Schlüssel mit 1.184 Byte, Chiffrate mit 1.088 Byte) und das hybride X-Wing (crypto_kem_xwing_*, 1.216 und 1.120 Byte), das auch die generischen Funktionen crypto_kem_* standardmäßig verwenden. ML-DSA oder andere Post-Quanten-Signaturen gibt es nicht. Schlüssel sind durchweg rohe Bytes – öffentliche Schlüssel und Seeds mit 32 Byte –, ohne Unterstützung für PEM, DER oder JWK. Vergleiche die Größen der KEMs im Post-Quanten-KEM-Playground.