<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />

BcDefaultTlsCredentialedSigner

Credentialed class for generating signatures based on the use of primitives from the BC light-weight API.
using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Parameters; using System; namespace Org.BouncyCastle.Tls.Crypto.Impl.BC { public class BcDefaultTlsCredentialedSigner : DefaultTlsCredentialedSigner { private static BcTlsCertificate GetEndEntity(BcTlsCrypto crypto, Certificate certificate) { if (certificate == null || certificate.IsEmpty) throw new ArgumentException("No certificate"); return BcTlsCertificate.Convert(crypto, certificate.GetCertificateAt(0)); } private static TlsSigner MakeSigner(BcTlsCrypto crypto, AsymmetricKeyParameter privateKey, Certificate certificate, SignatureAndHashAlgorithm signatureAndHashAlgorithm) { if (!(privateKey is RsaKeyParameters)) { if (!(privateKey is DsaPrivateKeyParameters)) { if (!(privateKey is ECPrivateKeyParameters)) { if (!(privateKey is Ed25519PrivateKeyParameters)) { if (!(privateKey is Ed448PrivateKeyParameters)) throw new ArgumentException("'privateKey' type not supported: " + privateKey.GetType().FullName); return new BcTlsEd448Signer(crypto, (Ed448PrivateKeyParameters)privateKey); } return new BcTlsEd25519Signer(crypto, (Ed25519PrivateKeyParameters)privateKey); } ECPrivateKeyParameters privateKey2 = (ECPrivateKeyParameters)privateKey; if (signatureAndHashAlgorithm != null) { int signatureScheme = SignatureScheme.From(signatureAndHashAlgorithm); if (SignatureScheme.IsECDsa(signatureScheme)) return new BcTlsECDsa13Signer(crypto, privateKey2, signatureScheme); } return new BcTlsECDsaSigner(crypto, privateKey2); } return new BcTlsDsaSigner(crypto, (DsaPrivateKeyParameters)privateKey); } RsaKeyParameters privateKey3 = (RsaKeyParameters)privateKey; if (signatureAndHashAlgorithm != null) { int signatureScheme2 = SignatureScheme.From(signatureAndHashAlgorithm); if (SignatureScheme.IsRsaPss(signatureScheme2)) return new BcTlsRsaPssSigner(crypto, privateKey3, signatureScheme2); } RsaKeyParameters pubKeyRsa = GetEndEntity(crypto, certificate).GetPubKeyRsa(); return new BcTlsRsaSigner(crypto, privateKey3, pubKeyRsa); } public BcDefaultTlsCredentialedSigner(TlsCryptoParameters cryptoParams, BcTlsCrypto crypto, AsymmetricKeyParameter privateKey, Certificate certificate, SignatureAndHashAlgorithm signatureAndHashAlgorithm) : base(cryptoParams, MakeSigner(crypto, privateKey, certificate, signatureAndHashAlgorithm), certificate, signatureAndHashAlgorithm) { } } }