~ubuntu-branches/ubuntu/gutsy/wpasupplicant/gutsy

« back to all changes in this revision

Viewing changes to tests/test_sha256.c

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler, Alexander Sack
  • Date: 2007-08-26 16:06:57 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20070826160657-2m8pxoweuxe8f93t
Tags: 0.6.0+0.5.8-0ubuntu1
* New upstream release
* remove patch 11_erroneous_manpage_ref, applied upstream
* remove patch 25_wpas_dbus_unregister_iface_fix, applied upstream

[ Alexander Sack ]
* bumping upstream version to replace development version 0.6.0 with
  this package from stable release branch.
* attempt to fix wierd timeout and high latency issues by going
  back to stable upstream version (0.5.9) (LP: #140763,
  LP: #141233).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Test program for SHA256
 
3
 * Copyright (c) 2006, Jouni Malinen <j@w1.fi>
 
4
 *
 
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.
 
8
 *
 
9
 * Alternatively, this software may be distributed under the terms of BSD
 
10
 * license.
 
11
 *
 
12
 * See README and COPYING for more details.
 
13
 */
 
14
 
 
15
#include "includes.h"
 
16
 
 
17
#include "common.h"
 
18
#include "sha256.h"
 
19
#include "crypto.h"
 
20
 
 
21
struct {
 
22
        char *data;
 
23
        u8 hash[32];
 
24
} tests[] = {
 
25
        {
 
26
                "abc",
 
27
                {
 
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
 
32
                }
 
33
        },
 
34
        {
 
35
                "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
 
36
                {
 
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
 
41
                }
 
42
        }
 
43
};
 
44
 
 
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 */
 
53
        {
 
54
                {
 
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
 
59
                },
 
60
                32,
 
61
                "abc", 3,
 
62
                {
 
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
 
67
                }
 
68
        },
 
69
        {
 
70
                {
 
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
 
75
                },
 
76
                32,
 
77
                "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
 
78
                56,
 
79
                {
 
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
 
84
                }
 
85
        },
 
86
        {
 
87
                {
 
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
 
92
                },
 
93
                32,
 
94
                "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
 
95
                "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
 
96
                112,
 
97
                {
 
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
 
102
                }
 
103
        },
 
104
        {
 
105
                {
 
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
 
110
                },
 
111
                32,
 
112
                "Hi There",
 
113
                8,
 
114
                {
 
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
 
119
                }
 
120
        },
 
121
        {
 
122
                "Jefe",
 
123
                4,
 
124
                "what do ya want for nothing?",
 
125
                28,
 
126
                {
 
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
 
131
                }
 
132
        },
 
133
        {
 
134
                {
 
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
 
139
                },
 
140
                32,
 
141
                {
 
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
 
149
                },
 
150
                50,
 
151
                {
 
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
 
156
                }
 
157
        },
 
158
        {
 
159
                {
 
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
 
165
                },
 
166
                37,
 
167
                {
 
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
 
175
                },
 
176
                50,
 
177
                {
 
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
 
182
                }
 
183
        },
 
184
        {
 
185
                {
 
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
 
190
                },
 
191
                32,
 
192
                "Test With Truncation",
 
193
                20,
 
194
                {
 
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
 
199
                }
 
200
        },
 
201
        {
 
202
                {
 
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
 
213
                },
 
214
                80,
 
215
                "Test Using Larger Than Block-Size Key - Hash Key First",
 
216
                54,
 
217
                {
 
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
 
222
                }
 
223
        },
 
224
        {
 
225
                {
 
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
 
236
                },
 
237
                80,
 
238
                "Test Using Larger Than Block-Size Key and Larger Than One "
 
239
                "Block-Size Data",
 
240
                73,
 
241
                {
 
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
 
246
                }
 
247
        }
 
248
};
 
249
 
 
250
 
 
251
int main(int argc, char *argv[])
 
252
{
 
253
 
 
254
        unsigned int i;
 
255
        u8 hash[32];
 
256
        const u8 *addr[2];
 
257
        size_t len[2];
 
258
        int errors = 0;
 
259
 
 
260
        for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
 
261
                printf("SHA256 test case %d:", i + 1);
 
262
 
 
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");
 
271
 
 
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");
 
283
                }
 
284
 
 
285
                printf("\n");
 
286
        }
 
287
 
 
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);
 
291
 
 
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");
 
298
 
 
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");
 
307
 
 
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");
 
320
                }
 
321
 
 
322
                printf("\n");
 
323
        }
 
324
 
 
325
        printf("Test IEEE 802.11r KDF\n");
 
326
        sha256_prf("abc", 3, "KDF test", "data", 4, hash, sizeof(hash));
 
327
        /* TODO: add proper test case for this */
 
328
 
 
329
        return errors;
 
330
}