]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - build-utilities/hostap.git/blob - tests/test-sha256.c
Fix crash when a local deauth occurs (squash)
[build-utilities/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  */
9 #include "includes.h"
11 #include "common.h"
12 #include "crypto/sha256.h"
13 #include "crypto/crypto.h"
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 };
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 };
245 int main(int argc, char *argv[])
248         unsigned int i;
249         u8 hash[32];
250         const u8 *addr[2];
251         size_t len[2];
252         int errors = 0;
254         for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
255                 printf("SHA256 test case %d:", i + 1);
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");
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                 }
279                 printf("\n");
280         }
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);
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");
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");
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                 }
316                 printf("\n");
317         }
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 */
324         return errors;