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
12 * See README and COPYING for more details.
18 #include "crypto/sha256.h"
19 #include "crypto/crypto.h"
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
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
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
77 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
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
94 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
95 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
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
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
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,
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,
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 "
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
[])
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) {
273 addr
[0] = (u8
*) tests
[i
].data
;
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) {
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) {
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) {
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
,
315 if (memcmp(hash
, t
->hash
, 32) != 0) {
325 printf("Test IEEE 802.11r KDF\n");
326 sha256_prf((u8
*) "abc", 3, "KDF test", (u8
*) "data", 4,
328 /* TODO: add proper test case for this */