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