/* See LICENSE file for copyright and license details. */ #ifdef SUPPORT_BLAKE2B # define TEST # include "../common.h" static struct testcase testcases[] = { {1, 0, "", "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419" "d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce"}, {1, 0, "The quick brown fox jumps over the lazy dog", "a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673" "f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918"}, {1, 0, "The quick brown fox jumps over the lazy dof", "ab6b007747d8068c02e25a6008db8a77c218d94f3b40d2291a7dc8a62090a744" "c082ea27af01521a102e42f480a31e9844053f456b4b41e8aa78bbe5c12957bb"} }; #else # define TEST_UNSUPPORTED # include "../common.h" #endif static int kat_test(void) { TEST_MAIN("BLAKE2b", BLAKE2B, 0); } int main(void) { #ifdef SUPPORT_BLAKE2B struct libhashsum_hasher hasher1, hasher2; char salt1[16], salt2[16], salt3[16], key[64], buf[1024]; size_t i; #endif int r = kat_test(); if (r) return r; #ifdef SUPPORT_BLAKE2B memset(salt1, 0, sizeof(salt1)); memset(salt2, 0xAB, sizeof(salt2)); memset(salt3, 0xCD, sizeof(salt3)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher1, 0, NULL, NULL, NULL, 0)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher2, 0, salt1, NULL, NULL, 0)); ASSERT(!strcmp(hasher1.algorithm_string, "BLAKE2b")); ASSERT(!strcmp(hasher2.algorithm_string, "BLAKE2b")); ASSERT(!hasher1.finalise_const(&hasher1, NULL, 0, 0)); ASSERT(!hasher2.finalise_const(&hasher2, NULL, 0, 0)); ASSERT(!memcmp(hasher1.hash_output, hasher2.hash_output, hasher1.hash_size)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher1, 0, NULL, NULL, NULL, 0)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher2, 0, salt1, NULL, NULL, 0)); ASSERT(!hasher1.finalise_const(&hasher1, "testdata", 8U, 0)); ASSERT(!hasher2.finalise_const(&hasher2, "testdata", 8U, 0)); ASSERT(!memcmp(hasher1.hash_output, hasher2.hash_output, hasher1.hash_size)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher1, 0, salt1, NULL, NULL, 0)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher2, 0, salt2, NULL, NULL, 0)); ASSERT(!strcmp(hasher1.algorithm_string, "BLAKE2b")); ASSERT(!strcmp(hasher2.algorithm_string, "BLAKE2b[salt=abababababababababababababababab]")); ASSERT(!hasher1.finalise_const(&hasher1, NULL, 0, 0)); ASSERT(!hasher2.finalise_const(&hasher2, NULL, 0, 0)); ASSERT(memcmp(hasher1.hash_output, hasher2.hash_output, hasher1.hash_size)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher1, 0, salt1, NULL, NULL, 0)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher2, 0, salt2, NULL, NULL, 0)); ASSERT(!hasher1.finalise_const(&hasher1, "testdata", 8U, 0)); ASSERT(!hasher2.finalise_const(&hasher2, "testdata", 8U, 0)); ASSERT(memcmp(hasher1.hash_output, hasher2.hash_output, hasher1.hash_size)); ASSERT(!libhashsum_init_hasher_from_string(&hasher1, "BLAKE2b[n=64,salt=00000000000000000000000000000000]")); ASSERT(!libhashsum_init_hasher_from_string(&hasher2, "BLAKE2b[n=64,salt=abababababababababababababababab]")); ASSERT(!strcmp(hasher1.algorithm_string, "BLAKE2b[n=64]")); ASSERT(!strcmp(hasher2.algorithm_string, "BLAKE2b[n=64,salt=abababababababababababababababab]")); ASSERT(!hasher1.finalise_const(&hasher1, NULL, 0, 0)); ASSERT(!hasher2.finalise_const(&hasher2, NULL, 0, 0)); ASSERT(memcmp(hasher1.hash_output, hasher2.hash_output, hasher1.hash_size)); ASSERT(hasher1.hash_size == 64U / 8U); ASSERT(!libhashsum_init_blake2b_hasher(&hasher1, 0, NULL, salt1, NULL, 0)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher2, 0, NULL, salt2, NULL, 0)); ASSERT(!strcmp(hasher1.algorithm_string, "BLAKE2b")); ASSERT(!strcmp(hasher2.algorithm_string, "BLAKE2b[pepper=abababababababababababababababab]")); ASSERT(!hasher1.finalise_const(&hasher1, NULL, 0, 0)); ASSERT(!hasher2.finalise_const(&hasher2, NULL, 0, 0)); ASSERT(memcmp(hasher1.hash_output, hasher2.hash_output, hasher1.hash_size)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher1, 0, NULL, NULL, NULL, 0)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher2, 0, salt2, salt3, NULL, 0)); ASSERT(!strcmp(hasher1.algorithm_string, "BLAKE2b")); ASSERT(!strcmp(hasher2.algorithm_string, "BLAKE2b[salt=abababababababababababababababab," "pepper=cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd]")); ASSERT(!hasher1.finalise_const(&hasher1, NULL, 0, 0)); ASSERT(!hasher2.finalise_const(&hasher2, NULL, 0, 0)); ASSERT(memcmp(hasher1.hash_output, hasher2.hash_output, hasher1.hash_size)); ASSERT(!libhashsum_init_hasher_from_string(&hasher1, "BLAKE2b[salt=01010101010101010101010101010101," "pepper=02020202020202020202020202020202]")); ASSERT(!strcmp(hasher1.algorithm_string, "BLAKE2b[salt=01010101010101010101010101010101," "pepper=02020202020202020202020202020202]")); ASSERT(!libhashsum_init_blake2b_hasher(&hasher1, 0, salt2, NULL, NULL, 0)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher2, 0, NULL, salt2, NULL, 0)); ASSERT(!hasher1.finalise_const(&hasher1, "testdata", 8U, 0)); ASSERT(!hasher2.finalise_const(&hasher2, "testdata", 8U, 0)); ASSERT(memcmp(hasher1.hash_output, hasher2.hash_output, hasher1.hash_size)); for (i = 0; i < sizeof(key); i++) key[i] = (char)i; ASSERT(!libhashsum_init_blake2b_hasher(&hasher1, 0, NULL, NULL, key, 32 * 8U)); ASSERT(!libhashsum_init_blake2b_hasher(&hasher2, 0, NULL, NULL, key, 64 * 8U)); ASSERT(!strcmp(hasher1.algorithm_string, "BLAKE2b[key=000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f]")); ASSERT(!strcmp(hasher2.algorithm_string, "BLAKE2b[key=000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f]")); ASSERT(!hasher1.finalise_const(&hasher1, NULL, 0, 0)); ASSERT(!hasher2.finalise_const(&hasher2, NULL, 0, 0)); ASSERT(memcmp(hasher1.hash_output, hasher2.hash_output, hasher1.hash_size)); hex(buf, hasher2.hash_output, hasher2.hash_size); ASSERT(!strcmp(buf, "10ebb67700b1868efb4417987acf4690ae9d972fb7a590c2f02871799aaa4786" "b5e996e8f0f4eb981fc214b005f42d2ff4233499391653df7aefcbc13fc51568")); ASSERT(!libhashsum_init_hasher_from_string(&hasher1, "BLAKE2b[pepper=02020202020202020202020202020202,key=0123456789]")); ASSERT(!strcmp(hasher1.algorithm_string, "BLAKE2b[pepper=02020202020202020202020202020202,key=0123456789]")); #endif return 0; }