Some fix to compile run test check.
[bertos.git] / bertos / sec / mac / hmac_test.c
1
2 #include "hmac.h"
3 #include <cfg/test.h>
4 #include <cfg/debug.h>
5 #include <sec/hash/sha1.h>
6 #include <sec/hash/md5.h>
7 #include <string.h>
8
9 int hmac_testSetup(void)
10 {
11         kdbg_init();
12         return 0;
13 }
14
15 int hmac_testTearDown(void)
16 {
17         return 0;
18 }
19
20 struct Test_HMAC
21 {
22         const char *key;
23         size_t key_len;
24         const char *data;
25         size_t data_len;
26         const char *digest;
27 };
28
29 const struct Test_HMAC tests_hmac_md5[] =
30 {
31         {
32                 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 16,
33                 "Hi There", 8,
34                 "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d",
35         },
36         {
37                 "Jefe", 4,
38                 "what do ya want for nothing?", 28,
39                 "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38",
40         },
41         {
42                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 16,
43                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
44                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
45                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
46                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
47                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50,
48                 "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6",
49         },
50         {
51                 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
52                 "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25,
53                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
54                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
55                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
56                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
57                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50,
58                 "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea\x3a\x75\x16\x47\x46\xff\xaa\x79",
59         },
60         {
61                 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 16,
62                 "Test With Truncation", 20,
63                 "\x56\x46\x1e\xf2\x34\x2e\xdc\x00\xf9\xba\xb9\x95\x69\x0e\xfd\x4c",
64         },
65         {
66                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
67                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
68                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
69                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
70                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
71                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
72                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
73                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
74                 "Test Using Larger Than Block-Size Key - Hash Key First", 54,
75                 "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f\x0b\x62\xe6\xce\x61\xb9\xd0\xcd",
76         },
77         {
78                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
79                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
80                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
81                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
82                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
83                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
84                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
85                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
86                 "Test Using Larger Than Block-Size Key and Larger Than One "
87                 "Block-Size Data", 73,
88                 "\x6f\x63\x0f\xad\x67\xcd\xa0\xee\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e",
89         }
90 };
91
92 const struct Test_HMAC tests_hmac_sha1[] =
93 {
94         {
95                 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20,
96                 "Hi There", 8,
97                 "\xb6\x17\x31\x86\x55\x05\x72\x64\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1\x46\xbe\x00",
98         },
99         {
100                 "Jefe", 4,
101                 "what do ya want for nothing?", 28,
102                 "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
103         },
104         {
105                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20,
106                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
107                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
108                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
109                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
110                 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50,
111                 "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3",
112         },
113         {
114                 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25,
115                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
116                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
117                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
118                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
119                 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50,
120                 "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda",
121         },
122         {
123                 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20,
124                 "Test With Truncation", 20,
125                 "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04",
126         },
127         {
128                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
129                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
130                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
131                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
132                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
133                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
134                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
135                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
136                 "Test Using Larger Than Block-Size Key - Hash Key First", 54,
137                 "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12",
138         },
139         {
140                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
141                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
142                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
143                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
144                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
145                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
146                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
147                 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
148                 "Test Using Larger Than Block-Size Key and Larger "
149         "Than One Block-Size Data", 73,
150         "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91",
151    },
152 };
153
154 static void algo_run_tests(Mac *mac, const struct Test_HMAC *t, int count)
155 {
156         for (int i=0; i<count; ++i, ++t)
157         {
158                 mac_set_key(mac, (const uint8_t*)t->key, t->key_len);
159                 mac_begin(mac);
160                 mac_update(mac, (const uint8_t*)t->data, t->data_len);
161                 ASSERT(memcmp(mac_final(mac), t->digest, mac_digest_len(mac)) == 0);
162         }
163 }
164
165 int hmac_testRun(void)
166 {
167         algo_run_tests(hmac_stackinit(MD5_stackinit()),
168                                    tests_hmac_md5, countof(tests_hmac_md5));
169
170         algo_run_tests(hmac_stackinit(SHA1_stackinit()),
171                                    tests_hmac_sha1, countof(tests_hmac_sha1));
172
173         return 0;
174 }
175
176 TEST_MAIN(hmac);