nl80211: Fix a typo
[hostap-gosc2009.git] / tests / test-sha256.c
blobf194ff95a244dcc13bca42ae9fc6520f11a61dc1
1 /*
2 * Test program for SHA256
3 * Copyright (c) 2006, Jouni Malinen <j@w1.fi>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
9 * Alternatively, this software may be distributed under the terms of BSD
10 * license.
12 * See README and COPYING for more details.
15 #include "includes.h"
17 #include "common.h"
18 #include "crypto/sha256.h"
19 #include "crypto/crypto.h"
21 struct {
22 char *data;
23 u8 hash[32];
24 } tests[] = {
26 "abc",
28 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
29 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
30 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
31 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
35 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
37 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8,
38 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39,
39 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67,
40 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1
45 struct hmac_test {
46 u8 key[80];
47 size_t key_len;
48 u8 data[128];
49 size_t data_len;
50 u8 hash[32];
51 } hmac_tests[] = {
52 /* draft-ietf-ipsec-ciph-sha-256-01.txt */
55 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
56 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
57 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
58 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20
60 32,
61 "abc", 3,
63 0xa2, 0x1b, 0x1f, 0x5d, 0x4c, 0xf4, 0xf7, 0x3a,
64 0x4d, 0xd9, 0x39, 0x75, 0x0f, 0x7a, 0x06, 0x6a,
65 0x7f, 0x98, 0xcc, 0x13, 0x1c, 0xb1, 0x6a, 0x66,
66 0x92, 0x75, 0x90, 0x21, 0xcf, 0xab, 0x81, 0x81
71 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
72 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
73 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
74 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20
76 32,
77 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
78 56,
80 0x10, 0x4f, 0xdc, 0x12, 0x57, 0x32, 0x8f, 0x08,
81 0x18, 0x4b, 0xa7, 0x31, 0x31, 0xc5, 0x3c, 0xae,
82 0xe6, 0x98, 0xe3, 0x61, 0x19, 0x42, 0x11, 0x49,
83 0xea, 0x8c, 0x71, 0x24, 0x56, 0x69, 0x7d, 0x30
88 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
89 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
90 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
91 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20
93 32,
94 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
95 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
96 112,
98 0x47, 0x03, 0x05, 0xfc, 0x7e, 0x40, 0xfe, 0x34,
99 0xd3, 0xee, 0xb3, 0xe7, 0x73, 0xd9, 0x5a, 0xab,
100 0x73, 0xac, 0xf0, 0xfd, 0x06, 0x04, 0x47, 0xa5,
101 0xeb, 0x45, 0x95, 0xbf, 0x33, 0xa9, 0xd1, 0xa3
106 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
107 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
108 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
109 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b
112 "Hi There",
115 0x19, 0x8a, 0x60, 0x7e, 0xb4, 0x4b, 0xfb, 0xc6,
116 0x99, 0x03, 0xa0, 0xf1, 0xcf, 0x2b, 0xbd, 0xc5,
117 0xba, 0x0a, 0xa3, 0xf3, 0xd9, 0xae, 0x3c, 0x1c,
118 0x7a, 0x3b, 0x16, 0x96, 0xa0, 0xb6, 0x8c, 0xf7
122 "Jefe",
124 "what do ya want for nothing?",
127 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e,
128 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7,
129 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83,
130 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43
135 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
136 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
137 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
138 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
142 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
143 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
144 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
145 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
146 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
147 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
148 0xdd, 0xdd
152 0xcd, 0xcb, 0x12, 0x20, 0xd1, 0xec, 0xcc, 0xea,
153 0x91, 0xe5, 0x3a, 0xba, 0x30, 0x92, 0xf9, 0x62,
154 0xe5, 0x49, 0xfe, 0x6c, 0xe9, 0xed, 0x7f, 0xdc,
155 0x43, 0x19, 0x1f, 0xbd, 0xe4, 0x5c, 0x30, 0xb0
160 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
161 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
162 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
163 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
164 0x21, 0x22, 0x23, 0x24, 0x25
168 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
169 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
170 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
171 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
172 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
173 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
174 0xcd, 0xcd
178 0xd4, 0x63, 0x3c, 0x17, 0xf6, 0xfb, 0x8d, 0x74,
179 0x4c, 0x66, 0xde, 0xe0, 0xf8, 0xf0, 0x74, 0x55,
180 0x6e, 0xc4, 0xaf, 0x55, 0xef, 0x07, 0x99, 0x85,
181 0x41, 0x46, 0x8e, 0xb4, 0x9b, 0xd2, 0xe9, 0x17
186 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
187 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
188 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
189 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c
192 "Test With Truncation",
195 0x75, 0x46, 0xaf, 0x01, 0x84, 0x1f, 0xc0, 0x9b,
196 0x1a, 0xb9, 0xc3, 0x74, 0x9a, 0x5f, 0x1c, 0x17,
197 0xd4, 0xf5, 0x89, 0x66, 0x8a, 0x58, 0x7b, 0x27,
198 0x00, 0xa9, 0xc9, 0x7c, 0x11, 0x93, 0xcf, 0x42
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 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
208 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
209 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
210 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
211 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
212 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
215 "Test Using Larger Than Block-Size Key - Hash Key First",
218 0x69, 0x53, 0x02, 0x5e, 0xd9, 0x6f, 0x0c, 0x09,
219 0xf8, 0x0a, 0x96, 0xf7, 0x8e, 0x65, 0x38, 0xdb,
220 0xe2, 0xe7, 0xb8, 0x20, 0xe3, 0xdd, 0x97, 0x0e,
221 0x7d, 0xdd, 0x39, 0x09, 0x1b, 0x32, 0x35, 0x2f
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 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
231 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
232 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
233 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
234 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
235 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
238 "Test Using Larger Than Block-Size Key and Larger Than One "
239 "Block-Size Data",
242 0x63, 0x55, 0xac, 0x22, 0xe8, 0x90, 0xd0, 0xa3,
243 0xc8, 0x48, 0x1a, 0x5c, 0xa4, 0x82, 0x5b, 0xc8,
244 0x84, 0xd3, 0xe7, 0xa1, 0xff, 0x98, 0xa2, 0xfc,
245 0x2a, 0xc7, 0xd8, 0xe0, 0x64, 0xc3, 0xb2, 0xe6
251 int main(int argc, char *argv[])
254 unsigned int i;
255 u8 hash[32];
256 const u8 *addr[2];
257 size_t len[2];
258 int errors = 0;
260 for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
261 printf("SHA256 test case %d:", i + 1);
263 addr[0] = (u8 *) tests[i].data;
264 len[0] = strlen(tests[i].data);
265 sha256_vector(1, addr, len, hash);
266 if (memcmp(hash, tests[i].hash, 32) != 0) {
267 printf(" FAIL");
268 errors++;
269 } else
270 printf(" OK");
272 if (len[0]) {
273 addr[0] = (u8 *) tests[i].data;
274 len[0] = 1;
275 addr[1] = (u8 *) tests[i].data + 1;
276 len[1] = strlen(tests[i].data) - 1;
277 sha256_vector(2, addr, len, hash);
278 if (memcmp(hash, tests[i].hash, 32) != 0) {
279 printf(" FAIL");
280 errors++;
281 } else
282 printf(" OK");
285 printf("\n");
288 for (i = 0; i < sizeof(hmac_tests) / sizeof(hmac_tests[0]); i++) {
289 struct hmac_test *t = &hmac_tests[i];
290 printf("HMAC-SHA256 test case %d:", i + 1);
292 hmac_sha256(t->key, t->key_len, t->data, t->data_len, hash);
293 if (memcmp(hash, t->hash, 32) != 0) {
294 printf(" FAIL");
295 errors++;
296 } else
297 printf(" OK");
299 addr[0] = t->data;
300 len[0] = t->data_len;
301 hmac_sha256_vector(t->key, t->key_len, 1, addr, len, hash);
302 if (memcmp(hash, t->hash, 32) != 0) {
303 printf(" FAIL");
304 errors++;
305 } else
306 printf(" OK");
308 if (len[0]) {
309 addr[0] = t->data;
310 len[0] = 1;
311 addr[1] = t->data + 1;
312 len[1] = t->data_len - 1;
313 hmac_sha256_vector(t->key, t->key_len, 2, addr, len,
314 hash);
315 if (memcmp(hash, t->hash, 32) != 0) {
316 printf(" FAIL");
317 errors++;
318 } else
319 printf(" OK");
322 printf("\n");
325 printf("Test IEEE 802.11r KDF\n");
326 sha256_prf((u8 *) "abc", 3, "KDF test", (u8 *) "data", 4,
327 hash, sizeof(hash));
328 /* TODO: add proper test case for this */
330 return errors;