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