ring が提供するアルゴリズムは少数に絞られており、BoringSSL 由来のアセンブリと誤用しにくい API を備えています。nonce を選ぶ方法も、事前に計算したダイジェストに署名する方法も、珍しい形式の鍵を読み込む方法もありません。そのため高速で使い方を誤りにくい一方、作業の大半は他のスタックからの鍵や署名の変換になります。
エンコーディングはアルゴリズムの一部です。ECDSA_P256_SHA256_FIXED_SIGNING は 64 バイトの生の r‖s を、ECDSA_P256_SHA256_ASN1_SIGNING は DER を生成し、検証用にもそれぞれ対応する _FIXED と _ASN1 の定数があります。もう一方の定数で検証した署名は単に Unspecified で失敗するため、JWS の署名を ASN1 定数で検証したり、OpenSSL の署名を FIXED で検証したりすると、偽造された署名とまったく同じに見えます。サンプルでは両方の結果を示しています。署名にはランダムな nonce が使われ、s は正規化されず、検証は low-S と high-S のどちらも受け入れます。
秘密鍵は PKCS#8 DER としてしか読み込めず、Ed25519 鍵は公開鍵を含む PKCS#8 v2 でなければなりません。OpenSSL やほとんどのツールが書き出す 48 バイトの v1 形式は、Ed25519KeyPair::from_pkcs8 では VersionNotSupported で拒否されましたが、from_pkcs8_maybe_unchecked と from_seed_unchecked では受け入れられました。PEM、SEC1、JWK の秘密鍵は、JWK 変換ツールなどで先に変換する必要があります。公開鍵は SEC1 の点そのものです。public_key() は 65 バイトの非圧縮形式を返し、圧縮形式の点は受け付けられません。
対応する曲線は P-256 と P-384、それに Ed25519 だけです。P-521、secp256k1、ポスト量子アルゴリズムはありません。これらや FIPS 認証が必要なプロジェクトは、ring 互換の API を提供する aws-lc-rs に移行します。
ring の署名がどのエンコーディングかを確認するには、DER ⇄ 生形式の変換ツールに貼り付けてください。