DefaultTlsSrpConfigVerifier.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Collections;
  5. using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
  6. using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto;
  7. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  8. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls
  9. {
  10. public class DefaultTlsSrpConfigVerifier
  11. : TlsSrpConfigVerifier
  12. {
  13. private static readonly IList DefaultGroups = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateArrayList();
  14. static DefaultTlsSrpConfigVerifier()
  15. {
  16. DefaultGroups.Add(Srp6StandardGroups.rfc5054_1024);
  17. DefaultGroups.Add(Srp6StandardGroups.rfc5054_1536);
  18. DefaultGroups.Add(Srp6StandardGroups.rfc5054_2048);
  19. DefaultGroups.Add(Srp6StandardGroups.rfc5054_3072);
  20. DefaultGroups.Add(Srp6StandardGroups.rfc5054_4096);
  21. DefaultGroups.Add(Srp6StandardGroups.rfc5054_6144);
  22. DefaultGroups.Add(Srp6StandardGroups.rfc5054_8192);
  23. }
  24. // IList is (SRP6Group)
  25. protected readonly IList m_groups;
  26. /// <summary>Accept only the group parameters specified in RFC 5054 Appendix A.</summary>
  27. public DefaultTlsSrpConfigVerifier()
  28. : this(DefaultGroups)
  29. {
  30. }
  31. /// <summary>Specify a custom set of acceptable group parameters.</summary>
  32. /// <param name="groups">an <see cref="IList"/> of acceptable <see cref="Srp6Group"/>.</param>
  33. public DefaultTlsSrpConfigVerifier(IList groups)
  34. {
  35. this.m_groups = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateArrayList(groups);
  36. }
  37. public virtual bool Accept(TlsSrpConfig srpConfig)
  38. {
  39. foreach (Srp6Group group in m_groups)
  40. {
  41. if (AreGroupsEqual(srpConfig, group))
  42. return true;
  43. }
  44. return false;
  45. }
  46. protected virtual bool AreGroupsEqual(TlsSrpConfig a, Srp6Group b)
  47. {
  48. BigInteger[] ng = a.GetExplicitNG();
  49. return AreParametersEqual(ng[0], b.N) && AreParametersEqual(ng[1], b.G);
  50. }
  51. protected virtual bool AreParametersEqual(BigInteger a, BigInteger b)
  52. {
  53. return a == b || a.Equals(b);
  54. }
  55. }
  56. }
  57. #pragma warning restore
  58. #endif