hmac_test.c revision 1.2.2.2 1 /* $NetBSD: hmac_test.c,v 1.2.2.2 2024/02/25 15:47:51 martin Exp $ */
2
3 /*
4 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
5 *
6 * SPDX-License-Identifier: MPL-2.0
7 *
8 * This Source Code Form is subject to the terms of the Mozilla Public
9 * License, v. 2.0. If a copy of the MPL was not distributed with this
10 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
11 *
12 * See the COPYRIGHT file distributed with this work for additional
13 * information regarding copyright ownership.
14 */
15
16 /* ! \file */
17
18 #include <inttypes.h>
19 #include <sched.h> /* IWYU pragma: keep */
20 #include <setjmp.h>
21 #include <stdarg.h>
22 #include <stddef.h>
23 #include <stdlib.h>
24 #include <string.h>
25
26 /*
27 * As a workaround, include an OpenSSL header file before including cmocka.h,
28 * because OpenSSL 3.1.0 uses __attribute__(malloc), conflicting with a
29 * redefined malloc in cmocka.h.
30 */
31 #include <openssl/err.h>
32
33 #define UNIT_TESTING
34 #include <cmocka.h>
35
36 #include <isc/buffer.h>
37 #include <isc/hex.h>
38 #include <isc/hmac.h>
39 #include <isc/region.h>
40 #include <isc/result.h>
41
42 #include "hmac.c"
43
44 #include <tests/isc.h>
45
46 #define TEST_INPUT(x) (x), sizeof(x) - 1
47
48 static int
49 _setup(void **state) {
50 isc_hmac_t *hmac_st = isc_hmac_new();
51 if (hmac_st == NULL) {
52 return (-1);
53 }
54 *state = hmac_st;
55 return (0);
56 }
57
58 static int
59 _teardown(void **state) {
60 if (*state == NULL) {
61 return (-1);
62 }
63 isc_hmac_free(*state);
64 return (0);
65 }
66
67 static int
68 _reset(void **state) {
69 if (*state == NULL) {
70 return (-1);
71 }
72 if (isc_hmac_reset(*state) != ISC_R_SUCCESS) {
73 return (-1);
74 }
75 return (0);
76 }
77
78 ISC_RUN_TEST_IMPL(isc_hmac_new) {
79 UNUSED(state);
80
81 isc_hmac_t *hmac_st = isc_hmac_new();
82 assert_non_null(hmac_st);
83 isc_hmac_free(hmac_st); /* Cleanup */
84 }
85
86 ISC_RUN_TEST_IMPL(isc_hmac_free) {
87 UNUSED(state);
88
89 isc_hmac_t *hmac_st = isc_hmac_new();
90 assert_non_null(hmac_st);
91 isc_hmac_free(hmac_st); /* Test freeing valid message digest context */
92 isc_hmac_free(NULL); /* Test freeing NULL argument */
93 }
94
95 static void
96 isc_hmac_test(isc_hmac_t *hmac_st, const void *key, size_t keylen,
97 const isc_md_type_t *type, const char *buf, size_t buflen,
98 const char *result, const size_t repeats) {
99 isc_result_t res;
100
101 assert_non_null(hmac_st);
102 assert_int_equal(isc_hmac_init(hmac_st, key, keylen, type),
103 ISC_R_SUCCESS);
104
105 for (size_t i = 0; i < repeats; i++) {
106 assert_int_equal(isc_hmac_update(hmac_st,
107 (const unsigned char *)buf,
108 buflen),
109 ISC_R_SUCCESS);
110 }
111
112 unsigned char digest[ISC_MAX_MD_SIZE];
113 unsigned int digestlen = sizeof(digest);
114 assert_int_equal(isc_hmac_final(hmac_st, digest, &digestlen),
115 ISC_R_SUCCESS);
116
117 char hexdigest[ISC_MAX_MD_SIZE * 2 + 3];
118 isc_region_t r = { .base = digest, .length = digestlen };
119 isc_buffer_t b;
120 isc_buffer_init(&b, hexdigest, sizeof(hexdigest));
121
122 res = isc_hex_totext(&r, 0, "", &b);
123
124 assert_return_code(res, ISC_R_SUCCESS);
125
126 assert_memory_equal(hexdigest, result, (result ? strlen(result) : 0));
127 assert_int_equal(isc_hmac_reset(hmac_st), ISC_R_SUCCESS);
128 }
129
130 ISC_RUN_TEST_IMPL(isc_hmac_init) {
131 isc_hmac_t *hmac_st = *state;
132 assert_non_null(hmac_st);
133
134 expect_assert_failure(isc_hmac_init(NULL, "", 0, ISC_MD_MD5));
135
136 assert_int_equal(isc_hmac_init(hmac_st, "", 0, NULL),
137 ISC_R_NOTIMPLEMENTED);
138
139 expect_assert_failure(isc_hmac_init(hmac_st, NULL, 0, ISC_MD_MD5));
140
141 assert_int_equal(isc_hmac_init(hmac_st, "", 0, ISC_MD_MD5),
142 ISC_R_SUCCESS);
143 assert_int_equal(isc_hmac_reset(hmac_st), ISC_R_SUCCESS);
144
145 assert_int_equal(isc_hmac_init(hmac_st, "", 0, ISC_MD_SHA1),
146 ISC_R_SUCCESS);
147 assert_int_equal(isc_hmac_reset(hmac_st), ISC_R_SUCCESS);
148
149 assert_int_equal(isc_hmac_init(hmac_st, "", 0, ISC_MD_SHA224),
150 ISC_R_SUCCESS);
151 assert_int_equal(isc_hmac_reset(hmac_st), ISC_R_SUCCESS);
152
153 assert_int_equal(isc_hmac_init(hmac_st, "", 0, ISC_MD_SHA256),
154 ISC_R_SUCCESS);
155 assert_int_equal(isc_hmac_reset(hmac_st), ISC_R_SUCCESS);
156
157 assert_int_equal(isc_hmac_init(hmac_st, "", 0, ISC_MD_SHA384),
158 ISC_R_SUCCESS);
159 assert_int_equal(isc_hmac_reset(hmac_st), ISC_R_SUCCESS);
160
161 assert_int_equal(isc_hmac_init(hmac_st, "", 0, ISC_MD_SHA512),
162 ISC_R_SUCCESS);
163 assert_int_equal(isc_hmac_reset(hmac_st), ISC_R_SUCCESS);
164 }
165
166 ISC_RUN_TEST_IMPL(isc_hmac_update) {
167 isc_hmac_t *hmac_st = *state;
168 assert_non_null(hmac_st);
169
170 /* Uses message digest context initialized in isc_hmac_init_test() */
171 expect_assert_failure(isc_hmac_update(NULL, NULL, 0));
172
173 assert_int_equal(isc_hmac_update(hmac_st, NULL, 100), ISC_R_SUCCESS);
174 assert_int_equal(isc_hmac_update(hmac_st, (const unsigned char *)"", 0),
175 ISC_R_SUCCESS);
176 }
177
178 ISC_RUN_TEST_IMPL(isc_hmac_reset) {
179 isc_hmac_t *hmac_st = *state;
180 #if 0
181 unsigned char digest[ISC_MAX_MD_SIZE] __attribute((unused));
182 unsigned int digestlen __attribute((unused));
183 #endif /* if 0 */
184
185 assert_non_null(hmac_st);
186
187 assert_int_equal(isc_hmac_init(hmac_st, "", 0, ISC_MD_SHA512),
188 ISC_R_SUCCESS);
189 assert_int_equal(
190 isc_hmac_update(hmac_st, (const unsigned char *)"a", 1),
191 ISC_R_SUCCESS);
192 assert_int_equal(
193 isc_hmac_update(hmac_st, (const unsigned char *)"b", 1),
194 ISC_R_SUCCESS);
195
196 assert_int_equal(isc_hmac_reset(hmac_st), ISC_R_SUCCESS);
197
198 #if 0
199 /*
200 * This test would require OpenSSL compiled with mock_assert(),
201 * so this could be only manually checked that the test will
202 * segfault when called by hand
203 */
204 expect_assert_failure(isc_hmac_final(hmac_st, digest, &digestlen));
205 #endif /* if 0 */
206 }
207
208 ISC_RUN_TEST_IMPL(isc_hmac_final) {
209 isc_hmac_t *hmac_st = *state;
210 assert_non_null(hmac_st);
211
212 unsigned char digest[ISC_MAX_MD_SIZE];
213 unsigned int digestlen = sizeof(digest);
214
215 /* Fail when message digest context is empty */
216 expect_assert_failure(isc_hmac_final(NULL, digest, &digestlen));
217 /* Fail when output buffer is empty */
218 expect_assert_failure(isc_hmac_final(hmac_st, NULL, &digestlen));
219
220 assert_int_equal(isc_hmac_init(hmac_st, "", 0, ISC_MD_SHA512),
221 ISC_R_SUCCESS);
222 /* Fail when the digest length pointer is empty */
223 expect_assert_failure(isc_hmac_final(hmac_st, digest, NULL));
224 }
225
226 ISC_RUN_TEST_IMPL(isc_hmac_md5) {
227 isc_hmac_t *hmac_st = *state;
228
229 /* Test 0 */
230 isc_hmac_test(hmac_st, TEST_INPUT(""), ISC_MD_MD5, TEST_INPUT(""),
231 "74E6F7298A9C2D168935F58C001BAD88", 1);
232
233 /* Test 1 */
234 isc_hmac_test(hmac_st,
235 TEST_INPUT("\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
236 "\x0b\x0b\x0b\x0b\x0b\x0b"),
237 ISC_MD_MD5,
238 TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
239 "9294727A3638BB1C13F48EF8158BFC9D", 1);
240
241 /* Test 2 */
242 isc_hmac_test(hmac_st, TEST_INPUT("Jefe"), ISC_MD_MD5,
243 TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79"
244 "\x61\x20\x77\x61\x6e\x74\x20\x66\x6f"
245 "\x72\x20\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
246 "750C783E6AB0B503EAA86E310A5DB738", 1);
247
248 /* Test 3 */
249 isc_hmac_test(hmac_st,
250 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
251 "\xaa\xaa\xaa\xaa\xaa\xaa"),
252 ISC_MD_MD5,
253 TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
254 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
255 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
256 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
257 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
258 "56BE34521D144C88DBB8C733F0E8B3F6", 1);
259 /* Test 4 */
260 isc_hmac_test(hmac_st,
261 TEST_INPUT("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
262 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
263 "\x15\x16\x17\x18\x19"),
264 ISC_MD_MD5,
265 TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
266 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
267 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
268 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
269 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
270 "697EAF0ACA3A3AEA3A75164746FFAA79", 1);
271 #if 0
272 /* Test 5 -- unimplemented optional functionality */
273 isc_hmac_test(hmac_st,
274 TEST_INPUT("\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
275 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"),
276 ISC_MD_MD5,
277 TEST_INPUT("Test With Truncation"),
278 "4C1A03424B55E07FE7F27BE1",
279 1);
280 /* Test 6 -- unimplemented optional functionality */
281 isc_hmac_test(hmac_st,
282 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
283 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
284 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
285 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
286 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
287 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
288 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
289 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
290 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
291 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
292 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
293 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
294 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"),
295 ISC_MD_MD5,
296 TEST_INPUT("Test Using Larger Than Block-Size Key - "
297 "Hash Key First"),
298 "AA4AE5E15272D00E95705637CE8A3B55ED402112",
299 1);
300 /* Test 7 -- unimplemented optional functionality */
301 isc_hmac_test(hmac_st,
302 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
303 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
304 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
305 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
306 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
307 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
308 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
309 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
310 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
311 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
312 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
313 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
314 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"),
315 ISC_MD_MD5,
316 TEST_INPUT("Test Using Larger Than Block-Size Key and "
317 "Larger Than One Block-Size Data"),
318 "E8E99D0F45237D786D6BBAA7965C7808BBFF1A91",
319 1);
320 #endif /* if 0 */
321 }
322
323 ISC_RUN_TEST_IMPL(isc_hmac_sha1) {
324 isc_hmac_t *hmac_st = *state;
325
326 /* Test 0 */
327 isc_hmac_test(hmac_st, TEST_INPUT(""), ISC_MD_SHA1, TEST_INPUT(""),
328 "FBDB1D1B18AA6C08324B7D64B71FB76370690E1D", 1);
329
330 /* Test 1 */
331 isc_hmac_test(hmac_st,
332 TEST_INPUT("\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
333 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"),
334 ISC_MD_SHA1,
335 TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
336 "B617318655057264E28BC0B6FB378C8EF146BE00", 1);
337 /* Test 2 */
338 isc_hmac_test(hmac_st, TEST_INPUT("Jefe"), ISC_MD_SHA1,
339 TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
340 "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
341 "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
342 "EFFCDF6AE5EB2FA2D27416D5F184DF9C259A7C79", 1);
343 /* Test 3 */
344 isc_hmac_test(hmac_st,
345 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
346 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"),
347 ISC_MD_SHA1,
348 TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
349 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
350 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
351 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
352 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
353 "125D7342B9AC11CD91A39AF48AA17B4F63F175D3", 1);
354 /* Test 4 */
355 isc_hmac_test(hmac_st,
356 TEST_INPUT("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
357 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
358 "\x15\x16\x17\x18\x19"),
359 ISC_MD_SHA1,
360 TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
361 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
362 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
363 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
364 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
365 "4C9007F4026250C6BC8414F9BF50C86C2D7235DA", 1);
366 #if 0
367 /* Test 5 */
368 isc_hmac_test(hmac_st,
369 TEST_INPUT("\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
370 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"),
371 ISC_MD_SHA1,
372 TEST_INPUT("Test With Truncation"),
373 "4C1A03424B55E07FE7F27BE1",
374 1);
375 #endif /* if 0 */
376 /* Test 6 */
377 isc_hmac_test(hmac_st,
378 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
379 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
380 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
381 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
382 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
383 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
384 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
385 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"),
386 ISC_MD_SHA1,
387 TEST_INPUT("Test Using Larger Than Block-Size Key - "
388 "Hash Key First"),
389 "AA4AE5E15272D00E95705637CE8A3B55ED402112", 1);
390 /* Test 7 */
391 isc_hmac_test(hmac_st,
392 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
393 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
394 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
395 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
396 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
397 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
398 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
399 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"),
400 ISC_MD_SHA1,
401 TEST_INPUT("Test Using Larger Than Block-Size Key and "
402 "Larger Than One Block-Size Data"),
403 "E8E99D0F45237D786D6BBAA7965C7808BBFF1A91", 1);
404 }
405
406 ISC_RUN_TEST_IMPL(isc_hmac_sha224) {
407 isc_hmac_t *hmac_st = *state;
408
409 /* Test 0 */
410 isc_hmac_test(hmac_st, TEST_INPUT(""), ISC_MD_SHA224, TEST_INPUT(""),
411 "5CE14F72894662213E2748D2A6BA234B74263910CEDDE2F5"
412 "A9271524",
413 1);
414
415 /* Test 1 */
416 isc_hmac_test(hmac_st,
417 TEST_INPUT("\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
418 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"),
419 ISC_MD_SHA224,
420 TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
421 "896FB1128ABBDF196832107CD49DF33F47B4B1169912BA"
422 "4F53684B22",
423 1);
424 /* Test 2 */
425 isc_hmac_test(hmac_st, TEST_INPUT("Jefe"), ISC_MD_SHA224,
426 TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
427 "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
428 "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
429 "A30E01098BC6DBBF45690F3A7E9E6D0F8BBEA2A39E61480"
430 "08FD05E44",
431 1);
432 /* Test 3 */
433 isc_hmac_test(hmac_st,
434 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
435 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"),
436 ISC_MD_SHA224,
437 TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
438 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
439 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
440 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
441 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
442 "7FB3CB3588C6C1F6FFA9694D7D6AD2649365B0C1F65D69"
443 "D1EC8333EA",
444 1);
445 /* Test 4 */
446 isc_hmac_test(hmac_st,
447 TEST_INPUT("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
448 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
449 "\x15\x16\x17\x18\x19"),
450 ISC_MD_SHA224,
451 TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
452 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
453 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
454 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
455 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
456 "6C11506874013CAC6A2ABC1BB382627CEC6A90D86EFC01"
457 "2DE7AFEC5A",
458 1);
459 #if 0
460 /* Test 5 -- unimplemented optional functionality */
461 isc_hmac_test(hmac_st,
462 TEST_INPUT("\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
463 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"),
464 ISC_MD_SHA224,
465 TEST_INPUT("Test With Truncation"),
466 "4C1A03424B55E07FE7F27BE1",
467 1);
468 #endif /* if 0 */
469 /* Test 6 */
470 isc_hmac_test(hmac_st,
471 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
472 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
473 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
474 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
475 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
476 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
477 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
478 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
479 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
480 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
481 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
482 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
483 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
484 "\xaa"),
485 ISC_MD_SHA224,
486 TEST_INPUT("Test Using Larger Than Block-Size Key - "
487 "Hash Key First"),
488 "95E9A0DB962095ADAEBE9B2D6F0DBCE2D499F112F2D2B7"
489 "273FA6870E",
490 1);
491 /* Test 7 */
492 isc_hmac_test(hmac_st,
493 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
494 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
495 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
496 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
497 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
498 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
499 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
500 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
501 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
502 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
503 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
504 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
505 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
506 "\xaa"),
507 ISC_MD_SHA224,
508 TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20"
509 "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67"
510 "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20"
511 "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
512 "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20"
513 "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67"
514 "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c"
515 "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64"
516 "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b"
517 "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74"
518 "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65"
519 "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62"
520 "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20"
521 "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41"
522 "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68"
523 "\x6d\x2e"),
524 "3A854166AC5D9F023F54D517D0B39DBD946770DB9C2B95"
525 "C9F6F565D1",
526 1);
527 }
528
529 ISC_RUN_TEST_IMPL(isc_hmac_sha256) {
530 isc_hmac_t *hmac_st = *state;
531
532 /* Test 0 */
533 isc_hmac_test(hmac_st, TEST_INPUT(""), ISC_MD_SHA256, TEST_INPUT(""),
534 "B613679A0814D9EC772F95D778C35FC5FF1697C493715653"
535 "C6C712144292C5AD",
536 1);
537
538 /* Test 1 */
539 isc_hmac_test(hmac_st,
540 TEST_INPUT("\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
541 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"),
542 ISC_MD_SHA256,
543 TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
544 "B0344C61D8DB38535CA8AFCEAF0BF12B881DC200C9833D"
545 "A726E9376C2E32CFF7",
546 1);
547 /* Test 2 */
548 isc_hmac_test(hmac_st, TEST_INPUT("Jefe"), ISC_MD_SHA256,
549 TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
550 "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
551 "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
552 "5BDCC146BF60754E6A042426089575C75A003F089D2739"
553 "839DEC58B964EC3843",
554 1);
555 /* Test 3 */
556 isc_hmac_test(hmac_st,
557 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
558 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"),
559 ISC_MD_SHA256,
560 TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
561 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
562 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
563 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
564 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
565 "773EA91E36800E46854DB8EBD09181A72959098B3EF8C1"
566 "22D9635514CED565FE",
567 1);
568 /* Test 4 */
569 isc_hmac_test(hmac_st,
570 TEST_INPUT("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
571 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
572 "\x15\x16\x17\x18\x19"),
573 ISC_MD_SHA256,
574 TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
575 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
576 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
577 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
578 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
579 "82558A389A443C0EA4CC819899F2083A85F0FAA3E578F8"
580 "077A2E3FF46729665B",
581 1);
582 #if 0
583 /* Test 5 -- unimplemented optional functionality */
584 isc_hmac_test(hmac_st,
585 TEST_INPUT("\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
586 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"),
587 ISC_MD_SHA256,
588 TEST_INPUT("Test With Truncation"),
589 "4C1A03424B55E07FE7F27BE1",
590 1);
591 #endif /* if 0 */
592 /* Test 6 */
593 isc_hmac_test(hmac_st,
594 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
595 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
596 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
597 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
598 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
599 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
600 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
601 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
602 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
603 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
604 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
605 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
606 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
607 "\xaa"),
608 ISC_MD_SHA256,
609 TEST_INPUT("Test Using Larger Than Block-Size Key - "
610 "Hash Key First"),
611 "60E431591EE0B67F0D8A26AACBF5B77F8E0BC6213728C5"
612 "140546040F0EE37F54",
613 1);
614 /* Test 7 */
615 isc_hmac_test(hmac_st,
616 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
617 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
618 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
619 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
620 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
621 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
622 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
623 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
624 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
625 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
626 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
627 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
628 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
629 "\xaa"),
630 ISC_MD_SHA256,
631 TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20"
632 "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67"
633 "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20"
634 "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
635 "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20"
636 "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67"
637 "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c"
638 "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64"
639 "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b"
640 "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74"
641 "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65"
642 "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62"
643 "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20"
644 "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41"
645 "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68"
646 "\x6d\x2e"),
647 "9B09FFA71B942FCB27635FBCD5B0E944BFDC63644F0713"
648 "938A7F51535C3A35E2",
649 1);
650 }
651
652 ISC_RUN_TEST_IMPL(isc_hmac_sha384) {
653 isc_hmac_t *hmac_st = *state;
654
655 /* Test 0 */
656 isc_hmac_test(hmac_st, TEST_INPUT(""), ISC_MD_SHA384, TEST_INPUT(""),
657 "6C1F2EE938FAD2E24BD91298474382CA218C75DB3D83E114"
658 "B3D4367776D14D3551289E75E8209CD4B792302840234ADC",
659 1);
660
661 /* Test 1 */
662 isc_hmac_test(hmac_st,
663 TEST_INPUT("\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
664 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"),
665 ISC_MD_SHA384,
666 TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
667 "AFD03944D84895626B0825F4AB46907F15F9DADBE4101E"
668 "C682AA034C7CEBC59CFAEA9EA9076EDE7F4AF152"
669 "E8B2FA9CB6",
670 1);
671 /* Test 2 */
672 isc_hmac_test(hmac_st, TEST_INPUT("Jefe"), ISC_MD_SHA384,
673 TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
674 "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
675 "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
676 "AF45D2E376484031617F78D2B58A6B1B9C7EF464F5A01B"
677 "47E42EC3736322445E8E2240CA5E69E2C78B3239"
678 "ECFAB21649",
679 1);
680 /* Test 3 */
681 isc_hmac_test(hmac_st,
682 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
683 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"),
684 ISC_MD_SHA384,
685 TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
686 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
687 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
688 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
689 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
690 "88062608D3E6AD8A0AA2ACE014C8A86F0AA635D947AC9F"
691 "EBE83EF4E55966144B2A5AB39DC13814B94E3AB6"
692 "E101A34F27",
693 1);
694 /* Test 4 */
695 isc_hmac_test(hmac_st,
696 TEST_INPUT("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
697 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
698 "\x15\x16\x17\x18\x19"),
699 ISC_MD_SHA384,
700 TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
701 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
702 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
703 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
704 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
705 "3E8A69B7783C25851933AB6290AF6CA77A998148085000"
706 "9CC5577C6E1F573B4E6801DD23C4A7D679CCF8A3"
707 "86C674CFFB",
708 1);
709 #if 0
710 /* Test 5 -- unimplemented optional functionality */
711 isc_hmac_test(hmac_st,
712 TEST_INPUT("\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
713 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"),
714 ISC_MD_SHA384,
715 TEST_INPUT("Test With Truncation"),
716 "4C1A03424B55E07FE7F27BE1",
717 1);
718 #endif /* if 0 */
719 /* Test 6 */
720 isc_hmac_test(hmac_st,
721 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
722 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
723 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
724 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
725 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
726 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
727 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
728 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
729 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
730 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
731 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
732 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
733 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
734 "\xaa"),
735 ISC_MD_SHA384,
736 TEST_INPUT("Test Using Larger Than Block-Size Key - "
737 "Hash Key First"),
738 "4ECE084485813E9088D2C63A041BC5B44F9EF1012A2B58"
739 "8F3CD11F05033AC4C60C2EF6AB4030FE8296248D"
740 "F163F44952",
741 1);
742 /* Test 7 */
743 isc_hmac_test(hmac_st,
744 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
745 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
746 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
747 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
748 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
749 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
750 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
751 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
752 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
753 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
754 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
755 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
756 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
757 "\xaa"),
758 ISC_MD_SHA384,
759 TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20"
760 "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67"
761 "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20"
762 "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
763 "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20"
764 "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67"
765 "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c"
766 "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64"
767 "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b"
768 "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74"
769 "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65"
770 "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62"
771 "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20"
772 "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41"
773 "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68"
774 "\x6d\x2e"),
775 "6617178E941F020D351E2F254E8FD32C602420FEB0B8FB"
776 "9ADCCEBB82461E99C5A678CC31E799176D3860E6"
777 "110C46523E",
778 1);
779 }
780
781 ISC_RUN_TEST_IMPL(isc_hmac_sha512) {
782 isc_hmac_t *hmac_st = *state;
783
784 /* Test 0 */
785 isc_hmac_test(hmac_st, TEST_INPUT(""), ISC_MD_SHA512, TEST_INPUT(""),
786 "B936CEE86C9F87AA5D3C6F2E84CB5A4239A5FE50480A6EC6"
787 "6B70AB5B1F4AC6730C6C515421B327EC1D69402E53DFB49A"
788 "D7381EB067B338FD7B0CB22247225D47",
789 1);
790
791 /* Test 1 */
792 isc_hmac_test(hmac_st,
793 TEST_INPUT("\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
794 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"),
795 ISC_MD_SHA512,
796 TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
797 "87AA7CDEA5EF619D4FF0B4241A1D6CB02379F4E2CE4EC2"
798 "787AD0B30545E17CDEDAA833B7D6B8A702038B27"
799 "4EAEA3F4E4BE9D914EEB61F1702E696C203A126854",
800 1);
801 /* Test 2 */
802 isc_hmac_test(hmac_st, TEST_INPUT("Jefe"), ISC_MD_SHA512,
803 TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
804 "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
805 "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
806 "164B7A7BFCF819E2E395FBE73B56E0A387BD64222E831F"
807 "D610270CD7EA2505549758BF75C05A994A6D034F"
808 "65F8F0E6FDCAEAB1A34D4A6B4B636E070A38BCE737",
809 1);
810 /* Test 3 */
811 isc_hmac_test(hmac_st,
812 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
813 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"),
814 ISC_MD_SHA512,
815 TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
816 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
817 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
818 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
819 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
820 "FA73B0089D56A284EFB0F0756C890BE9B1B5DBDD8EE81A"
821 "3655F83E33B2279D39BF3E848279A722C806B485"
822 "A47E67C807B946A337BEE8942674278859E13292FB",
823 1);
824 /* Test 4 */
825 isc_hmac_test(hmac_st,
826 TEST_INPUT("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
827 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
828 "\x15\x16\x17\x18\x19"),
829 ISC_MD_SHA512,
830 TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
831 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
832 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
833 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
834 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
835 "B0BA465637458C6990E5A8C5F61D4AF7E576D97FF94B87"
836 "2DE76F8050361EE3DBA91CA5C11AA25EB4D67927"
837 "5CC5788063A5F19741120C4F2DE2ADEBEB10A298DD",
838 1);
839 #if 0
840 /* Test 5 -- unimplemented optional functionality */
841 isc_hmac_test(hmac_st,
842 TEST_INPUT("\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
843 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"),
844 ISC_MD_SHA512,
845 TEST_INPUT("Test With Truncation"),
846 "4C1A03424B55E07FE7F27BE1",
847 1);
848 #endif /* if 0 */
849 /* Test 6 */
850 isc_hmac_test(hmac_st,
851 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
852 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
853 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
854 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
855 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
856 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
857 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
858 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
859 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
860 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
861 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
862 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
863 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
864 "\xaa"),
865 ISC_MD_SHA512,
866 TEST_INPUT("Test Using Larger Than Block-Size Key - "
867 "Hash Key First"),
868 "80B24263C7C1A3EBB71493C1DD7BE8B49B46D1F41B4AEE"
869 "C1121B013783F8F3526B56D037E05F2598BD0FD2"
870 "215D6A1E5295E64F73F63F0AEC8B915A985D786598",
871 1);
872 /* Test 7 */
873 isc_hmac_test(hmac_st,
874 TEST_INPUT("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
875 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
876 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
877 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
878 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
879 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
880 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
881 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
882 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
883 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
884 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
885 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
886 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
887 "\xaa"),
888 ISC_MD_SHA512,
889 TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20"
890 "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67"
891 "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20"
892 "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
893 "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20"
894 "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67"
895 "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c"
896 "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64"
897 "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b"
898 "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74"
899 "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65"
900 "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62"
901 "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20"
902 "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41"
903 "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68"
904 "\x6d\x2e"),
905 "E37B6A775DC87DBAA4DFA9F96E5E3FFDDEBD71F8867289"
906 "865DF5A32D20CDC944B6022CAC3C4982B10D5EEB"
907 "55C3E4DE15134676FB6DE0446065C97440FA8C6A58",
908 1);
909 }
910
911 ISC_TEST_LIST_START
912
913 ISC_TEST_ENTRY(isc_hmac_new)
914 ISC_TEST_ENTRY_CUSTOM(isc_hmac_init, _reset, _reset)
915
916 ISC_TEST_ENTRY_CUSTOM(isc_hmac_reset, _reset, _reset)
917
918 ISC_TEST_ENTRY(isc_hmac_md5)
919 ISC_TEST_ENTRY(isc_hmac_sha1)
920 ISC_TEST_ENTRY(isc_hmac_sha224)
921 ISC_TEST_ENTRY(isc_hmac_sha256)
922 ISC_TEST_ENTRY(isc_hmac_sha384)
923 ISC_TEST_ENTRY(isc_hmac_sha512)
924
925 ISC_TEST_ENTRY_CUSTOM(isc_hmac_update, _reset, _reset)
926 ISC_TEST_ENTRY_CUSTOM(isc_hmac_final, _reset, _reset)
927
928 ISC_TEST_ENTRY(isc_hmac_free)
929
930 ISC_TEST_LIST_END
931
932 ISC_TEST_MAIN_CUSTOM(_setup, _teardown)
933