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

SrpTlsServer

using Org.BouncyCastle.Tls.Crypto; using System.Collections.Generic; namespace Org.BouncyCastle.Tls { public class SrpTlsServer : AbstractTlsServer { private static readonly int[] DefaultCipherSuites = new int[6] { 49186, 49183, 49185, 49182, 49184, 49181 }; protected readonly TlsSrpIdentityManager m_srpIdentityManager; protected byte[] m_srpIdentity; protected TlsSrpLoginParameters m_srpLoginParameters; public SrpTlsServer(TlsCrypto crypto, TlsSrpIdentityManager srpIdentityManager) : base(crypto) { m_srpIdentityManager = srpIdentityManager; } protected virtual TlsCredentialedSigner GetDsaSignerCredentials() { throw new TlsFatalAlert(80); } protected virtual TlsCredentialedSigner GetRsaSignerCredentials() { throw new TlsFatalAlert(80); } protected override ProtocolVersion[] GetSupportedVersions() { return ProtocolVersion.TLSv12.Only(); } protected override int[] GetSupportedCipherSuites() { return TlsUtilities.GetSupportedCipherSuites(Crypto, DefaultCipherSuites); } public override void ProcessClientExtensions(IDictionary<int, byte[]> clientExtensions) { base.ProcessClientExtensions(clientExtensions); m_srpIdentity = TlsSrpUtilities.GetSrpExtension(clientExtensions); } public override int GetSelectedCipherSuite() { int selectedCipherSuite = base.GetSelectedCipherSuite(); if (TlsSrpUtilities.IsSrpCipherSuite(selectedCipherSuite)) { if (m_srpIdentity != null) m_srpLoginParameters = m_srpIdentityManager.GetLoginParameters(m_srpIdentity); if (m_srpLoginParameters == null) throw new TlsFatalAlert(115); } return selectedCipherSuite; } public override TlsCredentials GetCredentials() { switch (m_context.SecurityParameters.KeyExchangeAlgorithm) { case 21: return null; case 22: return GetDsaSignerCredentials(); case 23: return GetRsaSignerCredentials(); default: throw new TlsFatalAlert(80); } } public override TlsSrpLoginParameters GetSrpLoginParameters() { return m_srpLoginParameters; } } }