Example #1
0
        protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz)
        {
            ulong[] array  = new ulong[4];
            ulong[] array2 = new ulong[4];
            SecT233Field.ImplExpand(x, array);
            SecT233Field.ImplExpand(y, array2);
            SecT233Field.ImplMulwAcc(array[0], array2[0], zz, 0);
            SecT233Field.ImplMulwAcc(array[1], array2[1], zz, 1);
            SecT233Field.ImplMulwAcc(array[2], array2[2], zz, 2);
            SecT233Field.ImplMulwAcc(array[3], array2[3], zz, 3);
            for (int i = 5; i > 0; i--)
            {
                zz[i] ^= zz[i - 1];
            }
            SecT233Field.ImplMulwAcc(array[0] ^ array[1], array2[0] ^ array2[1], zz, 1);
            SecT233Field.ImplMulwAcc(array[2] ^ array[3], array2[2] ^ array2[3], zz, 3);
            for (int j = 7; j > 1; j--)
            {
                zz[j] ^= zz[j - 2];
            }
            ulong num  = array[0] ^ array[2];
            ulong num2 = array[1] ^ array[3];
            ulong num3 = array2[0] ^ array2[2];
            ulong num4 = array2[1] ^ array2[3];

            SecT233Field.ImplMulwAcc(num ^ num2, num3 ^ num4, zz, 3);
            ulong[] array3 = new ulong[3];
            SecT233Field.ImplMulwAcc(num, num3, array3, 0);
            SecT233Field.ImplMulwAcc(num2, num4, array3, 1);
            ulong num5 = array3[0];
            ulong num6 = array3[1];
            ulong num7 = array3[2];

            zz[2] ^= num5;
            zz[3] ^= (num5 ^ num6);
            zz[4] ^= (num7 ^ num6);
            zz[5] ^= num7;
            SecT233Field.ImplCompactExt(zz);
        }