Mbed TLS 4 では、暗号処理が TF-PSA-Crypto と PSA Crypto API(psa_sign_message、psa_verify_message、psa_generate_key)に移されました。これは Arm の Trusted Firmware が使っているのと同じ API です。ここに挙げる事実は Alpine 3.24.2 のパッケージ(Mbed TLS 4.1.1、アップストリームではすでに 4.2.0 が出ていました)で確認したものです。組み込み向けのライブラリではどれも同じですが、使える機能はビルド設定によって変わります。
OpenSSL 由来のコードと異なるのは署名のエンコーディングです。PSA は DER ではなく生の r‖s 形式(P-256 では 64 バイト)を返します。X.509 や CMS で使う署名と OpenSSL で検証する署名は DER で包む必要があり、それらの相手から受け取った DER 署名は psa_verify_message に渡す前に展開しなければなりません。展開しないと PSA_ERROR_INVALID_SIGNATURE が返ります。これは偽造された署名や 3 バイトのデータに対するものと同じステータスです。変換には DER ⇄ 生形式の変換ツールを使ってください。
各鍵には許可するアルゴリズムを 1 つだけ定めたポリシーが付いているため、PSA_ALG_ECDSA(ランダムな nonce)と PSA_ALG_DETERMINISTIC_ECDSA(RFC 6979。RFC のテストベクトルを再現できました)のどちらを使うかは、サンプルのように鍵の作成時に決まります。s は正規化されず、検証は high-S も受け入れます。psa_sign_hash は事前に計算したダイジェストに署名します。
このビルドでは P-256、P-384、P-521、secp256k1、Brainpool の r1 曲線で署名と検証ができました。P-224 は使えず、Ed25519 の鍵生成は拒否されました(PSA_ERROR_NOT_SUPPORTED)。ポスト量子暗号への対応は LMS のハッシュベース署名の検証(MBEDTLS_LMS_C)に限られます。ML-KEM や ML-DSA の鍵タイプはなく、mldsa-native による実験的な ML-DSA ドライバー(TF_PSA_CRYPTO_PQCP_MLDSA_ENABLED)は、このビルドの設定ではコメントアウトされています。公開鍵は、PSA 経由では非圧縮形式の SEC1 の点として、pk レイヤー経由では SPKI DER として書き出されます。