public static bool UnitTest(int seed) { Random random = new Random(seed); int n = 891; ulong[] a = new ulong[n]; ulong[] b = new ulong[n]; ulong[] s1 = new ulong[n + 1]; ulong[] s2 = new ulong[n + 1]; ulong[] r1 = new ulong[n * 2]; ulong[] r2 = new ulong[n * 2]; for (int i = n; --i >= 0;) { byte[] data = new byte[16]; random.NextBytes(data); a[i] = BitConverter.ToUInt64(data, 0); b[i] = BitConverter.ToUInt64(data, 8); } bool ok = true; s1[n] = AsmX64Operations.CarrylessMultipyAndXor(a, b[0], s1, n); s2[n] = carrylessMultiplyAndXor(a, b[0], s2, n); for (int i = 0; i <= n; i++) { if (s1[i] != s2[i]) { ok = false; } } AsmX64Operations.CarrylessMultiplication(a, b, r1, n); carrylessMultiplication(a, b, r2, n); for (int i = 0; i < n * 2; i++) { if (r1[i] != r2[i]) { ok = false; } } return(ok); }