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

DefaultTlsSrpConfigVerifier

using Org.BouncyCastle.Math; using Org.BouncyCastle.Tls.Crypto; using System.Collections.Generic; namespace Org.BouncyCastle.Tls { public class DefaultTlsSrpConfigVerifier : TlsSrpConfigVerifier { private static readonly List<Srp6Group> DefaultGroups; protected readonly IList<Srp6Group> m_groups; static DefaultTlsSrpConfigVerifier() { DefaultGroups = new List<Srp6Group>(); DefaultGroups.Add(Srp6StandardGroups.rfc5054_1024); DefaultGroups.Add(Srp6StandardGroups.rfc5054_1536); DefaultGroups.Add(Srp6StandardGroups.rfc5054_2048); DefaultGroups.Add(Srp6StandardGroups.rfc5054_3072); DefaultGroups.Add(Srp6StandardGroups.rfc5054_4096); DefaultGroups.Add(Srp6StandardGroups.rfc5054_6144); DefaultGroups.Add(Srp6StandardGroups.rfc5054_8192); } public DefaultTlsSrpConfigVerifier() : this(DefaultGroups) { } public DefaultTlsSrpConfigVerifier(IList<Srp6Group> groups) { m_groups = new List<Srp6Group>(groups); } public virtual bool Accept(TlsSrpConfig srpConfig) { foreach (Srp6Group group in m_groups) { if (AreGroupsEqual(srpConfig, group)) return true; } return false; } protected virtual bool AreGroupsEqual(TlsSrpConfig a, Srp6Group b) { BigInteger[] explicitNG = a.GetExplicitNG(); if (AreParametersEqual(explicitNG[0], b.N)) return AreParametersEqual(explicitNG[1], b.G); return false; } protected virtual bool AreParametersEqual(BigInteger a, BigInteger b) { if (a != b) return a.Equals(b); return true; } } }