1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
/* 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, "", "7f9c2ba4e88f827d616045507605853e"},
{1, 5, MSG5, "2e0abfba83e6720bfbc225ff6b7ab9ff"},
{1, 6, MSG30, "6d5d39c55f3cca567feaf422dc64ba17"},
{1, 0, MSG1600, "131ab8d2b594946b9c81333f9bb6e0ce"},
{1, 5, MSG1605, "4ac38ebd1678b4a452792c5673f9777d"},
{1, 6, MSG1630, "89846dc776ac0f014572ea79f5607734"}
};
#else
# define TEST_UNSUPPORTED
# include "common.h"
#endif
static int
main_test(void)
{
TEST_MAIN("SHAKE128", SHAKE128);
}
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_shake128_hasher(&hasher, 8));
ASSERT(!strcmp(hasher.algorithm_string, "SHAKE128[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, "7f"));
ASSERT(!libhashsum_init_shake128_hasher(&hasher, 32));
ASSERT(!strcmp(hasher.algorithm_string, "SHAKE128[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, "7f9c2ba4"));
ASSERT(!libhashsum_init_shake128_hasher(&hasher, 32));
ASSERT(!strcmp(hasher.algorithm_string, "SHAKE128[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, "131ab8d2"));
ASSERT(!libhashsum_init_shake128_hasher(&hasher, 128));
ASSERT(!strcmp(hasher.algorithm_string, "SHAKE128"));
ASSERT(!hasher.finalise_const(&hasher, MSG1600, 1600/8, 0));
ASSERT(hasher.hash_size == 128/8);
hex(hexsum, hasher.hash_output, hasher.hash_size);
ASSERT(!strcmp(hexsum, "131ab8d2b594946b9c81333f9bb6e0ce"));
ASSERT(!libhashsum_init_shake128_hasher(&hasher, 256));
ASSERT(!strcmp(hasher.algorithm_string, "SHAKE128[n=256]"));
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, "131ab8d2b594946b9c81333f9bb6e0ce75c3b93104fa3469d3917457385da037"));
return 0;
}
|