<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />

Wnaf

static class Wnaf
using Org.BouncyCastle.Utilities; namespace Org.BouncyCastle.Math.EC.Rfc8032 { internal static class Wnaf { internal static void GetSignedVar(uint[] n, int width, sbyte[] ws) { uint[] array = new uint[n.Length * 2]; uint num = 0 - (n[n.Length - 1] >> 31); int num2 = array.Length; int num3 = n.Length; while (--num3 >= 0) { uint num4 = n[num3]; array[--num2] = ((num4 >> 16) | (num << 16)); num = (array[--num2] = num4); } int num5 = 0; int num6 = 32 - width; int num7 = 0; int num8 = 0; while (num8 < array.Length) { uint num9 = array[num8]; while (num5 < 16) { int num10 = (int)(num9 >> num5); int num11 = Integers.NumberOfTrailingZeros((num7 ^ num10) | 65536); if (num11 > 0) num5 += num11; else { int num12 = (num10 | 1) << num6; num7 = num12 >> 31; ws[(num8 << 4) + num5] = (sbyte)(num12 >> num6); num5 += width; } } num8++; num5 -= 16; } } } }