]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/test-sha256.c
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 static int cavp_shavs(const char *fname
)
249 char buf
[15000], *pos
, *pos2
;
251 int msg_len
= 0, tmp_len
;
255 printf("CAVP SHAVS test vectors from %s\n", fname
);
257 f
= fopen(fname
, "r");
259 printf("%s does not exist - cannot validate CAVP SHAVS test vectors\n",
264 while (fgets(buf
, sizeof(buf
), f
)) {
265 pos
= os_strchr(buf
, '=');
269 while (pos2
>= buf
&& *pos2
== ' ')
274 pos2
= os_strchr(pos
, '\r');
276 pos2
= os_strchr(pos
, '\n');
280 pos2
= pos
+ os_strlen(pos
);
282 if (os_strcmp(buf
, "Len") == 0) {
284 } else if (os_strcmp(buf
, "Msg") == 0) {
285 tmp_len
= os_strlen(pos
);
286 if (msg_len
== 0 && tmp_len
== 2)
288 if (msg_len
!= tmp_len
* 4) {
289 printf("Unexpected Msg length (msg_len=%u tmp_len=%u, Msg='%s'\n",
290 msg_len
, tmp_len
, pos
);
295 if (hexstr2bin(pos
, msg
, msg_len
/ 8) < 0) {
296 printf("Invalid hex string '%s'\n", pos
);
300 } else if (os_strcmp(buf
, "MD") == 0) {
304 tmp_len
= os_strlen(pos
);
305 if (tmp_len
!= 2 * 32) {
306 printf("Unexpected MD length (MD='%s'\n",
312 if (hexstr2bin(pos
, md
, 32) < 0) {
313 printf("Invalid hex string '%s'\n", pos
);
319 len
[0] = msg_len
/ 8;
320 if (sha256_vector(1, addr
, len
, hash
) < 0 ||
321 os_memcmp(hash
, md
, 32) != 0)
331 printf("Test case failed\n");
333 printf("%d test vectors OK\n", ok
);
339 int main(int argc
, char *argv
[])
348 for (i
= 0; i
< ARRAY_SIZE(tests
); i
++) {
349 printf("SHA256 test case %d:", i
+ 1);
351 addr
[0] = (u8
*) tests
[i
].data
;
352 len
[0] = strlen(tests
[i
].data
);
353 sha256_vector(1, addr
, len
, hash
);
354 if (memcmp(hash
, tests
[i
].hash
, 32) != 0) {
361 addr
[0] = (u8
*) tests
[i
].data
;
363 addr
[1] = (u8
*) tests
[i
].data
+ 1;
364 len
[1] = strlen(tests
[i
].data
) - 1;
365 sha256_vector(2, addr
, len
, hash
);
366 if (memcmp(hash
, tests
[i
].hash
, 32) != 0) {
376 for (i
= 0; i
< ARRAY_SIZE(hmac_tests
); i
++) {
377 struct hmac_test
*t
= &hmac_tests
[i
];
378 printf("HMAC-SHA256 test case %d:", i
+ 1);
380 hmac_sha256(t
->key
, t
->key_len
, t
->data
, t
->data_len
, hash
);
381 if (memcmp(hash
, t
->hash
, 32) != 0) {
388 len
[0] = t
->data_len
;
389 hmac_sha256_vector(t
->key
, t
->key_len
, 1, addr
, len
, hash
);
390 if (memcmp(hash
, t
->hash
, 32) != 0) {
399 addr
[1] = t
->data
+ 1;
400 len
[1] = t
->data_len
- 1;
401 hmac_sha256_vector(t
->key
, t
->key_len
, 2, addr
, len
,
403 if (memcmp(hash
, t
->hash
, 32) != 0) {
413 printf("Test IEEE 802.11r KDF\n");
414 sha256_prf((u8
*) "abc", 3, "KDF test", (u8
*) "data", 4,
416 /* TODO: add proper test case for this */
418 if (cavp_shavs("CAVP/SHA256ShortMsg.rsp"))
420 if (cavp_shavs("CAVP/SHA256LongMsg.rsp"))