BouncyCastle.Cryptography(Portable.BouncyCastle に代わるパッケージ)は純粋なマネージドコードです。結果が Windows CNG や Linux の OpenSSL のバージョンに左右されないことこそが、System.Security.Cryptography と併用する価値です。文字列ベースの SignerUtilities API と、ECDsaSigner などの低レベルのクラスを提供しています。
ECDSA のデフォルトは .NET ではなく OpenSSL の伝統に従っています。SHA-256withECDSA は DER を生成し、SHA-256withPLAIN-ECDSA は .NET 自身の ECDsa や JWS が使う 64 バイトの生の r‖s を返します。この 2 つを取り違えるのが、1 つのアプリケーション内で両ライブラリを使うときの典型的な相互運用の失敗です。また、不正な入力に対しては例外をスローせず、常に false を返します。nonce は SignerUtilities ではランダムで、HMacDsaKCalculator を指定した ECDsaSigner では RFC 6979 のテストベクトルを再現できました。s は正規化されず、検証は high-S も受け入れます。
対応範囲こそが、このライブラリが追加される理由です。P-224〜P-521、secp256k1、Brainpool の r1 曲線、サンプルにある Ed25519 と Ed448、そして MLKemEncapsulator、MLDsaSigner、SlhDsaSigner による ML-KEM、ML-DSA、SLH-DSA に対応しています。これらはすべて、基本クラスライブラリがポスト量子暗号に一切対応していないと報告した同じ Linux イメージ上で動作しました。ポスト量子署名ラボでアルゴリズムを試してください。
PemWriter は EC 秘密鍵を SEC1 の -----BEGIN EC PRIVATE KEY----- として書き出し、PemReader はそれを AsymmetricCipherKeyPair として返します。PKCS#8 は PrivateKeyInfoFactory を経由します。アセンブリ自体のバージョンはすべての 2.x リリースで厳密な名前の 2.0.0 なので、動作を比較するときはパッケージのバージョン(ここでは 2.7.0)を確認してください。