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)
        {
        }
    }
}