aboutsummaryrefslogblamecommitdiffstats
path: root/shake256.c
blob: 38c9b4095c8ec7691556f983af16de2eac6da023 (plain) (tree)
























































































                                                                                                    
/* See LICENSE file for copyright and license details. */
#ifdef SUPPORT_SHAKE
# define TEST
# include "common.h"


#define MSG5 "\x13"
#define MSG30 "\x53\x58\x7B\x19"
#define MSG1600_32 "\xA3\xA3\xA3\xA3"
#define MSG1600_160 MSG1600_32 MSG1600_32 MSG1600_32 MSG1600_32 MSG1600_32
#define MSG1600_800 MSG1600_160 MSG1600_160 MSG1600_160 MSG1600_160 MSG1600_160
#define MSG1600 MSG1600_800 MSG1600_800
#define MSG1605 MSG1600_800 MSG1600_800 "\x03"
#define MSG1630 MSG1600_800 MSG1600_800 "\xA3\xA3\xA3\x23"


static struct testcase testcases[] = {
	{1, 0, "",      "46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762f"},
	{1, 5, MSG5,    "48a5c11abaeeff092f3646ef0d6b3d3ff76c2f55f9c732ac6470c03764008212"},
	{1, 6, MSG30,   "465d081dff875e396200e4481a3e9dcd88d079aa6d66226cb6ba454107cb81a7"},
	{1, 0, MSG1600, "cd8a920ed141aa0407a22d59288652e9d9f1a7ee0c1e7c1ca699424da84a904d"},
	{1, 5, MSG1605, "98d093b067475760124ffb9204a5b327c6bb05c54ff234f0b43fac7240415166"},
	{1, 6, MSG1630, "8a8325079b0fc3265d52f59855cafe655df438aa639f6fec991f2494330ce32f"}
};


#else
# define TEST_UNSUPPORTED
# include "common.h"
#endif


static int
main_test(void)
{
	TEST_MAIN("SHAKE256", SHAKE256);
}


int
main(void)
{
#ifdef SUPPORT_SHAKE
	struct libhashsum_hasher hasher;
	char hexsum[1024];
#endif

	int r = main_test();
	if (r)
		return r;

	ASSERT(!libhashsum_init_shake256_hasher(&hasher, 8));
	ASSERT(!strcmp(hasher.algorithm_string, "SHAKE256[n=8]"));
	ASSERT(!hasher.finalise_const(&hasher, "", 0, 0));
	ASSERT(hasher.hash_size == 1);
	hex(hexsum, hasher.hash_output, hasher.hash_size);
	ASSERT(!strcmp(hexsum, "46"));

	ASSERT(!libhashsum_init_shake256_hasher(&hasher, 32));
	ASSERT(!strcmp(hasher.algorithm_string, "SHAKE256[n=32]"));
	ASSERT(!hasher.finalise_const(&hasher, "", 0, 0));
	ASSERT(hasher.hash_size == 4);
	hex(hexsum, hasher.hash_output, hasher.hash_size);
	ASSERT(!strcmp(hexsum, "46b9dd2b"));

	ASSERT(!libhashsum_init_shake256_hasher(&hasher, 32));
	ASSERT(!strcmp(hasher.algorithm_string, "SHAKE256[n=32]"));
	ASSERT(!hasher.finalise_const(&hasher, MSG1600, 1600/8, 0));
	ASSERT(hasher.hash_size == 4);
	hex(hexsum, hasher.hash_output, hasher.hash_size);
	ASSERT(!strcmp(hexsum, "cd8a920e"));

	ASSERT(!libhashsum_init_shake256_hasher(&hasher, 256));
	ASSERT(!strcmp(hasher.algorithm_string, "SHAKE256"));
	ASSERT(!hasher.finalise_const(&hasher, MSG1600, 1600/8, 0));
	ASSERT(hasher.hash_size == 256/8);
	hex(hexsum, hasher.hash_output, hasher.hash_size);
	ASSERT(!strcmp(hexsum, "cd8a920ed141aa0407a22d59288652e9d9f1a7ee0c1e7c1ca699424da84a904d"));

	ASSERT(!libhashsum_init_shake256_hasher(&hasher, 512));
	ASSERT(!strcmp(hasher.algorithm_string, "SHAKE256[n=512]"));
	ASSERT(!hasher.finalise_const(&hasher, MSG1600, 1600/8, 0));
	ASSERT(hasher.hash_size == 512/8);
	hex(hexsum, hasher.hash_output, hasher.hash_size);
	ASSERT(!strcmp(hexsum, "cd8a920ed141aa0407a22d59288652e9d9f1a7ee0c1e7c1ca699424da84a904d"
	                       "2d700caae7396ece96604440577da4f3aa22aeb8857f961c4cd8e06f0ae6610b"));

	return 0;
}