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); }