NafR2LMultiplier.cs 987 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier
  5. {
  6. /**
  7. * Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left).
  8. */
  9. public class NafR2LMultiplier
  10. : AbstractECMultiplier
  11. {
  12. protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k)
  13. {
  14. int[] naf = WNafUtilities.GenerateCompactNaf(k);
  15. ECPoint R0 = p.Curve.Infinity, R1 = p;
  16. int zeroes = 0;
  17. for (int i = 0; i < naf.Length; ++i)
  18. {
  19. int ni = naf[i];
  20. int digit = ni >> 16;
  21. zeroes += ni & 0xFFFF;
  22. R1 = R1.TimesPow2(zeroes);
  23. R0 = R0.Add(digit < 0 ? R1.Negate() : R1);
  24. zeroes = 1;
  25. }
  26. return R0;
  27. }
  28. }
  29. }
  30. #pragma warning restore
  31. #endif