]> git.ipfire.org Git - thirdparty/hostap.git/blob - tests/test-sha256.c
Remove the GPL notification from files contributed by Jouni Malinen
[thirdparty/hostap.git] / tests / test-sha256.c
1 /*
2 * Test program for SHA256
3 * Copyright (c) 2006, Jouni Malinen <j@w1.fi>
4 *
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
7 */
8
9 #include "includes.h"
10
11 #include "common.h"
12 #include "crypto/sha256.h"
13 #include "crypto/crypto.h"
14
15 struct {
16 char *data;
17 u8 hash[32];
18 } tests[] = {
19 {
20 "abc",
21 {
22 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
23 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
24 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
25 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
26 }
27 },
28 {
29 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
30 {
31 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8,
32 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39,
33 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67,
34 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1
35 }
36 }
37 };
38
39 struct hmac_test {
40 u8 key[80];
41 size_t key_len;
42 u8 data[128];
43 size_t data_len;
44 u8 hash[32];
45 } hmac_tests[] = {
46 /* draft-ietf-ipsec-ciph-sha-256-01.txt */
47 {
48 {
49 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
50 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
51 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
52 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20
53 },
54 32,
55 "abc", 3,
56 {
57 0xa2, 0x1b, 0x1f, 0x5d, 0x4c, 0xf4, 0xf7, 0x3a,
58 0x4d, 0xd9, 0x39, 0x75, 0x0f, 0x7a, 0x06, 0x6a,
59 0x7f, 0x98, 0xcc, 0x13, 0x1c, 0xb1, 0x6a, 0x66,
60 0x92, 0x75, 0x90, 0x21, 0xcf, 0xab, 0x81, 0x81
61 }
62 },
63 {
64 {
65 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
66 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
67 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
68 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20
69 },
70 32,
71 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
72 56,
73 {
74 0x10, 0x4f, 0xdc, 0x12, 0x57, 0x32, 0x8f, 0x08,
75 0x18, 0x4b, 0xa7, 0x31, 0x31, 0xc5, 0x3c, 0xae,
76 0xe6, 0x98, 0xe3, 0x61, 0x19, 0x42, 0x11, 0x49,
77 0xea, 0x8c, 0x71, 0x24, 0x56, 0x69, 0x7d, 0x30
78 }
79 },
80 {
81 {
82 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
83 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
84 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
85 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20
86 },
87 32,
88 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
89 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
90 112,
91 {
92 0x47, 0x03, 0x05, 0xfc, 0x7e, 0x40, 0xfe, 0x34,
93 0xd3, 0xee, 0xb3, 0xe7, 0x73, 0xd9, 0x5a, 0xab,
94 0x73, 0xac, 0xf0, 0xfd, 0x06, 0x04, 0x47, 0xa5,
95 0xeb, 0x45, 0x95, 0xbf, 0x33, 0xa9, 0xd1, 0xa3
96 }
97 },
98 {
99 {
100 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
101 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
102 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
103 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b
104 },
105 32,
106 "Hi There",
107 8,
108 {
109 0x19, 0x8a, 0x60, 0x7e, 0xb4, 0x4b, 0xfb, 0xc6,
110 0x99, 0x03, 0xa0, 0xf1, 0xcf, 0x2b, 0xbd, 0xc5,
111 0xba, 0x0a, 0xa3, 0xf3, 0xd9, 0xae, 0x3c, 0x1c,
112 0x7a, 0x3b, 0x16, 0x96, 0xa0, 0xb6, 0x8c, 0xf7
113 }
114 },
115 {
116 "Jefe",
117 4,
118 "what do ya want for nothing?",
119 28,
120 {
121 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e,
122 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7,
123 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83,
124 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43
125 }
126 },
127 {
128 {
129 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
130 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
131 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
132 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
133 },
134 32,
135 {
136 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
137 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
138 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
139 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
140 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
141 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
142 0xdd, 0xdd
143 },
144 50,
145 {
146 0xcd, 0xcb, 0x12, 0x20, 0xd1, 0xec, 0xcc, 0xea,
147 0x91, 0xe5, 0x3a, 0xba, 0x30, 0x92, 0xf9, 0x62,
148 0xe5, 0x49, 0xfe, 0x6c, 0xe9, 0xed, 0x7f, 0xdc,
149 0x43, 0x19, 0x1f, 0xbd, 0xe4, 0x5c, 0x30, 0xb0
150 }
151 },
152 {
153 {
154 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
155 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
156 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
157 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
158 0x21, 0x22, 0x23, 0x24, 0x25
159 },
160 37,
161 {
162 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
163 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
164 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
165 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
166 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
167 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
168 0xcd, 0xcd
169 },
170 50,
171 {
172 0xd4, 0x63, 0x3c, 0x17, 0xf6, 0xfb, 0x8d, 0x74,
173 0x4c, 0x66, 0xde, 0xe0, 0xf8, 0xf0, 0x74, 0x55,
174 0x6e, 0xc4, 0xaf, 0x55, 0xef, 0x07, 0x99, 0x85,
175 0x41, 0x46, 0x8e, 0xb4, 0x9b, 0xd2, 0xe9, 0x17
176 }
177 },
178 {
179 {
180 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
181 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
182 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
183 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c
184 },
185 32,
186 "Test With Truncation",
187 20,
188 {
189 0x75, 0x46, 0xaf, 0x01, 0x84, 0x1f, 0xc0, 0x9b,
190 0x1a, 0xb9, 0xc3, 0x74, 0x9a, 0x5f, 0x1c, 0x17,
191 0xd4, 0xf5, 0x89, 0x66, 0x8a, 0x58, 0x7b, 0x27,
192 0x00, 0xa9, 0xc9, 0x7c, 0x11, 0x93, 0xcf, 0x42
193 }
194 },
195 {
196 {
197 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
198 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
199 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
200 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
201 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
202 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
203 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
204 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
205 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
206 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
207 },
208 80,
209 "Test Using Larger Than Block-Size Key - Hash Key First",
210 54,
211 {
212 0x69, 0x53, 0x02, 0x5e, 0xd9, 0x6f, 0x0c, 0x09,
213 0xf8, 0x0a, 0x96, 0xf7, 0x8e, 0x65, 0x38, 0xdb,
214 0xe2, 0xe7, 0xb8, 0x20, 0xe3, 0xdd, 0x97, 0x0e,
215 0x7d, 0xdd, 0x39, 0x09, 0x1b, 0x32, 0x35, 0x2f
216 }
217 },
218 {
219 {
220 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
221 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
222 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
223 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
224 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
225 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
226 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
227 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
228 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
229 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
230 },
231 80,
232 "Test Using Larger Than Block-Size Key and Larger Than One "
233 "Block-Size Data",
234 73,
235 {
236 0x63, 0x55, 0xac, 0x22, 0xe8, 0x90, 0xd0, 0xa3,
237 0xc8, 0x48, 0x1a, 0x5c, 0xa4, 0x82, 0x5b, 0xc8,
238 0x84, 0xd3, 0xe7, 0xa1, 0xff, 0x98, 0xa2, 0xfc,
239 0x2a, 0xc7, 0xd8, 0xe0, 0x64, 0xc3, 0xb2, 0xe6
240 }
241 }
242 };
243
244
245 int main(int argc, char *argv[])
246 {
247
248 unsigned int i;
249 u8 hash[32];
250 const u8 *addr[2];
251 size_t len[2];
252 int errors = 0;
253
254 for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
255 printf("SHA256 test case %d:", i + 1);
256
257 addr[0] = (u8 *) tests[i].data;
258 len[0] = strlen(tests[i].data);
259 sha256_vector(1, addr, len, hash);
260 if (memcmp(hash, tests[i].hash, 32) != 0) {
261 printf(" FAIL");
262 errors++;
263 } else
264 printf(" OK");
265
266 if (len[0]) {
267 addr[0] = (u8 *) tests[i].data;
268 len[0] = 1;
269 addr[1] = (u8 *) tests[i].data + 1;
270 len[1] = strlen(tests[i].data) - 1;
271 sha256_vector(2, addr, len, hash);
272 if (memcmp(hash, tests[i].hash, 32) != 0) {
273 printf(" FAIL");
274 errors++;
275 } else
276 printf(" OK");
277 }
278
279 printf("\n");
280 }
281
282 for (i = 0; i < sizeof(hmac_tests) / sizeof(hmac_tests[0]); i++) {
283 struct hmac_test *t = &hmac_tests[i];
284 printf("HMAC-SHA256 test case %d:", i + 1);
285
286 hmac_sha256(t->key, t->key_len, t->data, t->data_len, hash);
287 if (memcmp(hash, t->hash, 32) != 0) {
288 printf(" FAIL");
289 errors++;
290 } else
291 printf(" OK");
292
293 addr[0] = t->data;
294 len[0] = t->data_len;
295 hmac_sha256_vector(t->key, t->key_len, 1, addr, len, hash);
296 if (memcmp(hash, t->hash, 32) != 0) {
297 printf(" FAIL");
298 errors++;
299 } else
300 printf(" OK");
301
302 if (len[0]) {
303 addr[0] = t->data;
304 len[0] = 1;
305 addr[1] = t->data + 1;
306 len[1] = t->data_len - 1;
307 hmac_sha256_vector(t->key, t->key_len, 2, addr, len,
308 hash);
309 if (memcmp(hash, t->hash, 32) != 0) {
310 printf(" FAIL");
311 errors++;
312 } else
313 printf(" OK");
314 }
315
316 printf("\n");
317 }
318
319 printf("Test IEEE 802.11r KDF\n");
320 sha256_prf((u8 *) "abc", 3, "KDF test", (u8 *) "data", 4,
321 hash, sizeof(hash));
322 /* TODO: add proper test case for this */
323
324 return errors;
325 }