NafL2RMultiplier.cs 976 B

12345678910111213141516171819202122232425262728293031323334353637
  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 (left-to-right).
  8. */
  9. public class NafL2RMultiplier
  10. : AbstractECMultiplier
  11. {
  12. protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k)
  13. {
  14. int[] naf = WNafUtilities.GenerateCompactNaf(k);
  15. ECPoint addP = p.Normalize(), subP = addP.Negate();
  16. ECPoint R = p.Curve.Infinity;
  17. int i = naf.Length;
  18. while (--i >= 0)
  19. {
  20. int ni = naf[i];
  21. int digit = ni >> 16, zeroes = ni & 0xFFFF;
  22. R = R.TwicePlus(digit < 0 ? subP : addP);
  23. R = R.TimesPow2(zeroes);
  24. }
  25. return R;
  26. }
  27. }
  28. }
  29. #pragma warning restore
  30. #endif