public static void Reduce32(uint x, uint[] z) { long cc = 0; if (x != 0) { long xx12 = x; cc += (long)z[0] + xx12; z[0] = (uint)cc; cc >>= 32; cc += (long)z[1] - xx12; z[1] = (uint)cc; cc >>= 32; if (cc != 0) { cc += (long)z[2]; z[2] = (uint)cc; cc >>= 32; } cc += (long)z[3] + xx12; z[3] = (uint)cc; cc >>= 32; cc += (long)z[4] + xx12; z[4] = (uint)cc; cc >>= 32; Debug.Assert(cc == 0 || cc == 1); } if ((cc != 0 && Nat.IncAt(12, z, 5) != 0) || (z[11] == P11 && Nat.Gte(12, z, P))) { AddPInvTo(z); } }
public static void Reduce32(uint x, uint[] z) { long num = 0L; if (x != 0) { long num2 = x; num += z[0] + num2; z[0] = (uint)num; num >>= 32; num += z[1] - num2; z[1] = (uint)num; num >>= 32; if (num != 0L) { num += z[2]; z[2] = (uint)num; num >>= 32; } num += z[3] + num2; z[3] = (uint)num; num >>= 32; num += z[4] + num2; z[4] = (uint)num; num >>= 32; } if ((num != 0L && Nat.IncAt(12, z, 5) != 0) || (z[11] == uint.MaxValue && Nat.Gte(12, z, P))) { AddPInvTo(z); } }
public static void Invert(uint[] p, uint[] x, uint[] z) { int num = p.Length; if (Nat.IsZero(num, x)) { throw new ArgumentException("cannot be 0", "x"); } if (Nat.IsOne(num, x)) { Array.Copy(x, 0, z, 0, num); return; } uint[] array = Nat.Copy(num, x); uint[] array2 = Nat.Create(num); array2[0] = 1u; int xc = 0; if ((array[0] & 1) == 0) { InversionStep(p, array, num, array2, ref xc); } if (Nat.IsOne(num, array)) { InversionResult(p, xc, array2, z); return; } uint[] array3 = Nat.Copy(num, p); uint[] array4 = Nat.Create(num); int xc2 = 0; int num2 = num; while (true) { if (array[num2 - 1] == 0 && array3[num2 - 1] == 0) { num2--; } else if (Nat.Gte(num, array, array3)) { Nat.SubFrom(num, array3, array); xc += Nat.SubFrom(num, array4, array2) - xc2; InversionStep(p, array, num2, array2, ref xc); if (Nat.IsOne(num, array)) { InversionResult(p, xc, array2, z); return; } } else { Nat.SubFrom(num, array, array3); xc2 += Nat.SubFrom(num, array2, array4) - xc; InversionStep(p, array3, num2, array4, ref xc2); if (Nat.IsOne(num, array3)) { break; } } } InversionResult(p, xc2, array4, z); }
public static void Reduce32(uint x, uint[] z) { long num = 0L; if (x != 0) { long num2 = x; num = ((long)((ulong)num)) + (z[0] + num2); z[0] = (uint)num; num = num >> 0x20; num = ((long)((ulong)num)) + (z[1] - num2); z[1] = (uint)num; num = num >> 0x20; if (num != 0L) { num += z[2]; z[2] = (uint)num; num = num >> 0x20; } num = ((long)((ulong)num)) + (z[3] + num2); z[3] = (uint)num; num = num >> 0x20; num = ((long)((ulong)num)) + (z[4] + num2); z[4] = (uint)num; num = num >> 0x20; } if (((num != 0L) && (Nat.IncAt(12, z, 5) != 0)) || ((z[11] == uint.MaxValue) && Nat.Gte(12, z, P))) { AddPInvTo(z); } }