GenericPolynomialExtensionField.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  5. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field
  6. {
  7. internal class GenericPolynomialExtensionField
  8. : IPolynomialExtensionField
  9. {
  10. protected readonly IFiniteField subfield;
  11. protected readonly IPolynomial minimalPolynomial;
  12. internal GenericPolynomialExtensionField(IFiniteField subfield, IPolynomial polynomial)
  13. {
  14. this.subfield = subfield;
  15. this.minimalPolynomial = polynomial;
  16. }
  17. public virtual BigInteger Characteristic
  18. {
  19. get { return subfield.Characteristic; }
  20. }
  21. public virtual int Dimension
  22. {
  23. get { return subfield.Dimension * minimalPolynomial.Degree; }
  24. }
  25. public virtual IFiniteField Subfield
  26. {
  27. get { return subfield; }
  28. }
  29. public virtual int Degree
  30. {
  31. get { return minimalPolynomial.Degree; }
  32. }
  33. public virtual IPolynomial MinimalPolynomial
  34. {
  35. get { return minimalPolynomial; }
  36. }
  37. public override bool Equals(object obj)
  38. {
  39. if (this == obj)
  40. {
  41. return true;
  42. }
  43. GenericPolynomialExtensionField other = obj as GenericPolynomialExtensionField;
  44. if (null == other)
  45. {
  46. return false;
  47. }
  48. return subfield.Equals(other.subfield) && minimalPolynomial.Equals(other.minimalPolynomial);
  49. }
  50. public override int GetHashCode()
  51. {
  52. return subfield.GetHashCode() ^ Integers.RotateLeft(minimalPolynomial.GetHashCode(), 16);
  53. }
  54. }
  55. }
  56. #pragma warning restore
  57. #endif