libsodium は、明確な設計方針に基づいて厳選した少数のプリミティブを、誤用しにくい関数で提供しています。PHP に同梱され、多くの言語バインディングで使われ、メッセージングアプリにも組み込まれています。署名は Ed25519 のみです。1.0.22 のヘッダー(Alpine 3.24.2 のパッケージで確認)は ECDSA の関数を 1 つも宣言していないため、ES256 や secp256k1 を扱うものには別のライブラリが必要です。
Ed25519 の署名は、RFC 8032 の規定どおり決定的です(同じメッセージの 2 つの署名は同一でした)。crypto_sign_*_ph 関数は Ed25519ph を実装していますが、その署名は通常の Ed25519 の署名と互換性がなく、チェックでは通常の検証関数が Ed25519ph の署名を拒否しました。秘密鍵は 64 バイトで、32 バイトのシードの後に公開鍵が続きます。一方、ほかのほとんどのライブラリはシードだけを保存します。サンプルのように、crypto_sign_ed25519_sk_to_seed と crypto_sign_seed_keypair で両者を相互に変換できます。
ほかの実装で挙動が分かれる点について、libsodium の検証は厳格です。S を S + L に置き換えた署名(群の位数を法として同じ値であり、RFC 8032 で禁止されています)は拒否され、小さい位数の単位元(identity point)を公開鍵として検証した署名も拒否されました。これらの入力を受け入れるライブラリは、境界的なケースで libsodium と判定が食い違います。これは、有効性について合意しなければならないコンセンサスシステムでは重要です。crypto_sign_verify_detached は署名の長さを受け取らず、ちょうど 64 バイトを読み込むため、呼び出す前に長さを確認してください。
1.0.22 のポスト量子暗号への対応は、鍵カプセル化だけです。crypto_kem_mlkem768_*(公開鍵 1184 バイト、暗号文 1088 バイト)と、ハイブリッドの X-Wing(crypto_kem_xwing_*、1216 バイトと 1120 バイト)があり、汎用の crypto_kem_* 関数もデフォルトで X-Wing を使います。ML-DSA などのポスト量子署名はありません。鍵は一貫して生のバイト列(32 バイトの公開鍵とシード)で、PEM、DER、JWK には対応していません。KEM のサイズはポスト量子 KEM ラボで比較してください。