public override void PerformTest() { byte[] key = Hex.Decode("000102030405060708090a0b0c0d0e0f"); byte[] input = Hex.Decode("000102030405060708090a0b0c0d0e"); long expected = unchecked((long)0xa129ca6149be45e5); SipHash mac = new SipHash(); mac.Init(new KeyParameter(key)); mac.BlockUpdate(input, 0, input.Length); long result = mac.DoFinal(); if (expected != result) { Fail("Result does not match expected value for DoFinal()"); } // NOTE: Little-endian representation of 0xa129ca6149be45e5 byte[] expectedBytes = Hex.Decode("e545be4961ca29a1"); mac.BlockUpdate(input, 0, input.Length); byte[] output = new byte[mac.GetMacSize()]; int len = mac.DoFinal(output, 0); if (len != output.Length) { Fail("Result length does not equal GetMacSize() for DoFinal(byte[],int)"); } if (!AreEqual(expectedBytes, output)) { Fail("Result does not match expected value for DoFinal(byte[],int)"); } }
private void RunMac(byte[] key, byte[] input, int updateType) { long expected = unchecked((long)0xa129ca6149be45e5); SipHash mac = new SipHash(); mac.Init(new KeyParameter(key)); UpdateMac(mac, input, updateType); long result = mac.DoFinal(); if (expected != result) { Fail("Result does not match expected value for DoFinal()"); } // NOTE: Little-endian representation of 0xa129ca6149be45e5 byte[] expectedBytes = Hex.Decode("e545be4961ca29a1"); UpdateMac(mac, input, updateType); byte[] output = new byte[mac.GetMacSize()]; int len = mac.DoFinal(output, 0); if (len != output.Length) { Fail("Result length does not equal GetMacSize() for DoFinal(byte[],int)"); } if (!AreEqual(expectedBytes, output)) { Fail("Result does not match expected value for DoFinal(byte[],int)"); } }
private void RandomTest(SecureRandom random) { byte[] key = new byte[16]; random.NextBytes(key); int length = 1 + random.Next(1024); byte[] input = new byte[length]; random.NextBytes(input); SipHash mac = new SipHash(); mac.Init(new KeyParameter(key)); UpdateMac(mac, input, UPDATE_BYTES); long result1 = mac.DoFinal(); UpdateMac(mac, input, UPDATE_FULL); long result2 = mac.DoFinal(); UpdateMac(mac, input, UPDATE_MIX); long result3 = mac.DoFinal(); if (result1 != result2 || result1 != result3) { Fail("Inconsistent results in random test"); } }