Example #1
0
 public static void Invert(ulong[] x, ulong[] z)
 {
     //IL_0008: Unknown result type (might be due to invalid IL or missing references)
     if (Nat256.IsZero64(x))
     {
         throw new InvalidOperationException();
     }
     ulong[] array  = Nat256.Create64();
     ulong[] array2 = Nat256.Create64();
     Square(x, array);
     Multiply(array, x, array);
     Square(array, array);
     Multiply(array, x, array);
     SquareN(array, 3, array2);
     Multiply(array2, array, array2);
     Square(array2, array2);
     Multiply(array2, x, array2);
     SquareN(array2, 7, array);
     Multiply(array, array2, array);
     SquareN(array, 14, array2);
     Multiply(array2, array, array2);
     Square(array2, array2);
     Multiply(array2, x, array2);
     SquareN(array2, 29, array);
     Multiply(array, array2, array);
     SquareN(array, 58, array2);
     Multiply(array2, array, array2);
     SquareN(array2, 116, array);
     Multiply(array, array2, array);
     Square(array, z);
 }
 public static void Invert(ulong[] x, ulong[] z)
 {
     if (Nat256.IsZero64(x))
     {
         throw new InvalidOperationException();
     }
     ulong[] numArray  = Nat256.Create64();
     ulong[] numArray2 = Nat256.Create64();
     Square(x, numArray);
     Multiply(numArray, x, numArray);
     Square(numArray, numArray);
     Multiply(numArray, x, numArray);
     SquareN(numArray, 3, numArray2);
     Multiply(numArray2, numArray, numArray2);
     Square(numArray2, numArray2);
     Multiply(numArray2, x, numArray2);
     SquareN(numArray2, 7, numArray);
     Multiply(numArray, numArray2, numArray);
     SquareN(numArray, 14, numArray2);
     Multiply(numArray2, numArray, numArray2);
     Square(numArray2, numArray2);
     Multiply(numArray2, x, numArray2);
     SquareN(numArray2, 0x1d, numArray);
     Multiply(numArray, numArray2, numArray);
     SquareN(numArray, 0x3a, numArray2);
     Multiply(numArray2, numArray, numArray2);
     SquareN(numArray2, 0x74, numArray);
     Multiply(numArray, numArray2, numArray);
     Square(numArray, z);
 }
Example #3
0
        public static void Invert(ulong[] x, ulong[] z)
        {
            if (Nat256.IsZero64(x))
            {
                throw new InvalidOperationException();
            }

            // Itoh-Tsujii inversion

            ulong[] t0 = Nat256.Create64();
            ulong[] t1 = Nat256.Create64();

            Square(x, t0);
            Multiply(t0, x, t0);
            Square(t0, t0);
            Multiply(t0, x, t0);
            SquareN(t0, 3, t1);
            Multiply(t1, t0, t1);
            Square(t1, t1);
            Multiply(t1, x, t1);
            SquareN(t1, 7, t0);
            Multiply(t0, t1, t0);
            SquareN(t0, 14, t1);
            Multiply(t1, t0, t1);
            Square(t1, t1);
            Multiply(t1, x, t1);
            SquareN(t1, 29, t0);
            Multiply(t0, t1, t0);
            SquareN(t0, 58, t1);
            Multiply(t1, t0, t1);
            SquareN(t1, 116, t0);
            Multiply(t0, t1, t0);
            Square(t0, z);
        }
        public static void Invert(ulong[] x, ulong[] z)
        {
            if (Nat256.IsZero64(x))
            {
                throw new InvalidOperationException();
            }

            // Itoh-Tsujii inversion with bases { 2, 3 }

            ulong[] t0 = Nat256.Create64();
            ulong[] t1 = Nat256.Create64();

            Square(x, t0);

            // 3 | 192
            SquareN(t0, 1, t1);
            Multiply(t0, t1, t0);
            SquareN(t1, 1, t1);
            Multiply(t0, t1, t0);

            // 2 | 64
            SquareN(t0, 3, t1);
            Multiply(t0, t1, t0);

            // 2 | 32
            SquareN(t0, 6, t1);
            Multiply(t0, t1, t0);

            // 2 | 16
            SquareN(t0, 12, t1);
            Multiply(t0, t1, t0);

            // 2 | 8
            SquareN(t0, 24, t1);
            Multiply(t0, t1, t0);

            // 2 | 4
            SquareN(t0, 48, t1);
            Multiply(t0, t1, t0);

            // 2 | 2
            SquareN(t0, 96, t1);
            Multiply(t0, t1, z);
        }