157 lines
6.6 KiB
C#
157 lines
6.6 KiB
C#
|
/******************************************************************************/
|
||
|
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||
|
/* This work has been released under the CC0 1.0 Universal license! */
|
||
|
/******************************************************************************/
|
||
|
|
||
|
using LibNuHash;
|
||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||
|
using System;
|
||
|
using System.Numerics;
|
||
|
using System.Reflection;
|
||
|
using System.Text;
|
||
|
|
||
|
namespace LibNuHashTest
|
||
|
{
|
||
|
[TestClass]
|
||
|
public class NuHashTest
|
||
|
{
|
||
|
/* ------------------------------------------------------------------------ */
|
||
|
/* Test functions */
|
||
|
/* ------------------------------------------------------------------------ */
|
||
|
|
||
|
private static void RunTest(uint iterations, string expected, byte[] input)
|
||
|
{
|
||
|
using (NuHash nuhash = new NuHash())
|
||
|
{
|
||
|
for (uint iter = 0; iter < iterations; ++iter)
|
||
|
{
|
||
|
nuhash.Update(input);
|
||
|
}
|
||
|
string digest = BitConverter.ToString(nuhash.DoFinal());
|
||
|
Console.Out.WriteLine(string.Format("{0} - {1}", digest, expected.Equals(digest, StringComparison.OrdinalIgnoreCase) ? "OK" : "Failed!"));
|
||
|
Assert.AreEqual(expected, digest, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static void RunTest(uint iterations, string expected, string input)
|
||
|
{
|
||
|
RunTest(iterations, expected, Encoding.UTF8.GetBytes(input));
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------------------ */
|
||
|
/* Test cases */
|
||
|
/* ------------------------------------------------------------------------ */
|
||
|
|
||
|
[TestMethod]
|
||
|
public void TestMethod0()
|
||
|
{
|
||
|
ulong[][] xorTable = (ulong[][]) typeof(NuHash).GetField("NUHASH_XOR", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
|
||
|
for (int i = 0; i < 257; ++i)
|
||
|
{
|
||
|
for (int j = 0; j < 257; ++j)
|
||
|
{
|
||
|
int distance = ComputeDistance(xorTable[i], xorTable[j]);
|
||
|
Assert.IsTrue((i == j) || (distance >= 182));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[TestMethod]
|
||
|
public void TestMethod1()
|
||
|
{
|
||
|
RunTest(
|
||
|
0x0000001,
|
||
|
"D7-96-4F-E1-BE-C2-B5-EC-F2-1E-CC-88-C8-6C-E4-F1-E8-9F-B1-EF-36-69-D5-2E-34-EB-04-9D-7F-D6-C4-2D-4B-2B-BE-EE-B7-0D-12-C3-FC-AF-43-DD-22-29-AB-C9",
|
||
|
""
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[TestMethod]
|
||
|
public void TestMethod2()
|
||
|
{
|
||
|
RunTest(
|
||
|
0x0000001,
|
||
|
"B3-F1-3F-53-40-34-AE-8D-64-5D-41-0E-88-28-67-37-61-FE-2D-69-72-18-87-9F-9E-A5-28-D9-76-BA-2E-15-A3-F7-48-51-05-E6-12-B9-A4-6C-B3-98-86-35-A7-0F",
|
||
|
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[TestMethod]
|
||
|
public void TestMethod3()
|
||
|
{
|
||
|
RunTest(
|
||
|
0x0000001,
|
||
|
"63-70-34-76-F4-FF-CE-4A-8C-75-8D-0D-3B-91-A8-57-B9-A2-E3-43-3E-E8-64-F9-31-BA-32-8F-A7-24-7B-1B-0A-C9-C2-E0-27-92-43-B8-30-51-AA-FA-C6-A7-E7-10",
|
||
|
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[TestMethod]
|
||
|
public void TestMethod4()
|
||
|
{
|
||
|
RunTest(
|
||
|
0x00F4240,
|
||
|
"C6-80-8A-EB-91-1C-88-37-CE-E2-E6-86-7E-58-9A-B2-85-26-A8-15-34-94-CF-35-A4-0C-4B-D6-E2-03-12-DA-33-CA-C4-A3-90-CD-3B-51-A2-EB-42-26-E6-0B-53-E1",
|
||
|
"a"
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[TestMethod]
|
||
|
public void TestMethod5()
|
||
|
{
|
||
|
RunTest(
|
||
|
0x1000000,
|
||
|
"BC-CA-6B-C8-D1-13-DD-3F-C1-71-D7-43-AC-7A-D2-D3-E6-31-63-EA-71-07-D3-C7-85-17-CF-5B-53-EE-0B-2F-4A-0F-E0-79-E6-A7-4D-F3-50-C6-67-B7-CF-E3-CF-09",
|
||
|
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno"
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[TestMethod]
|
||
|
public void TestMethod6()
|
||
|
{
|
||
|
RunTest(
|
||
|
0x1000000,
|
||
|
"56-77-0E-13-3B-9E-B4-20-5F-11-82-4A-D7-28-0F-5C-31-BC-04-DD-33-3D-18-44-B3-58-9A-B8-B9-4A-B9-5D-C0-9B-77-BE-9A-81-28-D7-F1-55-FA-73-DE-61-75-97",
|
||
|
"g4tB,=[TU%/|8lv_c5Y?F9Sqs1PnV#bNO6DW\\0em~p<ifJhM(2&Qo}`!-*:jrZ{KGX]$zkuLd+)xwC^.\"@AIHR;y'a>3E7"
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[TestMethod]
|
||
|
public void TestMethod7()
|
||
|
{
|
||
|
RunTest(
|
||
|
0x1000000,
|
||
|
"9A-85-79-BB-88-11-2B-2F-32-85-78-1A-61-34-8D-7B-04-A5-63-2F-EC-12-A7-3A-7E-0E-36-7A-55-67-94-A2-4A-32-CA-7B-B1-4D-A6-8E-AE-D8-3E-99-C2-F8-F4-C0",
|
||
|
Decode("pCxVpbBe2DPzGPunIMc01x0tRo3Kiuf8aFtU2vnDdmKpPTm/F7eyjBCiH+N0akpsepLRUuqIumvWZJae5kxHQsVR8lD0e0/ph22USyPwRRqa5JEPO7RxgpnJSeW+KJOYKtlzZVjAg0iPAxRAGyQepj/3Z6s3Bqz2ZrbdHAo1n1YV7PErfFddAu2oYxZ13JtcfQ1f/QWgbpCVhdITYQijAcjThKoJ9XBv3rkEtdswvAeO/olgJk5ZyzaGEXLixq86i3/6QTjf7i8yoSdpMSlDxJx3IUS4edCtl+DhDhkuIr2A6LH4TT7CfgyzgRLMwVPPeM481Vq7nevvzf8LJa7U")
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[TestMethod]
|
||
|
public void TestMethod8()
|
||
|
{
|
||
|
RunTest(
|
||
|
0x1000000,
|
||
|
"FB-F4-44-4B-03-29-F5-08-BF-C6-CF-44-92-0B-31-1A-71-8E-5F-4C-4C-1A-F9-78-E7-82-23-EC-35-79-36-5F-F5-D1-5C-16-BB-5A-33-D6-9C-B3-6F-3D-40-56-47-57",
|
||
|
Decode("tcib0bpmKRnSMO0mW8SRTRT3FjVaaf6ZpUnxlCu83EzdT8obiJyp9nMv/T9AORPas3H03n8CPWR4ehcKk9/rnwcEeYyYuCiArR/ylmu9Rdn6LFbO8IcjIurFJ9NjryTHtwbkdYN7vy6k7/USXWCVp1MRdLSgnuOuu1VyWaad1Yltj0oMHc0q++7Xw/MlYo6wssI4PGpvTjsI1IY2GFzgHoF3+GjbWFT/l35hwFHJbOWCvs8yQwE6XlBHoTTMDXCsxkSaPhAO7APibqr8fTcxS+a2wRWLBYWKZ/mrjeGiSBzLUmV2DxohqKNCQZCS0IQJLTNf2HyxuVfo1gsg50bp")
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------------------ */
|
||
|
/* Utilities */
|
||
|
/* ------------------------------------------------------------------------ */
|
||
|
|
||
|
private static int ComputeDistance(ulong[] array1, ulong[] array2)
|
||
|
{
|
||
|
Assert.AreEqual(array1.Length, array2.Length);
|
||
|
int distance = 0;
|
||
|
for (int i = 0; i < array1.Length; ++i)
|
||
|
{
|
||
|
distance += BitOperations.PopCount(array1[i] ^ array2[i]);
|
||
|
}
|
||
|
return distance;
|
||
|
}
|
||
|
|
||
|
private static byte[] Decode(string base64string) => Convert.FromBase64String(base64string);
|
||
|
}
|
||
|
}
|