private void ResetTest() { // Generate a non-zero key byte[] key = new byte[32]; for (byte i = 0; i < key.Length; i++) { key[i] = i; } // Generate some non-zero input longer than the key byte[] input = new byte[key.Length + 1]; for (byte i = 0; i < input.Length; i++) { input[i] = i; } // Hash the input Blake2bDigest digest = new Blake2bDigest(key); digest.BlockUpdate(input, 0, input.Length); byte[] hash = new byte[digest.GetDigestSize()]; digest.DoFinal(hash, 0); // Using a second instance, hash the input without calling doFinal() Blake2bDigest digest1 = new Blake2bDigest(key); digest1.BlockUpdate(input, 0, input.Length); // Reset the second instance and hash the input again digest1.Reset(); digest1.BlockUpdate(input, 0, input.Length); byte[] hash1 = new byte[digest.GetDigestSize()]; digest1.DoFinal(hash1, 0); // The hashes should be identical if (!Arrays.AreEqual(hash, hash1)) { Fail("state was not reset"); } }
public override void PerformTest() { // test keyed test vectors: Blake2bDigest blake2bkeyed = new Blake2bDigest(Hex.Decode(keyedTestVectors[0][1])); for (int tv = 0; tv < keyedTestVectors.Length; tv++) { byte[] input = Hex.Decode(keyedTestVectors[tv][0]); blake2bkeyed.Reset(); blake2bkeyed.BlockUpdate(input, 0, input.Length); byte[] keyedHash = new byte[64]; blake2bkeyed.DoFinal(keyedHash, 0); if (!Arrays.AreEqual(Hex.Decode(keyedTestVectors[tv][2]), keyedHash)) { Fail("BLAKE2b mismatch on test vector ", keyedTestVectors[tv][2], Hex.ToHexString(keyedHash)); } offsetTest(blake2bkeyed, input, keyedHash); } Blake2bDigest blake2bunkeyed = new Blake2bDigest(); // test unkeyed test vectors: for (int i = 0; i < unkeyedTestVectors.Length; i++) { // blake2bunkeyed.update( // unkeyedTestVectors[i][1].getBytes("UTF-8")); // test update(byte b) byte[] unkeyedInput = Encoding.UTF8.GetBytes(unkeyedTestVectors[i][1]); for (int j = 0; j < unkeyedInput.Length; j++) { blake2bunkeyed.Update(unkeyedInput[j]); } byte[] unkeyedHash = new byte[64]; blake2bunkeyed.DoFinal(unkeyedHash, 0); blake2bunkeyed.Reset(); if (!Arrays.AreEqual(Hex.Decode(unkeyedTestVectors[i][0]), unkeyedHash)) { Fail("BLAKE2b mismatch on test vector ", unkeyedTestVectors[i][0], Hex.ToHexString(unkeyedHash)); } } cloneTest(); resetTest(); }
public override void PerformTest() { // test keyed test vectors: Blake2bDigest blake2bkeyed = new Blake2bDigest(Hex.Decode(keyedTestVectors[0, 1])); for (int tv = 0; tv < keyedTestVectors.GetLength(0); tv++) { byte[] input = Hex.Decode(keyedTestVectors[tv, 0]); blake2bkeyed.Reset(); blake2bkeyed.BlockUpdate(input, 0, input.Length); byte[] keyedHash = new byte[64]; blake2bkeyed.DoFinal(keyedHash, 0); if (!Arrays.AreEqual(Hex.Decode(keyedTestVectors[tv, 2]), keyedHash)) { Fail("BLAKE2b mismatch on test vector ", keyedTestVectors[tv, 2], Hex.ToHexString(keyedHash)); } offsetTest(blake2bkeyed, input, keyedHash); } Blake2bDigest blake2bunkeyed = new Blake2bDigest(); // test unkeyed test vectors: for (int i = 0; i < unkeyedTestVectors.GetLength(0); i++) { // test update(byte b) byte[] unkeyedInput = Encoding.UTF8.GetBytes(unkeyedTestVectors[i, 1]); for (int j = 0; j < unkeyedInput.Length; j++) { blake2bunkeyed.Update(unkeyedInput[j]); } byte[] unkeyedHash = new byte[64]; blake2bunkeyed.DoFinal(unkeyedHash, 0); blake2bunkeyed.Reset(); if (!Arrays.AreEqual(Hex.Decode(unkeyedTestVectors[i, 0]), unkeyedHash)) { Fail("BLAKE2b mismatch on test vector ", unkeyedTestVectors[i, 0], Hex.ToHexString(unkeyedHash)); } } CloneTest(); ResetTest(); DoTestNullKeyVsUnkeyed(); DoTestLengthConstruction(); }