2 * Test program for SHA256
3 * Copyright (c) 2006, Jouni Malinen <j@w1.fi>
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
12 #include "crypto/sha256.h"
13 #include "crypto/crypto.h"
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
29 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
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
46 /* draft-ietf-ipsec-ciph-sha-256-01.txt */
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
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
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
71 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
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
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
88 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
89 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
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
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
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
118 "what do ya want for nothing?",
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
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
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,
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
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
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,
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
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
186 "Test With Truncation",
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
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
209 "Test Using Larger Than Block-Size Key - Hash Key First",
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
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
232 "Test Using Larger Than Block-Size Key and Larger Than One "
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
245 int main(int argc, char *argv[])
254 for (i = 0; i < ARRAY_SIZE(tests); 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) {
267 addr[0] = (u8 *) tests[i].data;
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) {
282 for (i = 0; i < ARRAY_SIZE(hmac_tests); 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) {
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) {
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,
309 if (memcmp(hash, t->hash, 32) != 0) {
319 printf("Test IEEE 802.11r KDF\n");
320 sha256_prf((u8 *) "abc", 3, "KDF test", (u8 *) "data", 4,
322 /* TODO: add proper test case for this */