Files
SuperVPN/output/Libraries/BouncyCastle.Crypto/Org/BouncyCastle/Crypto/Tls/DefaultTlsClient.cs
2025-10-09 09:57:24 +09:00

79 lines
2.1 KiB
C#

namespace Org.BouncyCastle.Crypto.Tls;
public abstract class DefaultTlsClient : AbstractTlsClient
{
protected TlsDHVerifier mDHVerifier;
public DefaultTlsClient()
: this(new DefaultTlsCipherFactory())
{
}
public DefaultTlsClient(TlsCipherFactory cipherFactory)
: this(cipherFactory, new DefaultTlsDHVerifier())
{
}
public DefaultTlsClient(TlsCipherFactory cipherFactory, TlsDHVerifier dhVerifier)
: base(cipherFactory)
{
mDHVerifier = dhVerifier;
}
public override int[] GetCipherSuites()
{
return new int[9] { 49195, 49187, 49161, 49199, 49191, 49171, 156, 60, 47 };
}
public override TlsKeyExchange GetKeyExchange()
{
int keyExchangeAlgorithm = TlsUtilities.GetKeyExchangeAlgorithm(mSelectedCipherSuite);
switch (keyExchangeAlgorithm)
{
case 7:
case 9:
case 11:
return CreateDHKeyExchange(keyExchangeAlgorithm);
case 3:
case 5:
return CreateDheKeyExchange(keyExchangeAlgorithm);
case 16:
case 18:
case 20:
return CreateECDHKeyExchange(keyExchangeAlgorithm);
case 17:
case 19:
return CreateECDheKeyExchange(keyExchangeAlgorithm);
case 1:
return CreateRsaKeyExchange();
default:
throw new TlsFatalAlert(80);
}
}
protected virtual TlsKeyExchange CreateDHKeyExchange(int keyExchange)
{
return new TlsDHKeyExchange(keyExchange, mSupportedSignatureAlgorithms, mDHVerifier, null);
}
protected virtual TlsKeyExchange CreateDheKeyExchange(int keyExchange)
{
return new TlsDheKeyExchange(keyExchange, mSupportedSignatureAlgorithms, mDHVerifier, null);
}
protected virtual TlsKeyExchange CreateECDHKeyExchange(int keyExchange)
{
return new TlsECDHKeyExchange(keyExchange, mSupportedSignatureAlgorithms, mNamedCurves, mClientECPointFormats, mServerECPointFormats);
}
protected virtual TlsKeyExchange CreateECDheKeyExchange(int keyExchange)
{
return new TlsECDheKeyExchange(keyExchange, mSupportedSignatureAlgorithms, mNamedCurves, mClientECPointFormats, mServerECPointFormats);
}
protected virtual TlsKeyExchange CreateRsaKeyExchange()
{
return new TlsRsaKeyExchange(mSupportedSignatureAlgorithms);
}
}