AbstractECMultiplier.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier
  4. {
  5. public abstract class AbstractECMultiplier
  6. : ECMultiplier
  7. {
  8. public virtual ECPoint Multiply(ECPoint p, BigInteger k)
  9. {
  10. int sign = k.SignValue;
  11. if (sign == 0 || p.IsInfinity)
  12. return p.Curve.Infinity;
  13. ECPoint positive = MultiplyPositive(p, k.Abs());
  14. ECPoint result = sign > 0 ? positive : positive.Negate();
  15. /*
  16. * Although the various multipliers ought not to produce invalid output under normal
  17. * circumstances, a final check here is advised to guard against fault attacks.
  18. */
  19. return CheckResult(result);
  20. }
  21. protected abstract ECPoint MultiplyPositive(ECPoint p, BigInteger k);
  22. protected virtual ECPoint CheckResult(ECPoint p)
  23. {
  24. return ECAlgorithms.ImplCheckResult(p);
  25. }
  26. }
  27. }
  28. #pragma warning restore
  29. #endif