public void TestBattery() { // 128-bit key var key = new uint[] { 0x833D3433, 0x009F389F, 0x2398E64F, 0x417ACF39 }.SelectMany(x => BitConverter.GetBytes(x)).ToArray(); // Chaskey initialized with the key var prf = new Chaskey(key); // Perform the test battery var message = new byte[64]; for (int i = 0; i < 64; i++) { message[i] = (byte)i; // Compute the tag var tag = prf.Compute(message, 0, i); // Get the target tag var targetTag = vectors[i].SelectMany(v => BitConverter.GetBytes(v)); if (tag.SequenceEqual(targetTag) == false) { throw new Exception(string.Format("Test vector failed for {0:N}-byte message!", i)); } } }
private static void BenchmarkChaskey(int iterations, int length, Action <string> writeLine) { // Initialize SipHash engine with a random key var chaskey = new Chaskey(GetRandomBytes(16)); var tag = new byte[16]; // Generate specified amount of random data var data = GetRandomBytes(length); // Benchmark var stopWatch = Stopwatch.StartNew(); for (int i = 0; i < iterations; i++) { chaskey.Compute(data, 0, data.Length, tag, 0); } var elapsed = stopWatch.Elapsed; if (writeLine != null) { writeLine("Chaskey benchmark results:"); writeLine(string.Format(CultureInfo.CurrentUICulture, "- Digested {0} {1} times", BytesToString(data.Length), iterations)); writeLine(string.Format(CultureInfo.CurrentUICulture, "- Elapsed: {0}", elapsed.ToString(@"hh\:mm\:ss\.fff"))); writeLine(string.Format(CultureInfo.CurrentUICulture, "- Speed: {0}/s", BytesToString(data.Length / elapsed.TotalSeconds * iterations))); } }
private static void BenchmarkChaskey(int iterations, int length, Action<string> writeLine) { // Initialize SipHash engine with a random key var chaskey = new Chaskey(GetRandomBytes(16)); var tag = new byte[16]; // Generate specified amount of random data var data = GetRandomBytes(length); // Benchmark var stopWatch = Stopwatch.StartNew(); for (int i = 0; i < iterations; i++) chaskey.Compute(data, 0, data.Length, tag, 0); var elapsed = stopWatch.Elapsed; if (writeLine != null) { writeLine("Chaskey benchmark results:"); writeLine(string.Format(CultureInfo.CurrentUICulture, "- Digested {0} {1} times", BytesToString(data.Length), iterations)); writeLine(string.Format(CultureInfo.CurrentUICulture, "- Elapsed: {0}", elapsed.ToString(@"hh\:mm\:ss\.fff"))); writeLine(string.Format(CultureInfo.CurrentUICulture, "- Speed: {0}/s", BytesToString(data.Length / elapsed.TotalSeconds * iterations))); } }
public void TestBattery() { // 128-bit key var key = new uint[] { 0x833D3433, 0x009F389F, 0x2398E64F, 0x417ACF39 }.SelectMany(x => BitConverter.GetBytes(x)).ToArray(); // Chaskey initialized with the key var prf = new Chaskey(key); // Perform the test battery var message = new byte[64]; for (int i = 0; i < 64; i++) { message[i] = (byte)i; // Compute the tag var tag = prf.Compute(message, 0, i); // Get the target tag var targetTag = vectors[i].SelectMany(v => BitConverter.GetBytes(v)); if (tag.SequenceEqual(targetTag) == false) throw new Exception(string.Format("Test vector failed for {0:N}-byte message!", i)); } }