xref: /minix3/external/bsd/bind/dist/lib/isc/tests/hash_test.c (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek /*	$NetBSD: hash_test.c,v 1.1.1.7 2015/07/08 15:38:05 christos Exp $	*/
2*00b67f09SDavid van Moolenbroek 
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek  * Copyright (C) 2011-2015  Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek  *
6*00b67f09SDavid van Moolenbroek  * Permission to use, copy, modify, and/or distribute this software for any
7*00b67f09SDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
8*00b67f09SDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
9*00b67f09SDavid van Moolenbroek  *
10*00b67f09SDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11*00b67f09SDavid van Moolenbroek  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12*00b67f09SDavid van Moolenbroek  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13*00b67f09SDavid van Moolenbroek  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14*00b67f09SDavid van Moolenbroek  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15*00b67f09SDavid van Moolenbroek  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16*00b67f09SDavid van Moolenbroek  * PERFORMANCE OF THIS SOFTWARE.
17*00b67f09SDavid van Moolenbroek  */
18*00b67f09SDavid van Moolenbroek 
19*00b67f09SDavid van Moolenbroek /* Id */
20*00b67f09SDavid van Moolenbroek 
21*00b67f09SDavid van Moolenbroek /* ! \file */
22*00b67f09SDavid van Moolenbroek 
23*00b67f09SDavid van Moolenbroek #include <config.h>
24*00b67f09SDavid van Moolenbroek 
25*00b67f09SDavid van Moolenbroek #include <atf-c.h>
26*00b67f09SDavid van Moolenbroek 
27*00b67f09SDavid van Moolenbroek #include <stdio.h>
28*00b67f09SDavid van Moolenbroek #include <string.h>
29*00b67f09SDavid van Moolenbroek 
30*00b67f09SDavid van Moolenbroek #include <isc/crc64.h>
31*00b67f09SDavid van Moolenbroek #include <isc/hmacmd5.h>
32*00b67f09SDavid van Moolenbroek #include <isc/hmacsha.h>
33*00b67f09SDavid van Moolenbroek #include <isc/md5.h>
34*00b67f09SDavid van Moolenbroek #include <isc/sha1.h>
35*00b67f09SDavid van Moolenbroek #include <isc/util.h>
36*00b67f09SDavid van Moolenbroek #include <isc/string.h>
37*00b67f09SDavid van Moolenbroek 
38*00b67f09SDavid van Moolenbroek /*
39*00b67f09SDavid van Moolenbroek  * Test data from RFC6234
40*00b67f09SDavid van Moolenbroek  */
41*00b67f09SDavid van Moolenbroek 
42*00b67f09SDavid van Moolenbroek unsigned char digest[ISC_SHA512_DIGESTLENGTH];
43*00b67f09SDavid van Moolenbroek unsigned char buffer[1024];
44*00b67f09SDavid van Moolenbroek const char *s;
45*00b67f09SDavid van Moolenbroek char str[2 * ISC_SHA512_DIGESTLENGTH + 1];
46*00b67f09SDavid van Moolenbroek unsigned char key[20];
47*00b67f09SDavid van Moolenbroek 
48*00b67f09SDavid van Moolenbroek isc_result_t
49*00b67f09SDavid van Moolenbroek tohexstr(unsigned char *d, unsigned int len, char *out);
50*00b67f09SDavid van Moolenbroek /*
51*00b67f09SDavid van Moolenbroek  * Precondition: a hexadecimal number in *d, the length of that number in len,
52*00b67f09SDavid van Moolenbroek  *   and a pointer to a character array to put the output (*out).
53*00b67f09SDavid van Moolenbroek  * Postcondition: A String representation of the given hexadecimal number is
54*00b67f09SDavid van Moolenbroek  *   placed into the array *out
55*00b67f09SDavid van Moolenbroek  *
56*00b67f09SDavid van Moolenbroek  * 'out' MUST point to an array of at least len * 2 + 1
57*00b67f09SDavid van Moolenbroek  *
58*00b67f09SDavid van Moolenbroek  * Return values: ISC_R_SUCCESS if the operation is sucessful
59*00b67f09SDavid van Moolenbroek  */
60*00b67f09SDavid van Moolenbroek 
61*00b67f09SDavid van Moolenbroek isc_result_t
tohexstr(unsigned char * d,unsigned int len,char * out)62*00b67f09SDavid van Moolenbroek tohexstr(unsigned char *d, unsigned int len, char *out) {
63*00b67f09SDavid van Moolenbroek 
64*00b67f09SDavid van Moolenbroek 	out[0]='\0';
65*00b67f09SDavid van Moolenbroek 	char c_ret[] = "AA";
66*00b67f09SDavid van Moolenbroek 	unsigned int i;
67*00b67f09SDavid van Moolenbroek 	strcat(out, "0x");
68*00b67f09SDavid van Moolenbroek 	for (i = 0; i < len; i++) {
69*00b67f09SDavid van Moolenbroek 		sprintf(c_ret, "%02X", d[i]);
70*00b67f09SDavid van Moolenbroek 		strcat(out, c_ret);
71*00b67f09SDavid van Moolenbroek 	}
72*00b67f09SDavid van Moolenbroek 	strcat(out, "\0");
73*00b67f09SDavid van Moolenbroek 	return (ISC_R_SUCCESS);
74*00b67f09SDavid van Moolenbroek }
75*00b67f09SDavid van Moolenbroek 
76*00b67f09SDavid van Moolenbroek 
77*00b67f09SDavid van Moolenbroek #define TEST_INPUT(x) (x), sizeof(x)-1
78*00b67f09SDavid van Moolenbroek 
79*00b67f09SDavid van Moolenbroek typedef struct hash_testcase {
80*00b67f09SDavid van Moolenbroek 	const char *input;
81*00b67f09SDavid van Moolenbroek 	size_t input_len;
82*00b67f09SDavid van Moolenbroek 	const char *result;
83*00b67f09SDavid van Moolenbroek 	int repeats;
84*00b67f09SDavid van Moolenbroek } hash_testcase_t;
85*00b67f09SDavid van Moolenbroek 
86*00b67f09SDavid van Moolenbroek typedef struct hash_test_key {
87*00b67f09SDavid van Moolenbroek 	const char *key;
88*00b67f09SDavid van Moolenbroek 	const int len;
89*00b67f09SDavid van Moolenbroek } hash_test_key_t;
90*00b67f09SDavid van Moolenbroek 
91*00b67f09SDavid van Moolenbroek /* non-hmac tests */
92*00b67f09SDavid van Moolenbroek 
93*00b67f09SDavid van Moolenbroek ATF_TC(isc_sha1);
ATF_TC_HEAD(isc_sha1,tc)94*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_sha1, tc) {
95*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "sha1 examples from RFC4634");
96*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_sha1,tc)97*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_sha1, tc) {
98*00b67f09SDavid van Moolenbroek 	isc_sha1_t sha1;
99*00b67f09SDavid van Moolenbroek 	int i;
100*00b67f09SDavid van Moolenbroek 
101*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
102*00b67f09SDavid van Moolenbroek 
103*00b67f09SDavid van Moolenbroek 	/*
104*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
105*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
106*00b67f09SDavid van Moolenbroek 	 * result specified here.
107*00b67f09SDavid van Moolenbroek 	 */
108*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
109*00b67f09SDavid van Moolenbroek 		/* Test 1 */
110*00b67f09SDavid van Moolenbroek 		{
111*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abc"),
112*00b67f09SDavid van Moolenbroek 			"0xA9993E364706816ABA3E25717850C26C9CD0D89D",
113*00b67f09SDavid van Moolenbroek 			1
114*00b67f09SDavid van Moolenbroek 		},
115*00b67f09SDavid van Moolenbroek 		/* Test 2 */
116*00b67f09SDavid van Moolenbroek 		{
117*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijk"
118*00b67f09SDavid van Moolenbroek 				   "ljklmklmnlmnomnopnopq"),
119*00b67f09SDavid van Moolenbroek 			"0x84983E441C3BD26EBAAE4AA1F95129E5E54670F1",
120*00b67f09SDavid van Moolenbroek 			1
121*00b67f09SDavid van Moolenbroek 		},
122*00b67f09SDavid van Moolenbroek 		/* Test 3 */
123*00b67f09SDavid van Moolenbroek 		{
124*00b67f09SDavid van Moolenbroek 			TEST_INPUT("a") /* times 1000000 */,
125*00b67f09SDavid van Moolenbroek 			"0x34AA973CD4C4DAA4F61EEB2BDBAD27316534016F",
126*00b67f09SDavid van Moolenbroek 			1000000
127*00b67f09SDavid van Moolenbroek 		},
128*00b67f09SDavid van Moolenbroek 		/* Test 4 -- exact multiple of 512 bits */
129*00b67f09SDavid van Moolenbroek 		{
130*00b67f09SDavid van Moolenbroek 			TEST_INPUT("01234567012345670123456701234567"),
131*00b67f09SDavid van Moolenbroek 			"0xDEA356A2CDDD90C7A7ECEDC5EBB563934F460452",
132*00b67f09SDavid van Moolenbroek 			20 /* 20 times */
133*00b67f09SDavid van Moolenbroek 		},
134*00b67f09SDavid van Moolenbroek #if 0
135*00b67f09SDavid van Moolenbroek 		/* Test 5 -- optional feature, not implemented */
136*00b67f09SDavid van Moolenbroek 		{
137*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
138*00b67f09SDavid van Moolenbroek 			/* "extrabits": 0x98 , "numberextrabits": 5 */
139*00b67f09SDavid van Moolenbroek 			"0x29826B003B906E660EFF4027CE98AF3531AC75BA",
140*00b67f09SDavid van Moolenbroek 			1
141*00b67f09SDavid van Moolenbroek 		},
142*00b67f09SDavid van Moolenbroek #endif
143*00b67f09SDavid van Moolenbroek 		/* Test 6 */
144*00b67f09SDavid van Moolenbroek 		{
145*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x5e"),
146*00b67f09SDavid van Moolenbroek 			"0x5E6F80A34A9798CAFC6A5DB96CC57BA4C4DB59C2",
147*00b67f09SDavid van Moolenbroek 			1
148*00b67f09SDavid van Moolenbroek 		},
149*00b67f09SDavid van Moolenbroek #if 0
150*00b67f09SDavid van Moolenbroek 		/* Test 7 -- optional feature, not implemented */
151*00b67f09SDavid van Moolenbroek 		{
152*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x49\xb2\xae\xc2\x59\x4b\xbe\x3a"
153*00b67f09SDavid van Moolenbroek 				   "\x3b\x11\x75\x42\xd9\x4a\xc8"),
154*00b67f09SDavid van Moolenbroek 			/* "extrabits": 0x80, "numberextrabits": 3 */
155*00b67f09SDavid van Moolenbroek 		  "0x6239781E03729919C01955B3FFA8ACB60B988340", 1 },
156*00b67f09SDavid van Moolenbroek #endif
157*00b67f09SDavid van Moolenbroek 		/* Test 8 */
158*00b67f09SDavid van Moolenbroek 		{
159*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x9a\x7d\xfd\xf1\xec\xea\xd0\x6e\xd6\x46"
160*00b67f09SDavid van Moolenbroek 				   "\xaa\x55\xfe\x75\x71\x46"),
161*00b67f09SDavid van Moolenbroek 			"0x82ABFF6605DBE1C17DEF12A394FA22A82B544A35",
162*00b67f09SDavid van Moolenbroek 			1
163*00b67f09SDavid van Moolenbroek 		},
164*00b67f09SDavid van Moolenbroek #if 0
165*00b67f09SDavid van Moolenbroek 		/* Test 9 -- optional feature, not implemented */
166*00b67f09SDavid van Moolenbroek 		{
167*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x65\xf9\x32\x99\x5b\xa4\xce\x2c\xb1\xb4"
168*00b67f09SDavid van Moolenbroek 				   "\xa2\xe7\x1a\xe7\x02\x20\xaa\xce\xc8\x96"
169*00b67f09SDavid van Moolenbroek 				   "\x2d\xd4\x49\x9c\xbd\x7c\x88\x7a\x94\xea"
170*00b67f09SDavid van Moolenbroek 				   "\xaa\x10\x1e\xa5\xaa\xbc\x52\x9b\x4e\x7e"
171*00b67f09SDavid van Moolenbroek 				   "\x43\x66\x5a\x5a\xf2\xcd\x03\xfe\x67\x8e"
172*00b67f09SDavid van Moolenbroek 				   "\xa6\xa5\x00\x5b\xba\x3b\x08\x22\x04\xc2"
173*00b67f09SDavid van Moolenbroek 				   "\x8b\x91\x09\xf4\x69\xda\xc9\x2a\xaa\xb3"
174*00b67f09SDavid van Moolenbroek 				   "\xaa\x7c\x11\xa1\xb3\x2a"),
175*00b67f09SDavid van Moolenbroek 			/* "extrabits": 0xE0 , "numberextrabits": 3 */
176*00b67f09SDavid van Moolenbroek 			"0x8C5B2A5DDAE5A97FC7F9D85661C672ADBF7933D4",
177*00b67f09SDavid van Moolenbroek 			1
178*00b67f09SDavid van Moolenbroek 		},
179*00b67f09SDavid van Moolenbroek #endif
180*00b67f09SDavid van Moolenbroek 		/* Test 10 */
181*00b67f09SDavid van Moolenbroek 		{
182*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xf7\x8f\x92\x14\x1b\xcd\x17\x0a\xe8\x9b"
183*00b67f09SDavid van Moolenbroek 				   "\x4f\xba\x15\xa1\xd5\x9f\x3f\xd8\x4d\x22"
184*00b67f09SDavid van Moolenbroek 				   "\x3c\x92\x51\xbd\xac\xbb\xae\x61\xd0\x5e"
185*00b67f09SDavid van Moolenbroek 				   "\xd1\x15\xa0\x6a\x7c\xe1\x17\xb7\xbe\xea"
186*00b67f09SDavid van Moolenbroek 				   "\xd2\x44\x21\xde\xd9\xc3\x25\x92\xbd\x57"
187*00b67f09SDavid van Moolenbroek 				   "\xed\xea\xe3\x9c\x39\xfa\x1f\xe8\x94\x6a"
188*00b67f09SDavid van Moolenbroek 				   "\x84\xd0\xcf\x1f\x7b\xee\xad\x17\x13\xe2"
189*00b67f09SDavid van Moolenbroek 				   "\xe0\x95\x98\x97\x34\x7f\x67\xc8\x0b\x04"
190*00b67f09SDavid van Moolenbroek 				   "\x00\xc2\x09\x81\x5d\x6b\x10\xa6\x83\x83"
191*00b67f09SDavid van Moolenbroek 				   "\x6f\xd5\x56\x2a\x56\xca\xb1\xa2\x8e\x81"
192*00b67f09SDavid van Moolenbroek 				   "\xb6\x57\x66\x54\x63\x1c\xf1\x65\x66\xb8"
193*00b67f09SDavid van Moolenbroek 				   "\x6e\x3b\x33\xa1\x08\xb0\x53\x07\xc0\x0a"
194*00b67f09SDavid van Moolenbroek 				   "\xff\x14\xa7\x68\xed\x73\x50\x60\x6a\x0f"
195*00b67f09SDavid van Moolenbroek 				   "\x85\xe6\xa9\x1d\x39\x6f\x5b\x5c\xbe\x57"
196*00b67f09SDavid van Moolenbroek 				   "\x7f\x9b\x38\x80\x7c\x7d\x52\x3d\x6d\x79"
197*00b67f09SDavid van Moolenbroek 				   "\x2f\x6e\xbc\x24\xa4\xec\xf2\xb3\xa4\x27"
198*00b67f09SDavid van Moolenbroek 				   "\xcd\xbb\xfb"),
199*00b67f09SDavid van Moolenbroek 			"0xCB0082C8F197D260991BA6A460E76E202BAD27B3",
200*00b67f09SDavid van Moolenbroek 			1
201*00b67f09SDavid van Moolenbroek 		},
202*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
203*00b67f09SDavid van Moolenbroek 	};
204*00b67f09SDavid van Moolenbroek 
205*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
206*00b67f09SDavid van Moolenbroek 
207*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
208*00b67f09SDavid van Moolenbroek 		isc_sha1_init(&sha1);
209*00b67f09SDavid van Moolenbroek 		for(i = 0; i < testcase->repeats; i++) {
210*00b67f09SDavid van Moolenbroek 			isc_sha1_update(&sha1,
211*00b67f09SDavid van Moolenbroek 					(const isc_uint8_t *) testcase->input,
212*00b67f09SDavid van Moolenbroek 					testcase->input_len);
213*00b67f09SDavid van Moolenbroek 		}
214*00b67f09SDavid van Moolenbroek 		isc_sha1_final(&sha1, digest);
215*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA1_DIGESTLENGTH, str);
216*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
217*00b67f09SDavid van Moolenbroek 
218*00b67f09SDavid van Moolenbroek 		testcase++;
219*00b67f09SDavid van Moolenbroek 	}
220*00b67f09SDavid van Moolenbroek }
221*00b67f09SDavid van Moolenbroek 
222*00b67f09SDavid van Moolenbroek ATF_TC(isc_sha224);
ATF_TC_HEAD(isc_sha224,tc)223*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_sha224, tc) {
224*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634");
225*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_sha224,tc)226*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_sha224, tc) {
227*00b67f09SDavid van Moolenbroek 	isc_sha224_t sha224;
228*00b67f09SDavid van Moolenbroek 	int i;
229*00b67f09SDavid van Moolenbroek 
230*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
231*00b67f09SDavid van Moolenbroek 
232*00b67f09SDavid van Moolenbroek 	/*
233*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
234*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
235*00b67f09SDavid van Moolenbroek 	 * result specified here.
236*00b67f09SDavid van Moolenbroek 	 */
237*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
238*00b67f09SDavid van Moolenbroek 		/* Test 1 */
239*00b67f09SDavid van Moolenbroek 		{
240*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abc"),
241*00b67f09SDavid van Moolenbroek 			"0x23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7"
242*00b67f09SDavid van Moolenbroek 				"E36C9DA7",
243*00b67f09SDavid van Moolenbroek 			1
244*00b67f09SDavid van Moolenbroek 		},
245*00b67f09SDavid van Moolenbroek 		/* Test 2 */
246*00b67f09SDavid van Moolenbroek 		{
247*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijklj"
248*00b67f09SDavid van Moolenbroek 				   "klmklmnlmnomnopnopq"),
249*00b67f09SDavid van Moolenbroek 			"0x75388B16512776CC5DBA5DA1FD890150B0C6455CB4F58B"
250*00b67f09SDavid van Moolenbroek 				"1952522525",
251*00b67f09SDavid van Moolenbroek 			1
252*00b67f09SDavid van Moolenbroek 		},
253*00b67f09SDavid van Moolenbroek 		/* Test 3 */
254*00b67f09SDavid van Moolenbroek 		{
255*00b67f09SDavid van Moolenbroek 			TEST_INPUT("a"),
256*00b67f09SDavid van Moolenbroek 			"0x20794655980C91D8BBB4C1EA97618A4BF03F42581948B2"
257*00b67f09SDavid van Moolenbroek 				"EE4EE7AD67",
258*00b67f09SDavid van Moolenbroek 			1000000
259*00b67f09SDavid van Moolenbroek 		},
260*00b67f09SDavid van Moolenbroek 		/* Test 4 */
261*00b67f09SDavid van Moolenbroek 		{
262*00b67f09SDavid van Moolenbroek 			TEST_INPUT("01234567012345670123456701234567"),
263*00b67f09SDavid van Moolenbroek 			"0x567F69F168CD7844E65259CE658FE7AADFA25216E68ECA"
264*00b67f09SDavid van Moolenbroek 				"0EB7AB8262",
265*00b67f09SDavid van Moolenbroek 			20
266*00b67f09SDavid van Moolenbroek 		},
267*00b67f09SDavid van Moolenbroek #if 0
268*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
269*00b67f09SDavid van Moolenbroek 		{
270*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
271*00b67f09SDavid van Moolenbroek 			"0xXXX",
272*00b67f09SDavid van Moolenbroek 			1
273*00b67f09SDavid van Moolenbroek 		},
274*00b67f09SDavid van Moolenbroek #endif
275*00b67f09SDavid van Moolenbroek 		/* Test 6 */
276*00b67f09SDavid van Moolenbroek 		{
277*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x07"),
278*00b67f09SDavid van Moolenbroek 			"0x00ECD5F138422B8AD74C9799FD826C531BAD2FCABC7450"
279*00b67f09SDavid van Moolenbroek 				"BEE2AA8C2A",
280*00b67f09SDavid van Moolenbroek 			1
281*00b67f09SDavid van Moolenbroek 		},
282*00b67f09SDavid van Moolenbroek #if 0
283*00b67f09SDavid van Moolenbroek 		/* Test 7 -- unimplemented optional functionality */
284*00b67f09SDavid van Moolenbroek 		{
285*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
286*00b67f09SDavid van Moolenbroek 			"0xXXX",
287*00b67f09SDavid van Moolenbroek 			1
288*00b67f09SDavid van Moolenbroek 		},
289*00b67f09SDavid van Moolenbroek #endif
290*00b67f09SDavid van Moolenbroek 		/* Test 8 */
291*00b67f09SDavid van Moolenbroek 		{
292*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x18\x80\x40\x05\xdd\x4f\xbd\x15\x56\x29"
293*00b67f09SDavid van Moolenbroek 				   "\x9d\x6f\x9d\x93\xdf\x62"),
294*00b67f09SDavid van Moolenbroek 			"0xDF90D78AA78821C99B40BA4C966921ACCD8FFB1E98AC38"
295*00b67f09SDavid van Moolenbroek 				"8E56191DB1",
296*00b67f09SDavid van Moolenbroek 			1
297*00b67f09SDavid van Moolenbroek 		},
298*00b67f09SDavid van Moolenbroek #if 0
299*00b67f09SDavid van Moolenbroek 		/* Test 9 */
300*00b67f09SDavid van Moolenbroek 		{
301*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
302*00b67f09SDavid van Moolenbroek 			"0xXXX",
303*00b67f09SDavid van Moolenbroek 			1
304*00b67f09SDavid van Moolenbroek 		},
305*00b67f09SDavid van Moolenbroek #endif
306*00b67f09SDavid van Moolenbroek 		/* Test 10 */
307*00b67f09SDavid van Moolenbroek 		{
308*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x55\xb2\x10\x07\x9c\x61\xb5\x3a\xdd\x52"
309*00b67f09SDavid van Moolenbroek 				   "\x06\x22\xd1\xac\x97\xd5\xcd\xbe\x8c\xb3"
310*00b67f09SDavid van Moolenbroek 				   "\x3a\xa0\xae\x34\x45\x17\xbe\xe4\xd7\xba"
311*00b67f09SDavid van Moolenbroek 				   "\x09\xab\xc8\x53\x3c\x52\x50\x88\x7a\x43"
312*00b67f09SDavid van Moolenbroek 				   "\xbe\xbb\xac\x90\x6c\x2e\x18\x37\xf2\x6b"
313*00b67f09SDavid van Moolenbroek 				   "\x36\xa5\x9a\xe3\xbe\x78\x14\xd5\x06\x89"
314*00b67f09SDavid van Moolenbroek 				   "\x6b\x71\x8b\x2a\x38\x3e\xcd\xac\x16\xb9"
315*00b67f09SDavid van Moolenbroek 				   "\x61\x25\x55\x3f\x41\x6f\xf3\x2c\x66\x74"
316*00b67f09SDavid van Moolenbroek 				   "\xc7\x45\x99\xa9\x00\x53\x86\xd9\xce\x11"
317*00b67f09SDavid van Moolenbroek 				   "\x12\x24\x5f\x48\xee\x47\x0d\x39\x6c\x1e"
318*00b67f09SDavid van Moolenbroek 				   "\xd6\x3b\x92\x67\x0c\xa5\x6e\xc8\x4d\xee"
319*00b67f09SDavid van Moolenbroek 				   "\xa8\x14\xb6\x13\x5e\xca\x54\x39\x2b\xde"
320*00b67f09SDavid van Moolenbroek 				   "\xdb\x94\x89\xbc\x9b\x87\x5a\x8b\xaf\x0d"
321*00b67f09SDavid van Moolenbroek 				   "\xc1\xae\x78\x57\x36\x91\x4a\xb7\xda\xa2"
322*00b67f09SDavid van Moolenbroek 				   "\x64\xbc\x07\x9d\x26\x9f\x2c\x0d\x7e\xdd"
323*00b67f09SDavid van Moolenbroek 				   "\xd8\x10\xa4\x26\x14\x5a\x07\x76\xf6\x7c"
324*00b67f09SDavid van Moolenbroek 				   "\x87\x82\x73"),
325*00b67f09SDavid van Moolenbroek 			"0x0B31894EC8937AD9B91BDFBCBA294D9ADEFAA18E09305E"
326*00b67f09SDavid van Moolenbroek 				"9F20D5C3A4",
327*00b67f09SDavid van Moolenbroek 			1
328*00b67f09SDavid van Moolenbroek 		},
329*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
330*00b67f09SDavid van Moolenbroek 	};
331*00b67f09SDavid van Moolenbroek 
332*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
333*00b67f09SDavid van Moolenbroek 
334*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
335*00b67f09SDavid van Moolenbroek 		isc_sha224_init(&sha224);
336*00b67f09SDavid van Moolenbroek 		for(i = 0; i < testcase->repeats; i++) {
337*00b67f09SDavid van Moolenbroek 			isc_sha224_update(&sha224,
338*00b67f09SDavid van Moolenbroek 					  (const isc_uint8_t *) testcase->input,
339*00b67f09SDavid van Moolenbroek 					  testcase->input_len);
340*00b67f09SDavid van Moolenbroek 		}
341*00b67f09SDavid van Moolenbroek 		isc_sha224_final(digest, &sha224);
342*00b67f09SDavid van Moolenbroek 		/*
343*00b67f09SDavid van Moolenbroek 		*API inconsistency BUG HERE
344*00b67f09SDavid van Moolenbroek 		* in order to be consistant with the other isc_hash_final
345*00b67f09SDavid van Moolenbroek 		* functions the call should be
346*00b67f09SDavid van Moolenbroek 		* isc_sha224_final(&sha224, digest);
347*00b67f09SDavid van Moolenbroek 		 */
348*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA224_DIGESTLENGTH, str);
349*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
350*00b67f09SDavid van Moolenbroek 
351*00b67f09SDavid van Moolenbroek 		testcase++;
352*00b67f09SDavid van Moolenbroek 	}
353*00b67f09SDavid van Moolenbroek }
354*00b67f09SDavid van Moolenbroek 
355*00b67f09SDavid van Moolenbroek ATF_TC(isc_sha256);
ATF_TC_HEAD(isc_sha256,tc)356*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_sha256, tc) {
357*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634");
358*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_sha256,tc)359*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_sha256, tc) {
360*00b67f09SDavid van Moolenbroek 	isc_sha256_t sha256;
361*00b67f09SDavid van Moolenbroek 	int i;
362*00b67f09SDavid van Moolenbroek 
363*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
364*00b67f09SDavid van Moolenbroek 
365*00b67f09SDavid van Moolenbroek 	/*
366*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
367*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
368*00b67f09SDavid van Moolenbroek 	 * result specified here.
369*00b67f09SDavid van Moolenbroek 	 */
370*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
371*00b67f09SDavid van Moolenbroek 		/* Test 1 */
372*00b67f09SDavid van Moolenbroek 		{
373*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abc"),
374*00b67f09SDavid van Moolenbroek 			"0xBA7816BF8F01CFEA414140DE5DAE2223B00361A396177A"
375*00b67f09SDavid van Moolenbroek 				"9CB410FF61F20015AD",
376*00b67f09SDavid van Moolenbroek 			1
377*00b67f09SDavid van Moolenbroek 		},
378*00b67f09SDavid van Moolenbroek 		/* Test 2 */
379*00b67f09SDavid van Moolenbroek 		{
380*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijkljk"
381*00b67f09SDavid van Moolenbroek 				   "lmklmnlmnomnopnopq"),
382*00b67f09SDavid van Moolenbroek 			"0x248D6A61D20638B8E5C026930C3E6039A33CE45964FF21"
383*00b67f09SDavid van Moolenbroek 				"67F6ECEDD419DB06C1",
384*00b67f09SDavid van Moolenbroek 			1
385*00b67f09SDavid van Moolenbroek 		},
386*00b67f09SDavid van Moolenbroek 		/* Test 3 */
387*00b67f09SDavid van Moolenbroek 		{
388*00b67f09SDavid van Moolenbroek 			TEST_INPUT("a"),
389*00b67f09SDavid van Moolenbroek 			"0xCDC76E5C9914FB9281A1C7E284D73E67F1809A48A49720"
390*00b67f09SDavid van Moolenbroek 				"0E046D39CCC7112CD0",
391*00b67f09SDavid van Moolenbroek 			1000000 },
392*00b67f09SDavid van Moolenbroek 		/* Test 4 */
393*00b67f09SDavid van Moolenbroek 		{
394*00b67f09SDavid van Moolenbroek 			TEST_INPUT("01234567012345670123456701234567"),
395*00b67f09SDavid van Moolenbroek 			"0x594847328451BDFA85056225462CC1D867D877FB388DF0"
396*00b67f09SDavid van Moolenbroek 				"CE35F25AB5562BFBB5",
397*00b67f09SDavid van Moolenbroek 			20
398*00b67f09SDavid van Moolenbroek 		},
399*00b67f09SDavid van Moolenbroek #if 0
400*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
401*00b67f09SDavid van Moolenbroek 		{
402*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
403*00b67f09SDavid van Moolenbroek 			"0xXXX",
404*00b67f09SDavid van Moolenbroek 			1
405*00b67f09SDavid van Moolenbroek 		},
406*00b67f09SDavid van Moolenbroek #endif
407*00b67f09SDavid van Moolenbroek 		/* Test 6 */
408*00b67f09SDavid van Moolenbroek 		{
409*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x19"),
410*00b67f09SDavid van Moolenbroek 			"0x68AA2E2EE5DFF96E3355E6C7EE373E3D6A4E17F75F9518"
411*00b67f09SDavid van Moolenbroek 				"D843709C0C9BC3E3D4",
412*00b67f09SDavid van Moolenbroek 			1
413*00b67f09SDavid van Moolenbroek 		},
414*00b67f09SDavid van Moolenbroek #if 0
415*00b67f09SDavid van Moolenbroek 		/* Test 7 -- unimplemented optional functionality */
416*00b67f09SDavid van Moolenbroek 		{
417*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
418*00b67f09SDavid van Moolenbroek 			"0xXXX",
419*00b67f09SDavid van Moolenbroek 			1
420*00b67f09SDavid van Moolenbroek 		},
421*00b67f09SDavid van Moolenbroek #endif
422*00b67f09SDavid van Moolenbroek 		/* Test 8 */
423*00b67f09SDavid van Moolenbroek 		{
424*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xe3\xd7\x25\x70\xdc\xdd\x78\x7c\xe3"
425*00b67f09SDavid van Moolenbroek 				   "\x88\x7a\xb2\xcd\x68\x46\x52"),
426*00b67f09SDavid van Moolenbroek 			"0x175EE69B02BA9B58E2B0A5FD13819CEA573F3940A94F82"
427*00b67f09SDavid van Moolenbroek 				"5128CF4209BEABB4E8",
428*00b67f09SDavid van Moolenbroek 			1
429*00b67f09SDavid van Moolenbroek 		},
430*00b67f09SDavid van Moolenbroek #if 0
431*00b67f09SDavid van Moolenbroek 		/* Test 9 -- unimplemented optional functionality */
432*00b67f09SDavid van Moolenbroek 		{
433*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
434*00b67f09SDavid van Moolenbroek 			"0xXXX",
435*00b67f09SDavid van Moolenbroek 			1
436*00b67f09SDavid van Moolenbroek 		},
437*00b67f09SDavid van Moolenbroek #endif
438*00b67f09SDavid van Moolenbroek 		/* Test 10 */
439*00b67f09SDavid van Moolenbroek 		{
440*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x83\x26\x75\x4e\x22\x77\x37\x2f\x4f\xc1"
441*00b67f09SDavid van Moolenbroek 				   "\x2b\x20\x52\x7a\xfe\xf0\x4d\x8a\x05\x69"
442*00b67f09SDavid van Moolenbroek 				   "\x71\xb1\x1a\xd5\x71\x23\xa7\xc1\x37\x76"
443*00b67f09SDavid van Moolenbroek 				   "\x00\x00\xd7\xbe\xf6\xf3\xc1\xf7\xa9\x08"
444*00b67f09SDavid van Moolenbroek 				   "\x3a\xa3\x9d\x81\x0d\xb3\x10\x77\x7d\xab"
445*00b67f09SDavid van Moolenbroek 				   "\x8b\x1e\x7f\x02\xb8\x4a\x26\xc7\x73\x32"
446*00b67f09SDavid van Moolenbroek 				   "\x5f\x8b\x23\x74\xde\x7a\x4b\x5a\x58\xcb"
447*00b67f09SDavid van Moolenbroek 				   "\x5c\x5c\xf3\x5b\xce\xe6\xfb\x94\x6e\x5b"
448*00b67f09SDavid van Moolenbroek 				   "\xd6\x94\xfa\x59\x3a\x8b\xeb\x3f\x9d\x65"
449*00b67f09SDavid van Moolenbroek 				   "\x92\xec\xed\xaa\x66\xca\x82\xa2\x9d\x0c"
450*00b67f09SDavid van Moolenbroek 				   "\x51\xbc\xf9\x33\x62\x30\xe5\xd7\x84\xe4"
451*00b67f09SDavid van Moolenbroek 				   "\xc0\xa4\x3f\x8d\x79\xa3\x0a\x16\x5c\xba"
452*00b67f09SDavid van Moolenbroek 				   "\xbe\x45\x2b\x77\x4b\x9c\x71\x09\xa9\x7d"
453*00b67f09SDavid van Moolenbroek 				   "\x13\x8f\x12\x92\x28\x96\x6f\x6c\x0a\xdc"
454*00b67f09SDavid van Moolenbroek 				   "\x10\x6a\xad\x5a\x9f\xdd\x30\x82\x57\x69"
455*00b67f09SDavid van Moolenbroek 				   "\xb2\xc6\x71\xaf\x67\x59\xdf\x28\xeb\x39"
456*00b67f09SDavid van Moolenbroek 				   "\x3d\x54\xd6"),
457*00b67f09SDavid van Moolenbroek 			"0x97DBCA7DF46D62C8A422C941DD7E835B8AD3361763F7E9"
458*00b67f09SDavid van Moolenbroek 				"B2D95F4F0DA6E1CCBC",
459*00b67f09SDavid van Moolenbroek 			1
460*00b67f09SDavid van Moolenbroek 		},
461*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
462*00b67f09SDavid van Moolenbroek 	};
463*00b67f09SDavid van Moolenbroek 
464*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
465*00b67f09SDavid van Moolenbroek 
466*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
467*00b67f09SDavid van Moolenbroek 		isc_sha256_init(&sha256);
468*00b67f09SDavid van Moolenbroek 		for(i = 0; i < testcase->repeats; i++) {
469*00b67f09SDavid van Moolenbroek 			isc_sha256_update(&sha256,
470*00b67f09SDavid van Moolenbroek 					  (const isc_uint8_t *) testcase->input,
471*00b67f09SDavid van Moolenbroek 					  testcase->input_len);
472*00b67f09SDavid van Moolenbroek 		}
473*00b67f09SDavid van Moolenbroek 		isc_sha256_final(digest, &sha256);
474*00b67f09SDavid van Moolenbroek 		/*
475*00b67f09SDavid van Moolenbroek 		*API inconsistency BUG HERE
476*00b67f09SDavid van Moolenbroek 		* in order to be consistant with the other isc_hash_final
477*00b67f09SDavid van Moolenbroek 		* functions the call should be
478*00b67f09SDavid van Moolenbroek 		* isc_sha224_final(&sha224, digest);
479*00b67f09SDavid van Moolenbroek 		 */
480*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA256_DIGESTLENGTH, str);
481*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
482*00b67f09SDavid van Moolenbroek 
483*00b67f09SDavid van Moolenbroek 		testcase++;
484*00b67f09SDavid van Moolenbroek 	}
485*00b67f09SDavid van Moolenbroek }
486*00b67f09SDavid van Moolenbroek 
487*00b67f09SDavid van Moolenbroek ATF_TC(isc_sha384);
ATF_TC_HEAD(isc_sha384,tc)488*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_sha384, tc) {
489*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634");
490*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_sha384,tc)491*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_sha384, tc) {
492*00b67f09SDavid van Moolenbroek 	isc_sha384_t sha384;
493*00b67f09SDavid van Moolenbroek 	int i;
494*00b67f09SDavid van Moolenbroek 
495*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
496*00b67f09SDavid van Moolenbroek 
497*00b67f09SDavid van Moolenbroek 	/*
498*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
499*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
500*00b67f09SDavid van Moolenbroek 	 * result specified here.
501*00b67f09SDavid van Moolenbroek 	 */
502*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
503*00b67f09SDavid van Moolenbroek 		/* Test 1 */
504*00b67f09SDavid van Moolenbroek 		{
505*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abc"),
506*00b67f09SDavid van Moolenbroek 			"0xCB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1"
507*00b67f09SDavid van Moolenbroek 				"631A8B605A43FF5BED8086072BA1E7CC2358BAEC"
508*00b67f09SDavid van Moolenbroek 				"A134C825A7",
509*00b67f09SDavid van Moolenbroek 			1
510*00b67f09SDavid van Moolenbroek 		},
511*00b67f09SDavid van Moolenbroek 		/* Test 2 */
512*00b67f09SDavid van Moolenbroek 		{
513*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abcdefghbcdefghicdefghijdefghijkefghijkl"
514*00b67f09SDavid van Moolenbroek 				   "fghijklmghijklmnhijklmnoijklmnopjklmnopq"
515*00b67f09SDavid van Moolenbroek 				   "klmnopqrlmnopqrsmnopqrstnopqrstu"),
516*00b67f09SDavid van Moolenbroek 			"0x09330C33F71147E83D192FC782CD1B4753111B173B3B05"
517*00b67f09SDavid van Moolenbroek 				"D22FA08086E3B0F712FCC7C71A557E2DB966C3E9"
518*00b67f09SDavid van Moolenbroek 				"FA91746039",
519*00b67f09SDavid van Moolenbroek 			1
520*00b67f09SDavid van Moolenbroek 		},
521*00b67f09SDavid van Moolenbroek 		/* Test 3 */
522*00b67f09SDavid van Moolenbroek 		{
523*00b67f09SDavid van Moolenbroek 			TEST_INPUT("a"),
524*00b67f09SDavid van Moolenbroek 			"0x9D0E1809716474CB086E834E310A4A1CED149E9C00F248"
525*00b67f09SDavid van Moolenbroek 				"527972CEC5704C2A5B07B8B3DC38ECC4EBAE97DD"
526*00b67f09SDavid van Moolenbroek 				"D87F3D8985",
527*00b67f09SDavid van Moolenbroek 			1000000
528*00b67f09SDavid van Moolenbroek 		},
529*00b67f09SDavid van Moolenbroek 		/* Test 4 */
530*00b67f09SDavid van Moolenbroek 		{
531*00b67f09SDavid van Moolenbroek 			TEST_INPUT("01234567012345670123456701234567"),
532*00b67f09SDavid van Moolenbroek 			"0x2FC64A4F500DDB6828F6A3430B8DD72A368EB7F3A8322A"
533*00b67f09SDavid van Moolenbroek 				"70BC84275B9C0B3AB00D27A5CC3C2D224AA6B61A"
534*00b67f09SDavid van Moolenbroek 				"0D79FB4596",
535*00b67f09SDavid van Moolenbroek 			20
536*00b67f09SDavid van Moolenbroek 		},
537*00b67f09SDavid van Moolenbroek #if 0
538*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
539*00b67f09SDavid van Moolenbroek 		{
540*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
541*00b67f09SDavid van Moolenbroek 			"0xXXX",
542*00b67f09SDavid van Moolenbroek 			1
543*00b67f09SDavid van Moolenbroek 		},
544*00b67f09SDavid van Moolenbroek #endif
545*00b67f09SDavid van Moolenbroek 		/* Test 6 */
546*00b67f09SDavid van Moolenbroek 		{ TEST_INPUT("\xb9"),
547*00b67f09SDavid van Moolenbroek 			"0xBC8089A19007C0B14195F4ECC74094FEC64F01F9092928"
548*00b67f09SDavid van Moolenbroek 				"2C2FB392881578208AD466828B1C6C283D2722CF"
549*00b67f09SDavid van Moolenbroek 				"0AD1AB6938",
550*00b67f09SDavid van Moolenbroek 			1
551*00b67f09SDavid van Moolenbroek 		},
552*00b67f09SDavid van Moolenbroek #if 0
553*00b67f09SDavid van Moolenbroek 		/* Test 7 -- unimplemented optional functionality */
554*00b67f09SDavid van Moolenbroek 		{
555*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
556*00b67f09SDavid van Moolenbroek 			"0xXXX",
557*00b67f09SDavid van Moolenbroek 			1
558*00b67f09SDavid van Moolenbroek 		},
559*00b67f09SDavid van Moolenbroek #endif
560*00b67f09SDavid van Moolenbroek 		/* Test 8 */
561*00b67f09SDavid van Moolenbroek 		{
562*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xa4\x1c\x49\x77\x79\xc0\x37\x5f\xf1"
563*00b67f09SDavid van Moolenbroek 				   "\x0a\x7f\x4e\x08\x59\x17\x39"),
564*00b67f09SDavid van Moolenbroek 			"0xC9A68443A005812256B8EC76B00516F0DBB74FAB26D665"
565*00b67f09SDavid van Moolenbroek 				"913F194B6FFB0E91EA9967566B58109CBC675CC2"
566*00b67f09SDavid van Moolenbroek 				"08E4C823F7",
567*00b67f09SDavid van Moolenbroek 			1
568*00b67f09SDavid van Moolenbroek 		},
569*00b67f09SDavid van Moolenbroek #if 0
570*00b67f09SDavid van Moolenbroek 		/* Test 9 -- unimplemented optional functionality */
571*00b67f09SDavid van Moolenbroek 		{
572*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
573*00b67f09SDavid van Moolenbroek 			"0xXXX",
574*00b67f09SDavid van Moolenbroek 			1
575*00b67f09SDavid van Moolenbroek 		},
576*00b67f09SDavid van Moolenbroek #endif
577*00b67f09SDavid van Moolenbroek 		/* Test 10 */
578*00b67f09SDavid van Moolenbroek 		{
579*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x39\x96\x69\xe2\x8f\x6b\x9c\x6d\xbc\xbb"
580*00b67f09SDavid van Moolenbroek 				   "\x69\x12\xec\x10\xff\xcf\x74\x79\x03\x49"
581*00b67f09SDavid van Moolenbroek 				   "\xb7\xdc\x8f\xbe\x4a\x8e\x7b\x3b\x56\x21"
582*00b67f09SDavid van Moolenbroek 				   "\xdb\x0f\x3e\x7d\xc8\x7f\x82\x32\x64\xbb"
583*00b67f09SDavid van Moolenbroek 				   "\xe4\x0d\x18\x11\xc9\xea\x20\x61\xe1\xc8"
584*00b67f09SDavid van Moolenbroek 				   "\x4a\xd1\x0a\x23\xfa\xc1\x72\x7e\x72\x02"
585*00b67f09SDavid van Moolenbroek 				   "\xfc\x3f\x50\x42\xe6\xbf\x58\xcb\xa8\xa2"
586*00b67f09SDavid van Moolenbroek 				   "\x74\x6e\x1f\x64\xf9\xb9\xea\x35\x2c\x71"
587*00b67f09SDavid van Moolenbroek 				   "\x15\x07\x05\x3c\xf4\xe5\x33\x9d\x52\x86"
588*00b67f09SDavid van Moolenbroek 				   "\x5f\x25\xcc\x22\xb5\xe8\x77\x84\xa1\x2f"
589*00b67f09SDavid van Moolenbroek 				   "\xc9\x61\xd6\x6c\xb6\xe8\x95\x73\x19\x9a"
590*00b67f09SDavid van Moolenbroek 				   "\x2c\xe6\x56\x5c\xbd\xf1\x3d\xca\x40\x38"
591*00b67f09SDavid van Moolenbroek 				   "\x32\xcf\xcb\x0e\x8b\x72\x11\xe8\x3a\xf3"
592*00b67f09SDavid van Moolenbroek 				   "\x2a\x11\xac\x17\x92\x9f\xf1\xc0\x73\xa5"
593*00b67f09SDavid van Moolenbroek 				   "\x1c\xc0\x27\xaa\xed\xef\xf8\x5a\xad\x7c"
594*00b67f09SDavid van Moolenbroek 				   "\x2b\x7c\x5a\x80\x3e\x24\x04\xd9\x6d\x2a"
595*00b67f09SDavid van Moolenbroek 				   "\x77\x35\x7b\xda\x1a\x6d\xae\xed\x17\x15"
596*00b67f09SDavid van Moolenbroek 				   "\x1c\xb9\xbc\x51\x25\xa4\x22\xe9\x41\xde"
597*00b67f09SDavid van Moolenbroek 				   "\x0c\xa0\xfc\x50\x11\xc2\x3e\xcf\xfe\xfd"
598*00b67f09SDavid van Moolenbroek 				   "\xd0\x96\x76\x71\x1c\xf3\xdb\x0a\x34\x40"
599*00b67f09SDavid van Moolenbroek 				   "\x72\x0e\x16\x15\xc1\xf2\x2f\xbc\x3c\x72"
600*00b67f09SDavid van Moolenbroek 				   "\x1d\xe5\x21\xe1\xb9\x9b\xa1\xbd\x55\x77"
601*00b67f09SDavid van Moolenbroek 				   "\x40\x86\x42\x14\x7e\xd0\x96"),
602*00b67f09SDavid van Moolenbroek 			"0x4F440DB1E6EDD2899FA335F09515AA025EE177A79F4B4A"
603*00b67f09SDavid van Moolenbroek 				"AF38E42B5C4DE660F5DE8FB2A5B2FBD2A3CBFFD2"
604*00b67f09SDavid van Moolenbroek 				"0CFF1288C0",
605*00b67f09SDavid van Moolenbroek 			1
606*00b67f09SDavid van Moolenbroek 		},
607*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
608*00b67f09SDavid van Moolenbroek 	};
609*00b67f09SDavid van Moolenbroek 
610*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
611*00b67f09SDavid van Moolenbroek 
612*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
613*00b67f09SDavid van Moolenbroek 		isc_sha384_init(&sha384);
614*00b67f09SDavid van Moolenbroek 		for(i = 0; i < testcase->repeats; i++) {
615*00b67f09SDavid van Moolenbroek 			isc_sha384_update(&sha384,
616*00b67f09SDavid van Moolenbroek 					  (const isc_uint8_t *) testcase->input,
617*00b67f09SDavid van Moolenbroek 					  testcase->input_len);
618*00b67f09SDavid van Moolenbroek 		}
619*00b67f09SDavid van Moolenbroek 		isc_sha384_final(digest, &sha384);
620*00b67f09SDavid van Moolenbroek 		/*
621*00b67f09SDavid van Moolenbroek 		*API inconsistency BUG HERE
622*00b67f09SDavid van Moolenbroek 		* in order to be consistant with the other isc_hash_final
623*00b67f09SDavid van Moolenbroek 		* functions the call should be
624*00b67f09SDavid van Moolenbroek 		* isc_sha224_final(&sha224, digest);
625*00b67f09SDavid van Moolenbroek 		 */
626*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA384_DIGESTLENGTH, str);
627*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
628*00b67f09SDavid van Moolenbroek 
629*00b67f09SDavid van Moolenbroek 		testcase++;
630*00b67f09SDavid van Moolenbroek 	}
631*00b67f09SDavid van Moolenbroek }
632*00b67f09SDavid van Moolenbroek 
633*00b67f09SDavid van Moolenbroek ATF_TC(isc_sha512);
ATF_TC_HEAD(isc_sha512,tc)634*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_sha512, tc) {
635*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634");
636*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_sha512,tc)637*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_sha512, tc) {
638*00b67f09SDavid van Moolenbroek 	isc_sha512_t sha512;
639*00b67f09SDavid van Moolenbroek 	int i;
640*00b67f09SDavid van Moolenbroek 
641*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
642*00b67f09SDavid van Moolenbroek 
643*00b67f09SDavid van Moolenbroek 	/*
644*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
645*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
646*00b67f09SDavid van Moolenbroek 	 * result specified here.
647*00b67f09SDavid van Moolenbroek 	 */
648*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
649*00b67f09SDavid van Moolenbroek 		/* Test 1 */
650*00b67f09SDavid van Moolenbroek 		{
651*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abc"),
652*00b67f09SDavid van Moolenbroek 			"0xDDAF35A193617ABACC417349AE20413112E6FA4E89A97E"
653*00b67f09SDavid van Moolenbroek 				"A20A9EEEE64B55D39A2192992A274FC1A836BA3C"
654*00b67f09SDavid van Moolenbroek 				"23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F",
655*00b67f09SDavid van Moolenbroek 			1
656*00b67f09SDavid van Moolenbroek 		},
657*00b67f09SDavid van Moolenbroek 		/* Test 2 */
658*00b67f09SDavid van Moolenbroek 		{
659*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abcdefghbcdefghicdefghijdefghijkefghijkl"
660*00b67f09SDavid van Moolenbroek 				   "fghijklmghijklmnhijklmnoijklmnopjklmnopq"
661*00b67f09SDavid van Moolenbroek 				   "klmnopqrlmnopqrsmnopqrstnopqrstu"),
662*00b67f09SDavid van Moolenbroek 			"0x8E959B75DAE313DA8CF4F72814FC143F8F7779C6EB9F7F"
663*00b67f09SDavid van Moolenbroek 				"A17299AEADB6889018501D289E4900F7E4331B99"
664*00b67f09SDavid van Moolenbroek 				"DEC4B5433AC7D329EEB6DD26545E96E55B874BE909",
665*00b67f09SDavid van Moolenbroek 			1
666*00b67f09SDavid van Moolenbroek 		},
667*00b67f09SDavid van Moolenbroek 		/* Test 3 */
668*00b67f09SDavid van Moolenbroek 		{
669*00b67f09SDavid van Moolenbroek 			TEST_INPUT("a"),
670*00b67f09SDavid van Moolenbroek 			"0xE718483D0CE769644E2E42C7BC15B4638E1F98B13B2044"
671*00b67f09SDavid van Moolenbroek 				"285632A803AFA973EBDE0FF244877EA60A4CB043"
672*00b67f09SDavid van Moolenbroek 				"2CE577C31BEB009C5C2C49AA2E4EADB217AD8CC09B",
673*00b67f09SDavid van Moolenbroek 			1000000
674*00b67f09SDavid van Moolenbroek 		},
675*00b67f09SDavid van Moolenbroek 		/* Test 4 */
676*00b67f09SDavid van Moolenbroek 		{
677*00b67f09SDavid van Moolenbroek 			TEST_INPUT("01234567012345670123456701234567"),
678*00b67f09SDavid van Moolenbroek 			"0x89D05BA632C699C31231DED4FFC127D5A894DAD412C0E0"
679*00b67f09SDavid van Moolenbroek 				"24DB872D1ABD2BA8141A0F85072A9BE1E2AA04CF"
680*00b67f09SDavid van Moolenbroek 				"33C765CB510813A39CD5A84C4ACAA64D3F3FB7BAE9",
681*00b67f09SDavid van Moolenbroek 			20
682*00b67f09SDavid van Moolenbroek 		},
683*00b67f09SDavid van Moolenbroek #if 0
684*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
685*00b67f09SDavid van Moolenbroek 		{
686*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
687*00b67f09SDavid van Moolenbroek 			"0xXXX",
688*00b67f09SDavid van Moolenbroek 			1
689*00b67f09SDavid van Moolenbroek 		},
690*00b67f09SDavid van Moolenbroek #endif
691*00b67f09SDavid van Moolenbroek 		/* Test 6 */
692*00b67f09SDavid van Moolenbroek 		{
693*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xD0"),
694*00b67f09SDavid van Moolenbroek 			"0x9992202938E882E73E20F6B69E68A0A7149090423D93C8"
695*00b67f09SDavid van Moolenbroek 				"1BAB3F21678D4ACEEEE50E4E8CAFADA4C85A54EA"
696*00b67f09SDavid van Moolenbroek 				"8306826C4AD6E74CECE9631BFA8A549B4AB3FBBA15",
697*00b67f09SDavid van Moolenbroek 			1
698*00b67f09SDavid van Moolenbroek 		},
699*00b67f09SDavid van Moolenbroek #if 0
700*00b67f09SDavid van Moolenbroek 		/* Test 7 -- unimplemented optional functionality */
701*00b67f09SDavid van Moolenbroek 		{
702*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
703*00b67f09SDavid van Moolenbroek 			"0xXXX",
704*00b67f09SDavid van Moolenbroek 			1
705*00b67f09SDavid van Moolenbroek 		},
706*00b67f09SDavid van Moolenbroek #endif
707*00b67f09SDavid van Moolenbroek 		/* Test 8 */
708*00b67f09SDavid van Moolenbroek 		{
709*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x8d\x4e\x3c\x0e\x38\x89\x19\x14\x91\x81"
710*00b67f09SDavid van Moolenbroek 				   "\x6e\x9d\x98\xbf\xf0\xa0"),
711*00b67f09SDavid van Moolenbroek 			"0xCB0B67A4B8712CD73C9AABC0B199E9269B20844AFB75AC"
712*00b67f09SDavid van Moolenbroek 				"BDD1C153C9828924C3DDEDAAFE669C5FDD0BC66F"
713*00b67f09SDavid van Moolenbroek 				"630F6773988213EB1B16F517AD0DE4B2F0C95C90F8",
714*00b67f09SDavid van Moolenbroek 			1
715*00b67f09SDavid van Moolenbroek 		},
716*00b67f09SDavid van Moolenbroek #if 0
717*00b67f09SDavid van Moolenbroek 		/* Test 9 -- unimplemented optional functionality */
718*00b67f09SDavid van Moolenbroek 		{
719*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
720*00b67f09SDavid van Moolenbroek 			"0xXXX",
721*00b67f09SDavid van Moolenbroek 			1
722*00b67f09SDavid van Moolenbroek 		},
723*00b67f09SDavid van Moolenbroek #endif
724*00b67f09SDavid van Moolenbroek 		/* Test 10 */
725*00b67f09SDavid van Moolenbroek 		{
726*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xa5\x5f\x20\xc4\x11\xaa\xd1\x32\x80\x7a"
727*00b67f09SDavid van Moolenbroek 				   "\x50\x2d\x65\x82\x4e\x31\xa2\x30\x54\x32"
728*00b67f09SDavid van Moolenbroek 				   "\xaa\x3d\x06\xd3\xe2\x82\xa8\xd8\x4e\x0d"
729*00b67f09SDavid van Moolenbroek 				   "\xe1\xde\x69\x74\xbf\x49\x54\x69\xfc\x7f"
730*00b67f09SDavid van Moolenbroek 				   "\x33\x8f\x80\x54\xd5\x8c\x26\xc4\x93\x60"
731*00b67f09SDavid van Moolenbroek 				   "\xc3\xe8\x7a\xf5\x65\x23\xac\xf6\xd8\x9d"
732*00b67f09SDavid van Moolenbroek 				   "\x03\xe5\x6f\xf2\xf8\x68\x00\x2b\xc3\xe4"
733*00b67f09SDavid van Moolenbroek 				   "\x31\xed\xc4\x4d\xf2\xf0\x22\x3d\x4b\xb3"
734*00b67f09SDavid van Moolenbroek 				   "\xb2\x43\x58\x6e\x1a\x7d\x92\x49\x36\x69"
735*00b67f09SDavid van Moolenbroek 				   "\x4f\xcb\xba\xf8\x8d\x95\x19\xe4\xeb\x50"
736*00b67f09SDavid van Moolenbroek 				   "\xa6\x44\xf8\xe4\xf9\x5e\xb0\xea\x95\xbc"
737*00b67f09SDavid van Moolenbroek 				   "\x44\x65\xc8\x82\x1a\xac\xd2\xfe\x15\xab"
738*00b67f09SDavid van Moolenbroek 				   "\x49\x81\x16\x4b\xbb\x6d\xc3\x2f\x96\x90"
739*00b67f09SDavid van Moolenbroek 				   "\x87\xa1\x45\xb0\xd9\xcc\x9c\x67\xc2\x2b"
740*00b67f09SDavid van Moolenbroek 				   "\x76\x32\x99\x41\x9c\xc4\x12\x8b\xe9\xa0"
741*00b67f09SDavid van Moolenbroek 				   "\x77\xb3\xac\xe6\x34\x06\x4e\x6d\x99\x28"
742*00b67f09SDavid van Moolenbroek 				   "\x35\x13\xdc\x06\xe7\x51\x5d\x0d\x73\x13"
743*00b67f09SDavid van Moolenbroek 				   "\x2e\x9a\x0d\xc6\xd3\xb1\xf8\xb2\x46\xf1"
744*00b67f09SDavid van Moolenbroek 				   "\xa9\x8a\x3f\xc7\x29\x41\xb1\xe3\xbb\x20"
745*00b67f09SDavid van Moolenbroek 				   "\x98\xe8\xbf\x16\xf2\x68\xd6\x4f\x0b\x0f"
746*00b67f09SDavid van Moolenbroek 				   "\x47\x07\xfe\x1e\xa1\xa1\x79\x1b\xa2\xf3"
747*00b67f09SDavid van Moolenbroek 				   "\xc0\xc7\x58\xe5\xf5\x51\x86\x3a\x96\xc9"
748*00b67f09SDavid van Moolenbroek 				   "\x49\xad\x47\xd7\xfb\x40\xd2"),
749*00b67f09SDavid van Moolenbroek 		  "0xC665BEFB36DA189D78822D10528CBF3B12B3EEF7260399"
750*00b67f09SDavid van Moolenbroek 			  "09C1A16A270D48719377966B957A878E72058477"
751*00b67f09SDavid van Moolenbroek 			  "9A62825C18DA26415E49A7176A894E7510FD1451F5",
752*00b67f09SDavid van Moolenbroek 		  1
753*00b67f09SDavid van Moolenbroek 		},
754*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
755*00b67f09SDavid van Moolenbroek 	};
756*00b67f09SDavid van Moolenbroek 
757*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
758*00b67f09SDavid van Moolenbroek 
759*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
760*00b67f09SDavid van Moolenbroek 		isc_sha512_init(&sha512);
761*00b67f09SDavid van Moolenbroek 		for(i = 0; i < testcase->repeats; i++) {
762*00b67f09SDavid van Moolenbroek 			isc_sha512_update(&sha512,
763*00b67f09SDavid van Moolenbroek 					  (const isc_uint8_t *) testcase->input,
764*00b67f09SDavid van Moolenbroek 					  testcase->input_len);
765*00b67f09SDavid van Moolenbroek 		}
766*00b67f09SDavid van Moolenbroek 		isc_sha512_final(digest, &sha512);
767*00b67f09SDavid van Moolenbroek 		/*
768*00b67f09SDavid van Moolenbroek 		*API inconsistency BUG HERE
769*00b67f09SDavid van Moolenbroek 		* in order to be consistant with the other isc_hash_final
770*00b67f09SDavid van Moolenbroek 		* functions the call should be
771*00b67f09SDavid van Moolenbroek 		* isc_sha224_final(&sha224, digest);
772*00b67f09SDavid van Moolenbroek 		 */
773*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA512_DIGESTLENGTH, str);
774*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
775*00b67f09SDavid van Moolenbroek 
776*00b67f09SDavid van Moolenbroek 		testcase++;
777*00b67f09SDavid van Moolenbroek 	}
778*00b67f09SDavid van Moolenbroek }
779*00b67f09SDavid van Moolenbroek 
780*00b67f09SDavid van Moolenbroek ATF_TC(isc_md5);
ATF_TC_HEAD(isc_md5,tc)781*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_md5, tc) {
782*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "md5 example from RFC1321");
783*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_md5,tc)784*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_md5, tc) {
785*00b67f09SDavid van Moolenbroek 	isc_md5_t md5;
786*00b67f09SDavid van Moolenbroek 	int i;
787*00b67f09SDavid van Moolenbroek 
788*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
789*00b67f09SDavid van Moolenbroek 
790*00b67f09SDavid van Moolenbroek 	/*
791*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
792*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
793*00b67f09SDavid van Moolenbroek 	 * result specified here.
794*00b67f09SDavid van Moolenbroek 	 */
795*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
796*00b67f09SDavid van Moolenbroek 		{
797*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
798*00b67f09SDavid van Moolenbroek 			"0xD41D8CD98F00B204E9800998ECF8427E",
799*00b67f09SDavid van Moolenbroek 			1
800*00b67f09SDavid van Moolenbroek 		},
801*00b67f09SDavid van Moolenbroek 		{
802*00b67f09SDavid van Moolenbroek 			TEST_INPUT("a"),
803*00b67f09SDavid van Moolenbroek 			"0x0CC175B9C0F1B6A831C399E269772661",
804*00b67f09SDavid van Moolenbroek 			1
805*00b67f09SDavid van Moolenbroek 		},
806*00b67f09SDavid van Moolenbroek 		{
807*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abc"),
808*00b67f09SDavid van Moolenbroek 			"0x900150983CD24FB0D6963F7D28E17F72",
809*00b67f09SDavid van Moolenbroek 			1
810*00b67f09SDavid van Moolenbroek 		},
811*00b67f09SDavid van Moolenbroek 		{
812*00b67f09SDavid van Moolenbroek 			TEST_INPUT("message digest"),
813*00b67f09SDavid van Moolenbroek 			"0xF96B697D7CB7938D525A2F31AAF161D0",
814*00b67f09SDavid van Moolenbroek 			1
815*00b67f09SDavid van Moolenbroek 		},
816*00b67f09SDavid van Moolenbroek 		{
817*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abcdefghijklmnopqrstuvwxyz"),
818*00b67f09SDavid van Moolenbroek 			"0xC3FCD3D76192E4007DFB496CCA67E13B",
819*00b67f09SDavid van Moolenbroek 			1
820*00b67f09SDavid van Moolenbroek 		},
821*00b67f09SDavid van Moolenbroek 		{
822*00b67f09SDavid van Moolenbroek 			TEST_INPUT("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm"
823*00b67f09SDavid van Moolenbroek 				   "nopqrstuvwxyz0123456789"),
824*00b67f09SDavid van Moolenbroek 			"0xD174AB98D277D9F5A5611C2C9F419D9F",
825*00b67f09SDavid van Moolenbroek 			1
826*00b67f09SDavid van Moolenbroek 		},
827*00b67f09SDavid van Moolenbroek 		{
828*00b67f09SDavid van Moolenbroek 			TEST_INPUT("123456789012345678901234567890123456789"
829*00b67f09SDavid van Moolenbroek 				   "01234567890123456789012345678901234567890"),
830*00b67f09SDavid van Moolenbroek 			"0x57EDF4A22BE3C955AC49DA2E2107B67A",
831*00b67f09SDavid van Moolenbroek 			1
832*00b67f09SDavid van Moolenbroek 		},
833*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
834*00b67f09SDavid van Moolenbroek 	};
835*00b67f09SDavid van Moolenbroek 
836*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
837*00b67f09SDavid van Moolenbroek 
838*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
839*00b67f09SDavid van Moolenbroek 		isc_md5_init(&md5);
840*00b67f09SDavid van Moolenbroek 		for(i = 0; i < testcase->repeats; i++) {
841*00b67f09SDavid van Moolenbroek 			isc_md5_update(&md5,
842*00b67f09SDavid van Moolenbroek 				       (const isc_uint8_t *) testcase->input,
843*00b67f09SDavid van Moolenbroek 				       testcase->input_len);
844*00b67f09SDavid van Moolenbroek 		}
845*00b67f09SDavid van Moolenbroek 		isc_md5_final(&md5, digest);
846*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_MD5_DIGESTLENGTH, str);
847*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
848*00b67f09SDavid van Moolenbroek 
849*00b67f09SDavid van Moolenbroek 		testcase++;
850*00b67f09SDavid van Moolenbroek 	}
851*00b67f09SDavid van Moolenbroek }
852*00b67f09SDavid van Moolenbroek 
853*00b67f09SDavid van Moolenbroek /* HMAC-SHA1 test */
854*00b67f09SDavid van Moolenbroek ATF_TC(isc_hmacsha1);
ATF_TC_HEAD(isc_hmacsha1,tc)855*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_hmacsha1, tc) {
856*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "HMAC-SHA1 examples from RFC2104");
857*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_hmacsha1,tc)858*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_hmacsha1, tc) {
859*00b67f09SDavid van Moolenbroek 	isc_hmacsha1_t hmacsha1;
860*00b67f09SDavid van Moolenbroek 
861*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
862*00b67f09SDavid van Moolenbroek 	/*
863*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
864*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
865*00b67f09SDavid van Moolenbroek 	 * result specified here.
866*00b67f09SDavid van Moolenbroek 	 */
867*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
868*00b67f09SDavid van Moolenbroek 		/* Test 1 */
869*00b67f09SDavid van Moolenbroek 		{
870*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
871*00b67f09SDavid van Moolenbroek 			"0xB617318655057264E28BC0B6FB378C8EF146BE00",
872*00b67f09SDavid van Moolenbroek 			1
873*00b67f09SDavid van Moolenbroek 		},
874*00b67f09SDavid van Moolenbroek 		/* Test 2 */
875*00b67f09SDavid van Moolenbroek 		{
876*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
877*00b67f09SDavid van Moolenbroek 				   "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
878*00b67f09SDavid van Moolenbroek 				   "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
879*00b67f09SDavid van Moolenbroek 			"0xEFFCDF6AE5EB2FA2D27416D5F184DF9C259A7C79",
880*00b67f09SDavid van Moolenbroek 			1
881*00b67f09SDavid van Moolenbroek 		},
882*00b67f09SDavid van Moolenbroek 		/* Test 3 */
883*00b67f09SDavid van Moolenbroek 		{
884*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
885*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
886*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
887*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
888*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
889*00b67f09SDavid van Moolenbroek 			"0x125D7342B9AC11CD91A39AF48AA17B4F63F175D3",
890*00b67f09SDavid van Moolenbroek 			1
891*00b67f09SDavid van Moolenbroek 		},
892*00b67f09SDavid van Moolenbroek 		/* Test 4 */
893*00b67f09SDavid van Moolenbroek 		{
894*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
895*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
896*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
897*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
898*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
899*00b67f09SDavid van Moolenbroek 			"0x4C9007F4026250C6BC8414F9BF50C86C2D7235DA",
900*00b67f09SDavid van Moolenbroek 			1
901*00b67f09SDavid van Moolenbroek 		},
902*00b67f09SDavid van Moolenbroek #if 0
903*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
904*00b67f09SDavid van Moolenbroek 		{
905*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test With Truncation"),
906*00b67f09SDavid van Moolenbroek 			"0x4C1A03424B55E07FE7F27BE1",
907*00b67f09SDavid van Moolenbroek 			1
908*00b67f09SDavid van Moolenbroek 		},
909*00b67f09SDavid van Moolenbroek #endif
910*00b67f09SDavid van Moolenbroek 		/* Test 6 */
911*00b67f09SDavid van Moolenbroek 		{
912*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test Using Larger Than Block-Size Key - "
913*00b67f09SDavid van Moolenbroek 				   "Hash Key First"),
914*00b67f09SDavid van Moolenbroek 			"0xAA4AE5E15272D00E95705637CE8A3B55ED402112", 1 },
915*00b67f09SDavid van Moolenbroek 		/* Test 7 */
916*00b67f09SDavid van Moolenbroek 		{
917*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test Using Larger Than Block-Size Key and "
918*00b67f09SDavid van Moolenbroek 				   "Larger Than One Block-Size Data"),
919*00b67f09SDavid van Moolenbroek 			"0xE8E99D0F45237D786D6BBAA7965C7808BBFF1A91",
920*00b67f09SDavid van Moolenbroek 			1
921*00b67f09SDavid van Moolenbroek 		},
922*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
923*00b67f09SDavid van Moolenbroek 	};
924*00b67f09SDavid van Moolenbroek 
925*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
926*00b67f09SDavid van Moolenbroek 
927*00b67f09SDavid van Moolenbroek 	hash_test_key_t test_keys[] = {
928*00b67f09SDavid van Moolenbroek 		/* Key 1 */
929*00b67f09SDavid van Moolenbroek 		{ "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
930*00b67f09SDavid van Moolenbroek 		  "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 },
931*00b67f09SDavid van Moolenbroek 		/* Key 2 */
932*00b67f09SDavid van Moolenbroek 		{ "Jefe", 4 },
933*00b67f09SDavid van Moolenbroek 		/* Key 3 */
934*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
935*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 },
936*00b67f09SDavid van Moolenbroek 		/* Key 4 */
937*00b67f09SDavid van Moolenbroek 		{ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
938*00b67f09SDavid van Moolenbroek 		  "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
939*00b67f09SDavid van Moolenbroek 		  "\x15\x16\x17\x18\x19", 25 },
940*00b67f09SDavid van Moolenbroek #if 0
941*00b67f09SDavid van Moolenbroek 		/* Key 5 */
942*00b67f09SDavid van Moolenbroek 		{ "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
943*00b67f09SDavid van Moolenbroek 		  "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 },
944*00b67f09SDavid van Moolenbroek #endif
945*00b67f09SDavid van Moolenbroek 		/* Key 6 */
946*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
947*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
948*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
949*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
950*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
951*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
952*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
953*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80 },
954*00b67f09SDavid van Moolenbroek 		/* Key 7 */
955*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
956*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
957*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
958*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
959*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
960*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
961*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
962*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80 },
963*00b67f09SDavid van Moolenbroek 		{ "", 0 }
964*00b67f09SDavid van Moolenbroek 	};
965*00b67f09SDavid van Moolenbroek 
966*00b67f09SDavid van Moolenbroek 	hash_test_key_t *test_key = test_keys;
967*00b67f09SDavid van Moolenbroek 
968*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
969*00b67f09SDavid van Moolenbroek 		memmove(buffer, test_key->key, test_key->len);
970*00b67f09SDavid van Moolenbroek 		isc_hmacsha1_init(&hmacsha1, buffer, test_key->len);
971*00b67f09SDavid van Moolenbroek 		isc_hmacsha1_update(&hmacsha1,
972*00b67f09SDavid van Moolenbroek 				    (const isc_uint8_t *) testcase->input,
973*00b67f09SDavid van Moolenbroek 				    testcase->input_len);
974*00b67f09SDavid van Moolenbroek 		isc_hmacsha1_sign(&hmacsha1, digest, ISC_SHA1_DIGESTLENGTH);
975*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA1_DIGESTLENGTH, str);
976*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
977*00b67f09SDavid van Moolenbroek 
978*00b67f09SDavid van Moolenbroek 		testcase++;
979*00b67f09SDavid van Moolenbroek 		test_key++;
980*00b67f09SDavid van Moolenbroek 	}
981*00b67f09SDavid van Moolenbroek }
982*00b67f09SDavid van Moolenbroek 
983*00b67f09SDavid van Moolenbroek /* HMAC-SHA224 test */
984*00b67f09SDavid van Moolenbroek ATF_TC(isc_hmacsha224);
ATF_TC_HEAD(isc_hmacsha224,tc)985*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_hmacsha224, tc) {
986*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "HMAC-SHA224 examples from RFC4634");
987*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_hmacsha224,tc)988*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_hmacsha224, tc) {
989*00b67f09SDavid van Moolenbroek 	isc_hmacsha224_t hmacsha224;
990*00b67f09SDavid van Moolenbroek 
991*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
992*00b67f09SDavid van Moolenbroek 
993*00b67f09SDavid van Moolenbroek 	/*
994*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
995*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
996*00b67f09SDavid van Moolenbroek 	 * result specified here.
997*00b67f09SDavid van Moolenbroek 	 */
998*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
999*00b67f09SDavid van Moolenbroek 		/* Test 1 */
1000*00b67f09SDavid van Moolenbroek 		{
1001*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
1002*00b67f09SDavid van Moolenbroek 			"0x896FB1128ABBDF196832107CD49DF33F47B4B1169912BA"
1003*00b67f09SDavid van Moolenbroek 				"4F53684B22",
1004*00b67f09SDavid van Moolenbroek 			1
1005*00b67f09SDavid van Moolenbroek 		},
1006*00b67f09SDavid van Moolenbroek 		/* Test 2 */
1007*00b67f09SDavid van Moolenbroek 		{
1008*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
1009*00b67f09SDavid van Moolenbroek 				   "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
1010*00b67f09SDavid van Moolenbroek 				   "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
1011*00b67f09SDavid van Moolenbroek 			"0xA30E01098BC6DBBF45690F3A7E9E6D0F8BBEA2A39E61480"
1012*00b67f09SDavid van Moolenbroek 				"08FD05E44",
1013*00b67f09SDavid van Moolenbroek 			1
1014*00b67f09SDavid van Moolenbroek 		},
1015*00b67f09SDavid van Moolenbroek 		/* Test 3 */
1016*00b67f09SDavid van Moolenbroek 		{
1017*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1018*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1019*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1020*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1021*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
1022*00b67f09SDavid van Moolenbroek 			"0x7FB3CB3588C6C1F6FFA9694D7D6AD2649365B0C1F65D69"
1023*00b67f09SDavid van Moolenbroek 				"D1EC8333EA",
1024*00b67f09SDavid van Moolenbroek 			1
1025*00b67f09SDavid van Moolenbroek 		},
1026*00b67f09SDavid van Moolenbroek 		/* Test 4 */
1027*00b67f09SDavid van Moolenbroek 		{
1028*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1029*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1030*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1031*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1032*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
1033*00b67f09SDavid van Moolenbroek 			"0x6C11506874013CAC6A2ABC1BB382627CEC6A90D86EFC01"
1034*00b67f09SDavid van Moolenbroek 				"2DE7AFEC5A",
1035*00b67f09SDavid van Moolenbroek 			1
1036*00b67f09SDavid van Moolenbroek 		},
1037*00b67f09SDavid van Moolenbroek #if 0
1038*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
1039*00b67f09SDavid van Moolenbroek 		{
1040*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test With Truncation"),
1041*00b67f09SDavid van Moolenbroek 			"0x4C1A03424B55E07FE7F27BE1",
1042*00b67f09SDavid van Moolenbroek 			1
1043*00b67f09SDavid van Moolenbroek 		},
1044*00b67f09SDavid van Moolenbroek #endif
1045*00b67f09SDavid van Moolenbroek 		/* Test 6 */
1046*00b67f09SDavid van Moolenbroek 		{
1047*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test Using Larger Than Block-Size Key - "
1048*00b67f09SDavid van Moolenbroek 				   "Hash Key First"),
1049*00b67f09SDavid van Moolenbroek 			"0x95E9A0DB962095ADAEBE9B2D6F0DBCE2D499F112F2D2B7"
1050*00b67f09SDavid van Moolenbroek 				"273FA6870E",
1051*00b67f09SDavid van Moolenbroek 			1
1052*00b67f09SDavid van Moolenbroek 		},
1053*00b67f09SDavid van Moolenbroek 		/* Test 7 */
1054*00b67f09SDavid van Moolenbroek 		{
1055*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20"
1056*00b67f09SDavid van Moolenbroek 				   "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67"
1057*00b67f09SDavid van Moolenbroek 				   "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20"
1058*00b67f09SDavid van Moolenbroek 				   "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
1059*00b67f09SDavid van Moolenbroek 				   "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20"
1060*00b67f09SDavid van Moolenbroek 				   "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67"
1061*00b67f09SDavid van Moolenbroek 				   "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c"
1062*00b67f09SDavid van Moolenbroek 				   "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64"
1063*00b67f09SDavid van Moolenbroek 				   "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b"
1064*00b67f09SDavid van Moolenbroek 				   "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74"
1065*00b67f09SDavid van Moolenbroek 				   "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65"
1066*00b67f09SDavid van Moolenbroek 				   "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62"
1067*00b67f09SDavid van Moolenbroek 				   "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20"
1068*00b67f09SDavid van Moolenbroek 				   "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41"
1069*00b67f09SDavid van Moolenbroek 				   "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68"
1070*00b67f09SDavid van Moolenbroek 				   "\x6d\x2e"),
1071*00b67f09SDavid van Moolenbroek 			"0x3A854166AC5D9F023F54D517D0B39DBD946770DB9C2B95"
1072*00b67f09SDavid van Moolenbroek 				"C9F6F565D1",
1073*00b67f09SDavid van Moolenbroek 			1
1074*00b67f09SDavid van Moolenbroek 		},
1075*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
1076*00b67f09SDavid van Moolenbroek 	};
1077*00b67f09SDavid van Moolenbroek 
1078*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
1079*00b67f09SDavid van Moolenbroek 
1080*00b67f09SDavid van Moolenbroek 	hash_test_key_t test_keys[] = {
1081*00b67f09SDavid van Moolenbroek 		/* Key 1 */
1082*00b67f09SDavid van Moolenbroek 		{ "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1083*00b67f09SDavid van Moolenbroek 		  "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 },
1084*00b67f09SDavid van Moolenbroek 		/* Key 2 */
1085*00b67f09SDavid van Moolenbroek 		{ "Jefe", 4 },
1086*00b67f09SDavid van Moolenbroek 		/* Key 3 */
1087*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1088*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 },
1089*00b67f09SDavid van Moolenbroek 		/* Key 4 */
1090*00b67f09SDavid van Moolenbroek 		{ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
1091*00b67f09SDavid van Moolenbroek 		  "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
1092*00b67f09SDavid van Moolenbroek 		  "\x15\x16\x17\x18\x19", 25 },
1093*00b67f09SDavid van Moolenbroek #if 0
1094*00b67f09SDavid van Moolenbroek 		/* Key 5 */
1095*00b67f09SDavid van Moolenbroek 		{ "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1096*00b67f09SDavid van Moolenbroek 		  "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 },
1097*00b67f09SDavid van Moolenbroek #endif
1098*00b67f09SDavid van Moolenbroek 		/* Key 6 */
1099*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1100*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1101*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1102*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1103*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1104*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1105*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1106*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1107*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1108*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1109*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1110*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1111*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1112*00b67f09SDavid van Moolenbroek 		/* Key 7 */
1113*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1114*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1115*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1116*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1117*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1118*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1119*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1120*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1121*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1122*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1123*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1124*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1125*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1126*00b67f09SDavid van Moolenbroek 		{ "", 0 }
1127*00b67f09SDavid van Moolenbroek 	};
1128*00b67f09SDavid van Moolenbroek 
1129*00b67f09SDavid van Moolenbroek 	hash_test_key_t *test_key = test_keys;
1130*00b67f09SDavid van Moolenbroek 
1131*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
1132*00b67f09SDavid van Moolenbroek 		memmove(buffer, test_key->key, test_key->len);
1133*00b67f09SDavid van Moolenbroek 		isc_hmacsha224_init(&hmacsha224, buffer, test_key->len);
1134*00b67f09SDavid van Moolenbroek 		isc_hmacsha224_update(&hmacsha224,
1135*00b67f09SDavid van Moolenbroek 				      (const isc_uint8_t *) testcase->input,
1136*00b67f09SDavid van Moolenbroek 				      testcase->input_len);
1137*00b67f09SDavid van Moolenbroek 		isc_hmacsha224_sign(&hmacsha224, digest, ISC_SHA224_DIGESTLENGTH);
1138*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA224_DIGESTLENGTH, str);
1139*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
1140*00b67f09SDavid van Moolenbroek 
1141*00b67f09SDavid van Moolenbroek 		testcase++;
1142*00b67f09SDavid van Moolenbroek 		test_key++;
1143*00b67f09SDavid van Moolenbroek 	}
1144*00b67f09SDavid van Moolenbroek }
1145*00b67f09SDavid van Moolenbroek 
1146*00b67f09SDavid van Moolenbroek /* HMAC-SHA256 test */
1147*00b67f09SDavid van Moolenbroek ATF_TC(isc_hmacsha256);
ATF_TC_HEAD(isc_hmacsha256,tc)1148*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_hmacsha256, tc) {
1149*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "HMAC-SHA256 examples from RFC4634");
1150*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_hmacsha256,tc)1151*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_hmacsha256, tc) {
1152*00b67f09SDavid van Moolenbroek 	isc_hmacsha256_t hmacsha256;
1153*00b67f09SDavid van Moolenbroek 
1154*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
1155*00b67f09SDavid van Moolenbroek 
1156*00b67f09SDavid van Moolenbroek 	/*
1157*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
1158*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
1159*00b67f09SDavid van Moolenbroek 	 * result specified here.
1160*00b67f09SDavid van Moolenbroek 	 */
1161*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
1162*00b67f09SDavid van Moolenbroek 		/* Test 1 */
1163*00b67f09SDavid van Moolenbroek 		{
1164*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
1165*00b67f09SDavid van Moolenbroek 			"0xB0344C61D8DB38535CA8AFCEAF0BF12B881DC200C9833D"
1166*00b67f09SDavid van Moolenbroek 				"A726E9376C2E32CFF7",
1167*00b67f09SDavid van Moolenbroek 			1
1168*00b67f09SDavid van Moolenbroek 		},
1169*00b67f09SDavid van Moolenbroek 		/* Test 2 */
1170*00b67f09SDavid van Moolenbroek 		{
1171*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
1172*00b67f09SDavid van Moolenbroek 				   "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
1173*00b67f09SDavid van Moolenbroek 				   "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
1174*00b67f09SDavid van Moolenbroek 			"0x5BDCC146BF60754E6A042426089575C75A003F089D2739"
1175*00b67f09SDavid van Moolenbroek 				"839DEC58B964EC3843",
1176*00b67f09SDavid van Moolenbroek 			1
1177*00b67f09SDavid van Moolenbroek 		},
1178*00b67f09SDavid van Moolenbroek 		/* Test 3 */
1179*00b67f09SDavid van Moolenbroek 		{
1180*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1181*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1182*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1183*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1184*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
1185*00b67f09SDavid van Moolenbroek 			"0x773EA91E36800E46854DB8EBD09181A72959098B3EF8C1"
1186*00b67f09SDavid van Moolenbroek 				"22D9635514CED565FE",
1187*00b67f09SDavid van Moolenbroek 			1
1188*00b67f09SDavid van Moolenbroek 		},
1189*00b67f09SDavid van Moolenbroek 		/* Test 4 */
1190*00b67f09SDavid van Moolenbroek 		{
1191*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1192*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1193*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1194*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1195*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
1196*00b67f09SDavid van Moolenbroek 			"0x82558A389A443C0EA4CC819899F2083A85F0FAA3E578F8"
1197*00b67f09SDavid van Moolenbroek 				"077A2E3FF46729665B",
1198*00b67f09SDavid van Moolenbroek 			1
1199*00b67f09SDavid van Moolenbroek 		},
1200*00b67f09SDavid van Moolenbroek #if 0
1201*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
1202*00b67f09SDavid van Moolenbroek 		{
1203*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test With Truncation"),
1204*00b67f09SDavid van Moolenbroek 			"0x4C1A03424B55E07FE7F27BE1",
1205*00b67f09SDavid van Moolenbroek 			1
1206*00b67f09SDavid van Moolenbroek 		},
1207*00b67f09SDavid van Moolenbroek #endif
1208*00b67f09SDavid van Moolenbroek 		/* Test 6 */
1209*00b67f09SDavid van Moolenbroek 		{
1210*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test Using Larger Than Block-Size Key - "
1211*00b67f09SDavid van Moolenbroek 				   "Hash Key First"),
1212*00b67f09SDavid van Moolenbroek 			"0x60E431591EE0B67F0D8A26AACBF5B77F8E0BC6213728C5"
1213*00b67f09SDavid van Moolenbroek 				"140546040F0EE37F54",
1214*00b67f09SDavid van Moolenbroek 			1
1215*00b67f09SDavid van Moolenbroek 		},
1216*00b67f09SDavid van Moolenbroek 		/* Test 7 */
1217*00b67f09SDavid van Moolenbroek 		{
1218*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20"
1219*00b67f09SDavid van Moolenbroek 				   "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67"
1220*00b67f09SDavid van Moolenbroek 				   "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20"
1221*00b67f09SDavid van Moolenbroek 				   "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
1222*00b67f09SDavid van Moolenbroek 				   "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20"
1223*00b67f09SDavid van Moolenbroek 				   "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67"
1224*00b67f09SDavid van Moolenbroek 				   "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c"
1225*00b67f09SDavid van Moolenbroek 				   "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64"
1226*00b67f09SDavid van Moolenbroek 				   "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b"
1227*00b67f09SDavid van Moolenbroek 				   "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74"
1228*00b67f09SDavid van Moolenbroek 				   "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65"
1229*00b67f09SDavid van Moolenbroek 				   "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62"
1230*00b67f09SDavid van Moolenbroek 				   "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20"
1231*00b67f09SDavid van Moolenbroek 				   "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41"
1232*00b67f09SDavid van Moolenbroek 				   "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68"
1233*00b67f09SDavid van Moolenbroek 				   "\x6d\x2e"),
1234*00b67f09SDavid van Moolenbroek 			"0x9B09FFA71B942FCB27635FBCD5B0E944BFDC63644F0713"
1235*00b67f09SDavid van Moolenbroek 				"938A7F51535C3A35E2",
1236*00b67f09SDavid van Moolenbroek 			1
1237*00b67f09SDavid van Moolenbroek 		},
1238*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
1239*00b67f09SDavid van Moolenbroek 	};
1240*00b67f09SDavid van Moolenbroek 
1241*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
1242*00b67f09SDavid van Moolenbroek 
1243*00b67f09SDavid van Moolenbroek 	hash_test_key_t test_keys[] = {
1244*00b67f09SDavid van Moolenbroek 		/* Key 1 */
1245*00b67f09SDavid van Moolenbroek 		{ "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1246*00b67f09SDavid van Moolenbroek 		  "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 },
1247*00b67f09SDavid van Moolenbroek 		/* Key 2 */
1248*00b67f09SDavid van Moolenbroek 		{ "Jefe", 4 },
1249*00b67f09SDavid van Moolenbroek 		/* Key 3 */
1250*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1251*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 },
1252*00b67f09SDavid van Moolenbroek 		/* Key 4 */
1253*00b67f09SDavid van Moolenbroek 		{ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
1254*00b67f09SDavid van Moolenbroek 		  "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
1255*00b67f09SDavid van Moolenbroek 		  "\x15\x16\x17\x18\x19", 25 },
1256*00b67f09SDavid van Moolenbroek #if 0
1257*00b67f09SDavid van Moolenbroek 		/* Key 5 */
1258*00b67f09SDavid van Moolenbroek 		{ "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1259*00b67f09SDavid van Moolenbroek 		  "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 },
1260*00b67f09SDavid van Moolenbroek #endif
1261*00b67f09SDavid van Moolenbroek 		/* Key 6 */
1262*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1263*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1264*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1265*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1266*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1267*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1268*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1269*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1270*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1271*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1272*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1273*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1274*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1275*00b67f09SDavid van Moolenbroek 		/* Key 7 */
1276*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1277*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1278*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1279*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1280*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1281*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1282*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1283*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1284*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1285*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1286*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1287*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1288*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1289*00b67f09SDavid van Moolenbroek 		{ "", 0 }
1290*00b67f09SDavid van Moolenbroek 	};
1291*00b67f09SDavid van Moolenbroek 
1292*00b67f09SDavid van Moolenbroek 	hash_test_key_t *test_key = test_keys;
1293*00b67f09SDavid van Moolenbroek 
1294*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
1295*00b67f09SDavid van Moolenbroek 		memmove(buffer, test_key->key, test_key->len);
1296*00b67f09SDavid van Moolenbroek 		isc_hmacsha256_init(&hmacsha256, buffer, test_key->len);
1297*00b67f09SDavid van Moolenbroek 		isc_hmacsha256_update(&hmacsha256,
1298*00b67f09SDavid van Moolenbroek 				      (const isc_uint8_t *) testcase->input,
1299*00b67f09SDavid van Moolenbroek 				      testcase->input_len);
1300*00b67f09SDavid van Moolenbroek 		isc_hmacsha256_sign(&hmacsha256, digest, ISC_SHA256_DIGESTLENGTH);
1301*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA256_DIGESTLENGTH, str);
1302*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
1303*00b67f09SDavid van Moolenbroek 
1304*00b67f09SDavid van Moolenbroek 		testcase++;
1305*00b67f09SDavid van Moolenbroek 		test_key++;
1306*00b67f09SDavid van Moolenbroek 	}
1307*00b67f09SDavid van Moolenbroek }
1308*00b67f09SDavid van Moolenbroek 
1309*00b67f09SDavid van Moolenbroek /* HMAC-SHA384 test */
1310*00b67f09SDavid van Moolenbroek ATF_TC(isc_hmacsha384);
ATF_TC_HEAD(isc_hmacsha384,tc)1311*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_hmacsha384, tc) {
1312*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "HMAC-SHA384 examples from RFC4634");
1313*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_hmacsha384,tc)1314*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_hmacsha384, tc) {
1315*00b67f09SDavid van Moolenbroek 	isc_hmacsha384_t hmacsha384;
1316*00b67f09SDavid van Moolenbroek 
1317*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
1318*00b67f09SDavid van Moolenbroek 
1319*00b67f09SDavid van Moolenbroek 	/*
1320*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
1321*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
1322*00b67f09SDavid van Moolenbroek 	 * result specified here.
1323*00b67f09SDavid van Moolenbroek 	 */
1324*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
1325*00b67f09SDavid van Moolenbroek 		/* Test 1 */
1326*00b67f09SDavid van Moolenbroek 		{
1327*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
1328*00b67f09SDavid van Moolenbroek 			"0xAFD03944D84895626B0825F4AB46907F15F9DADBE4101E"
1329*00b67f09SDavid van Moolenbroek 				"C682AA034C7CEBC59CFAEA9EA9076EDE7F4AF152"
1330*00b67f09SDavid van Moolenbroek 				"E8B2FA9CB6",
1331*00b67f09SDavid van Moolenbroek 			1
1332*00b67f09SDavid van Moolenbroek 		},
1333*00b67f09SDavid van Moolenbroek 		/* Test 2 */
1334*00b67f09SDavid van Moolenbroek 		{
1335*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
1336*00b67f09SDavid van Moolenbroek 				   "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
1337*00b67f09SDavid van Moolenbroek 				   "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
1338*00b67f09SDavid van Moolenbroek 			"0xAF45D2E376484031617F78D2B58A6B1B9C7EF464F5A01B"
1339*00b67f09SDavid van Moolenbroek 				"47E42EC3736322445E8E2240CA5E69E2C78B3239"
1340*00b67f09SDavid van Moolenbroek 				"ECFAB21649",
1341*00b67f09SDavid van Moolenbroek 			1
1342*00b67f09SDavid van Moolenbroek 		},
1343*00b67f09SDavid van Moolenbroek 		/* Test 3 */
1344*00b67f09SDavid van Moolenbroek 		{
1345*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1346*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1347*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1348*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1349*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
1350*00b67f09SDavid van Moolenbroek 			"0x88062608D3E6AD8A0AA2ACE014C8A86F0AA635D947AC9F"
1351*00b67f09SDavid van Moolenbroek 				"EBE83EF4E55966144B2A5AB39DC13814B94E3AB6"
1352*00b67f09SDavid van Moolenbroek 				"E101A34F27",
1353*00b67f09SDavid van Moolenbroek 			1
1354*00b67f09SDavid van Moolenbroek 		},
1355*00b67f09SDavid van Moolenbroek 		/* Test 4 */
1356*00b67f09SDavid van Moolenbroek 		{
1357*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1358*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1359*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1360*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1361*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
1362*00b67f09SDavid van Moolenbroek 			"0x3E8A69B7783C25851933AB6290AF6CA77A998148085000"
1363*00b67f09SDavid van Moolenbroek 				"9CC5577C6E1F573B4E6801DD23C4A7D679CCF8A3"
1364*00b67f09SDavid van Moolenbroek 				"86C674CFFB",
1365*00b67f09SDavid van Moolenbroek 			1
1366*00b67f09SDavid van Moolenbroek 		},
1367*00b67f09SDavid van Moolenbroek #if 0
1368*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
1369*00b67f09SDavid van Moolenbroek 		{
1370*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test With Truncation"),
1371*00b67f09SDavid van Moolenbroek 			"0x4C1A03424B55E07FE7F27BE1",
1372*00b67f09SDavid van Moolenbroek 			1
1373*00b67f09SDavid van Moolenbroek 		},
1374*00b67f09SDavid van Moolenbroek #endif
1375*00b67f09SDavid van Moolenbroek 		/* Test 6 */
1376*00b67f09SDavid van Moolenbroek 		{
1377*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test Using Larger Than Block-Size Key - "
1378*00b67f09SDavid van Moolenbroek 				   "Hash Key First"),
1379*00b67f09SDavid van Moolenbroek 			"0x4ECE084485813E9088D2C63A041BC5B44F9EF1012A2B58"
1380*00b67f09SDavid van Moolenbroek 				"8F3CD11F05033AC4C60C2EF6AB4030FE8296248D"
1381*00b67f09SDavid van Moolenbroek 				"F163F44952",
1382*00b67f09SDavid van Moolenbroek 			1
1383*00b67f09SDavid van Moolenbroek 		},
1384*00b67f09SDavid van Moolenbroek 		/* Test 7 */
1385*00b67f09SDavid van Moolenbroek 		{
1386*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20"
1387*00b67f09SDavid van Moolenbroek 				   "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67"
1388*00b67f09SDavid van Moolenbroek 				   "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20"
1389*00b67f09SDavid van Moolenbroek 				   "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
1390*00b67f09SDavid van Moolenbroek 				   "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20"
1391*00b67f09SDavid van Moolenbroek 				   "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67"
1392*00b67f09SDavid van Moolenbroek 				   "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c"
1393*00b67f09SDavid van Moolenbroek 				   "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64"
1394*00b67f09SDavid van Moolenbroek 				   "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b"
1395*00b67f09SDavid van Moolenbroek 				   "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74"
1396*00b67f09SDavid van Moolenbroek 				   "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65"
1397*00b67f09SDavid van Moolenbroek 				   "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62"
1398*00b67f09SDavid van Moolenbroek 				   "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20"
1399*00b67f09SDavid van Moolenbroek 				   "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41"
1400*00b67f09SDavid van Moolenbroek 				   "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68"
1401*00b67f09SDavid van Moolenbroek 				   "\x6d\x2e"),
1402*00b67f09SDavid van Moolenbroek 			"0x6617178E941F020D351E2F254E8FD32C602420FEB0B8FB"
1403*00b67f09SDavid van Moolenbroek 				"9ADCCEBB82461E99C5A678CC31E799176D3860E6"
1404*00b67f09SDavid van Moolenbroek 				"110C46523E",
1405*00b67f09SDavid van Moolenbroek 			1
1406*00b67f09SDavid van Moolenbroek 		},
1407*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
1408*00b67f09SDavid van Moolenbroek 	};
1409*00b67f09SDavid van Moolenbroek 
1410*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
1411*00b67f09SDavid van Moolenbroek 
1412*00b67f09SDavid van Moolenbroek 	hash_test_key_t test_keys[] = {
1413*00b67f09SDavid van Moolenbroek 		/* Key 1 */
1414*00b67f09SDavid van Moolenbroek 		{ "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1415*00b67f09SDavid van Moolenbroek 		  "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 },
1416*00b67f09SDavid van Moolenbroek 		/* Key 2 */
1417*00b67f09SDavid van Moolenbroek 		{ "Jefe", 4 },
1418*00b67f09SDavid van Moolenbroek 		/* Key 3 */
1419*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1420*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 },
1421*00b67f09SDavid van Moolenbroek 		/* Key 4 */
1422*00b67f09SDavid van Moolenbroek 		{ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
1423*00b67f09SDavid van Moolenbroek 		  "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
1424*00b67f09SDavid van Moolenbroek 		  "\x15\x16\x17\x18\x19", 25 },
1425*00b67f09SDavid van Moolenbroek #if 0
1426*00b67f09SDavid van Moolenbroek 		/* Key 5 */
1427*00b67f09SDavid van Moolenbroek 		{ "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1428*00b67f09SDavid van Moolenbroek 		  "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 },
1429*00b67f09SDavid van Moolenbroek #endif
1430*00b67f09SDavid van Moolenbroek 		/* Key 6 */
1431*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1432*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1433*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1434*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1435*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1436*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1437*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1438*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1439*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1440*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1441*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1442*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1443*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1444*00b67f09SDavid van Moolenbroek 		/* Key 7 */
1445*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1446*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1447*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1448*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1449*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1450*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1451*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1452*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1453*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1454*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1455*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1456*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1457*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1458*00b67f09SDavid van Moolenbroek 		{ "", 0 }
1459*00b67f09SDavid van Moolenbroek 	};
1460*00b67f09SDavid van Moolenbroek 
1461*00b67f09SDavid van Moolenbroek 	hash_test_key_t *test_key = test_keys;
1462*00b67f09SDavid van Moolenbroek 
1463*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
1464*00b67f09SDavid van Moolenbroek 		memmove(buffer, test_key->key, test_key->len);
1465*00b67f09SDavid van Moolenbroek 		isc_hmacsha384_init(&hmacsha384, buffer, test_key->len);
1466*00b67f09SDavid van Moolenbroek 		isc_hmacsha384_update(&hmacsha384,
1467*00b67f09SDavid van Moolenbroek 				      (const isc_uint8_t *) testcase->input,
1468*00b67f09SDavid van Moolenbroek 				      testcase->input_len);
1469*00b67f09SDavid van Moolenbroek 		isc_hmacsha384_sign(&hmacsha384, digest, ISC_SHA384_DIGESTLENGTH);
1470*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA384_DIGESTLENGTH, str);
1471*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
1472*00b67f09SDavid van Moolenbroek 
1473*00b67f09SDavid van Moolenbroek 		testcase++;
1474*00b67f09SDavid van Moolenbroek 		test_key++;
1475*00b67f09SDavid van Moolenbroek 	}
1476*00b67f09SDavid van Moolenbroek }
1477*00b67f09SDavid van Moolenbroek 
1478*00b67f09SDavid van Moolenbroek /* HMAC-SHA512 test */
1479*00b67f09SDavid van Moolenbroek ATF_TC(isc_hmacsha512);
ATF_TC_HEAD(isc_hmacsha512,tc)1480*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_hmacsha512, tc) {
1481*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "HMAC-SHA512 examples from RFC4634");
1482*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_hmacsha512,tc)1483*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_hmacsha512, tc) {
1484*00b67f09SDavid van Moolenbroek 	isc_hmacsha512_t hmacsha512;
1485*00b67f09SDavid van Moolenbroek 
1486*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
1487*00b67f09SDavid van Moolenbroek 
1488*00b67f09SDavid van Moolenbroek 	/*
1489*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
1490*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
1491*00b67f09SDavid van Moolenbroek 	 * result specified here.
1492*00b67f09SDavid van Moolenbroek 	 */
1493*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
1494*00b67f09SDavid van Moolenbroek 		/* Test 1 */
1495*00b67f09SDavid van Moolenbroek 		{
1496*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
1497*00b67f09SDavid van Moolenbroek 			"0x87AA7CDEA5EF619D4FF0B4241A1D6CB02379F4E2CE4EC2"
1498*00b67f09SDavid van Moolenbroek 				"787AD0B30545E17CDEDAA833B7D6B8A702038B27"
1499*00b67f09SDavid van Moolenbroek 				"4EAEA3F4E4BE9D914EEB61F1702E696C203A126854",
1500*00b67f09SDavid van Moolenbroek 			1
1501*00b67f09SDavid van Moolenbroek 		},
1502*00b67f09SDavid van Moolenbroek 		/* Test 2 */
1503*00b67f09SDavid van Moolenbroek 		{
1504*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61"
1505*00b67f09SDavid van Moolenbroek 				   "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20"
1506*00b67f09SDavid van Moolenbroek 				   "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
1507*00b67f09SDavid van Moolenbroek 			"0x164B7A7BFCF819E2E395FBE73B56E0A387BD64222E831F"
1508*00b67f09SDavid van Moolenbroek 				"D610270CD7EA2505549758BF75C05A994A6D034F"
1509*00b67f09SDavid van Moolenbroek 				"65F8F0E6FDCAEAB1A34D4A6B4B636E070A38BCE737",
1510*00b67f09SDavid van Moolenbroek 			1
1511*00b67f09SDavid van Moolenbroek 		},
1512*00b67f09SDavid van Moolenbroek 		/* Test 3 */
1513*00b67f09SDavid van Moolenbroek 		{
1514*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1515*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1516*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1517*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1518*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
1519*00b67f09SDavid van Moolenbroek 			"0xFA73B0089D56A284EFB0F0756C890BE9B1B5DBDD8EE81A"
1520*00b67f09SDavid van Moolenbroek 				"3655F83E33B2279D39BF3E848279A722C806B485"
1521*00b67f09SDavid van Moolenbroek 				"A47E67C807B946A337BEE8942674278859E13292FB",
1522*00b67f09SDavid van Moolenbroek 			1
1523*00b67f09SDavid van Moolenbroek 		},
1524*00b67f09SDavid van Moolenbroek 		/* Test 4 */
1525*00b67f09SDavid van Moolenbroek 		{
1526*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1527*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1528*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1529*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1530*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
1531*00b67f09SDavid van Moolenbroek 			"0xB0BA465637458C6990E5A8C5F61D4AF7E576D97FF94B87"
1532*00b67f09SDavid van Moolenbroek 				"2DE76F8050361EE3DBA91CA5C11AA25EB4D67927"
1533*00b67f09SDavid van Moolenbroek 				"5CC5788063A5F19741120C4F2DE2ADEBEB10A298DD",
1534*00b67f09SDavid van Moolenbroek 			1
1535*00b67f09SDavid van Moolenbroek 		},
1536*00b67f09SDavid van Moolenbroek #if 0
1537*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
1538*00b67f09SDavid van Moolenbroek 		{
1539*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test With Truncation"),
1540*00b67f09SDavid van Moolenbroek 			"0x4C1A03424B55E07FE7F27BE1",
1541*00b67f09SDavid van Moolenbroek 			1
1542*00b67f09SDavid van Moolenbroek 		},
1543*00b67f09SDavid van Moolenbroek #endif
1544*00b67f09SDavid van Moolenbroek 		/* Test 6 */
1545*00b67f09SDavid van Moolenbroek 		{
1546*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test Using Larger Than Block-Size Key - "
1547*00b67f09SDavid van Moolenbroek 				   "Hash Key First"),
1548*00b67f09SDavid van Moolenbroek 			"0x80B24263C7C1A3EBB71493C1DD7BE8B49B46D1F41B4AEE"
1549*00b67f09SDavid van Moolenbroek 				"C1121B013783F8F3526B56D037E05F2598BD0FD2"
1550*00b67f09SDavid van Moolenbroek 				"215D6A1E5295E64F73F63F0AEC8B915A985D786598",
1551*00b67f09SDavid van Moolenbroek 			1
1552*00b67f09SDavid van Moolenbroek 		},
1553*00b67f09SDavid van Moolenbroek 		/* Test 7 */
1554*00b67f09SDavid van Moolenbroek 		{
1555*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20"
1556*00b67f09SDavid van Moolenbroek 				   "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67"
1557*00b67f09SDavid van Moolenbroek 				   "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20"
1558*00b67f09SDavid van Moolenbroek 				   "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
1559*00b67f09SDavid van Moolenbroek 				   "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20"
1560*00b67f09SDavid van Moolenbroek 				   "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67"
1561*00b67f09SDavid van Moolenbroek 				   "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c"
1562*00b67f09SDavid van Moolenbroek 				   "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64"
1563*00b67f09SDavid van Moolenbroek 				   "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b"
1564*00b67f09SDavid van Moolenbroek 				   "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74"
1565*00b67f09SDavid van Moolenbroek 				   "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65"
1566*00b67f09SDavid van Moolenbroek 				   "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62"
1567*00b67f09SDavid van Moolenbroek 				   "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20"
1568*00b67f09SDavid van Moolenbroek 				   "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41"
1569*00b67f09SDavid van Moolenbroek 				   "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68"
1570*00b67f09SDavid van Moolenbroek 				   "\x6d\x2e"),
1571*00b67f09SDavid van Moolenbroek 			"0xE37B6A775DC87DBAA4DFA9F96E5E3FFDDEBD71F8867289"
1572*00b67f09SDavid van Moolenbroek 				"865DF5A32D20CDC944B6022CAC3C4982B10D5EEB"
1573*00b67f09SDavid van Moolenbroek 				"55C3E4DE15134676FB6DE0446065C97440FA8C6A58",
1574*00b67f09SDavid van Moolenbroek 			1
1575*00b67f09SDavid van Moolenbroek 		},
1576*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
1577*00b67f09SDavid van Moolenbroek 	};
1578*00b67f09SDavid van Moolenbroek 
1579*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
1580*00b67f09SDavid van Moolenbroek 
1581*00b67f09SDavid van Moolenbroek 	hash_test_key_t test_keys[] = {
1582*00b67f09SDavid van Moolenbroek 		/* Key 1 */
1583*00b67f09SDavid van Moolenbroek 		{ "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1584*00b67f09SDavid van Moolenbroek 		  "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 },
1585*00b67f09SDavid van Moolenbroek 		/* Key 2 */
1586*00b67f09SDavid van Moolenbroek 		{ "Jefe", 4 },
1587*00b67f09SDavid van Moolenbroek 		/* Key 3 */
1588*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1589*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 },
1590*00b67f09SDavid van Moolenbroek 		/* Key 4 */
1591*00b67f09SDavid van Moolenbroek 		{ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
1592*00b67f09SDavid van Moolenbroek 		  "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
1593*00b67f09SDavid van Moolenbroek 		  "\x15\x16\x17\x18\x19", 25 },
1594*00b67f09SDavid van Moolenbroek #if 0
1595*00b67f09SDavid van Moolenbroek 		/* Key 5 */
1596*00b67f09SDavid van Moolenbroek 		{ "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1597*00b67f09SDavid van Moolenbroek 		  "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 },
1598*00b67f09SDavid van Moolenbroek #endif
1599*00b67f09SDavid van Moolenbroek 		/* Key 6 */
1600*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1601*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1602*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1603*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1604*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1605*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1606*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1607*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1608*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1609*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1610*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1611*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1612*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1613*00b67f09SDavid van Moolenbroek 		/* Key 7 */
1614*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1615*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1616*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1617*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1618*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1619*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1620*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1621*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1622*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1623*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1624*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1625*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1626*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1627*00b67f09SDavid van Moolenbroek 		{ "", 0 }
1628*00b67f09SDavid van Moolenbroek 	};
1629*00b67f09SDavid van Moolenbroek 
1630*00b67f09SDavid van Moolenbroek 	hash_test_key_t *test_key = test_keys;
1631*00b67f09SDavid van Moolenbroek 
1632*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
1633*00b67f09SDavid van Moolenbroek 		memmove(buffer, test_key->key, test_key->len);
1634*00b67f09SDavid van Moolenbroek 		isc_hmacsha512_init(&hmacsha512, buffer, test_key->len);
1635*00b67f09SDavid van Moolenbroek 		isc_hmacsha512_update(&hmacsha512,
1636*00b67f09SDavid van Moolenbroek 				      (const isc_uint8_t *) testcase->input,
1637*00b67f09SDavid van Moolenbroek 				      testcase->input_len);
1638*00b67f09SDavid van Moolenbroek 		isc_hmacsha512_sign(&hmacsha512, digest, ISC_SHA512_DIGESTLENGTH);
1639*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_SHA512_DIGESTLENGTH, str);
1640*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
1641*00b67f09SDavid van Moolenbroek 
1642*00b67f09SDavid van Moolenbroek 		testcase++;
1643*00b67f09SDavid van Moolenbroek 		test_key++;
1644*00b67f09SDavid van Moolenbroek 	}
1645*00b67f09SDavid van Moolenbroek }
1646*00b67f09SDavid van Moolenbroek 
1647*00b67f09SDavid van Moolenbroek 
1648*00b67f09SDavid van Moolenbroek /* HMAC-MD5 Test */
1649*00b67f09SDavid van Moolenbroek ATF_TC(isc_hmacmd5);
ATF_TC_HEAD(isc_hmacmd5,tc)1650*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_hmacmd5, tc) {
1651*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "HMAC-MD5 examples from RFC2104");
1652*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_hmacmd5,tc)1653*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_hmacmd5, tc) {
1654*00b67f09SDavid van Moolenbroek 	isc_hmacmd5_t hmacmd5;
1655*00b67f09SDavid van Moolenbroek 
1656*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
1657*00b67f09SDavid van Moolenbroek 
1658*00b67f09SDavid van Moolenbroek 	/*
1659*00b67f09SDavid van Moolenbroek 	 * These are the various test vectors.  All of these are passed
1660*00b67f09SDavid van Moolenbroek 	 * through the hash function and the results are compared to the
1661*00b67f09SDavid van Moolenbroek 	 * result specified here.
1662*00b67f09SDavid van Moolenbroek 	 */
1663*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
1664*00b67f09SDavid van Moolenbroek 		/* Test 1 */
1665*00b67f09SDavid van Moolenbroek 		{
1666*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"),
1667*00b67f09SDavid van Moolenbroek 			"0x9294727A3638BB1C13F48EF8158BFC9D",
1668*00b67f09SDavid van Moolenbroek 			1
1669*00b67f09SDavid van Moolenbroek 		},
1670*00b67f09SDavid van Moolenbroek 		/* Test 2 */
1671*00b67f09SDavid van Moolenbroek 		{
1672*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79"
1673*00b67f09SDavid van Moolenbroek 				   "\x61\x20\x77\x61\x6e\x74\x20\x66\x6f"
1674*00b67f09SDavid van Moolenbroek 				   "\x72\x20\x6e\x6f\x74\x68\x69\x6e\x67\x3f"),
1675*00b67f09SDavid van Moolenbroek 			"0x750C783E6AB0B503EAA86E310A5DB738", 1
1676*00b67f09SDavid van Moolenbroek 		},
1677*00b67f09SDavid van Moolenbroek 		/* Test 3 */
1678*00b67f09SDavid van Moolenbroek 		{
1679*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1680*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1681*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1682*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
1683*00b67f09SDavid van Moolenbroek 				   "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"),
1684*00b67f09SDavid van Moolenbroek 			"0x56BE34521D144C88DBB8C733F0E8B3F6",
1685*00b67f09SDavid van Moolenbroek 			1
1686*00b67f09SDavid van Moolenbroek 		},
1687*00b67f09SDavid van Moolenbroek 		/* Test 4 */
1688*00b67f09SDavid van Moolenbroek 		{
1689*00b67f09SDavid van Moolenbroek 			TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1690*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1691*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1692*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1693*00b67f09SDavid van Moolenbroek 				   "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"),
1694*00b67f09SDavid van Moolenbroek 			"0x697EAF0ACA3A3AEA3A75164746FFAA79",
1695*00b67f09SDavid van Moolenbroek 			1
1696*00b67f09SDavid van Moolenbroek 		},
1697*00b67f09SDavid van Moolenbroek #if 0
1698*00b67f09SDavid van Moolenbroek 		/* Test 5 -- unimplemented optional functionality */
1699*00b67f09SDavid van Moolenbroek 		{
1700*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test With Truncation"),
1701*00b67f09SDavid van Moolenbroek 			"0x4C1A03424B55E07FE7F27BE1",
1702*00b67f09SDavid van Moolenbroek 			1
1703*00b67f09SDavid van Moolenbroek 		},
1704*00b67f09SDavid van Moolenbroek 		/* Test 6 -- unimplemented optional functionality */
1705*00b67f09SDavid van Moolenbroek 		{
1706*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test Using Larger Than Block-Size Key - "
1707*00b67f09SDavid van Moolenbroek 				   "Hash Key First"),
1708*00b67f09SDavid van Moolenbroek 			"0xAA4AE5E15272D00E95705637CE8A3B55ED402112",
1709*00b67f09SDavid van Moolenbroek 			1
1710*00b67f09SDavid van Moolenbroek 		 },
1711*00b67f09SDavid van Moolenbroek 		/* Test 7 -- unimplemented optional functionality */
1712*00b67f09SDavid van Moolenbroek 		{
1713*00b67f09SDavid van Moolenbroek 			TEST_INPUT("Test Using Larger Than Block-Size Key and "
1714*00b67f09SDavid van Moolenbroek 				   "Larger Than One Block-Size Data"),
1715*00b67f09SDavid van Moolenbroek 			"0xE8E99D0F45237D786D6BBAA7965C7808BBFF1A91",
1716*00b67f09SDavid van Moolenbroek 			1
1717*00b67f09SDavid van Moolenbroek 		},
1718*00b67f09SDavid van Moolenbroek #endif
1719*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
1720*00b67f09SDavid van Moolenbroek 	};
1721*00b67f09SDavid van Moolenbroek 
1722*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
1723*00b67f09SDavid van Moolenbroek 
1724*00b67f09SDavid van Moolenbroek 	hash_test_key_t test_keys[] = {
1725*00b67f09SDavid van Moolenbroek 		/* Key 1 */
1726*00b67f09SDavid van Moolenbroek 		{ "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1727*00b67f09SDavid van Moolenbroek 		  "\x0b\x0b\x0b\x0b\x0b\x0b", 16 },
1728*00b67f09SDavid van Moolenbroek 		/* Key 2 */
1729*00b67f09SDavid van Moolenbroek 		{ "Jefe", 4 },
1730*00b67f09SDavid van Moolenbroek 		/* Key 3 */
1731*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1732*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa", 16 },
1733*00b67f09SDavid van Moolenbroek 		/* Key 4 */
1734*00b67f09SDavid van Moolenbroek 		{ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
1735*00b67f09SDavid van Moolenbroek 		  "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
1736*00b67f09SDavid van Moolenbroek 		  "\x15\x16\x17\x18\x19", 25 },
1737*00b67f09SDavid van Moolenbroek #if 0
1738*00b67f09SDavid van Moolenbroek 		/* Key 5 */
1739*00b67f09SDavid van Moolenbroek 		{ "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1740*00b67f09SDavid van Moolenbroek 		  "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 },
1741*00b67f09SDavid van Moolenbroek 		/* Key 6 */
1742*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1743*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1744*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1745*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1746*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1747*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1748*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1749*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1750*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1751*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1752*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1753*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1754*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1755*00b67f09SDavid van Moolenbroek 		/* Key 7 */
1756*00b67f09SDavid van Moolenbroek 		{ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1757*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1758*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1759*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1760*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1761*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1762*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1763*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1764*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1765*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1766*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1767*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1768*00b67f09SDavid van Moolenbroek 		  "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 },
1769*00b67f09SDavid van Moolenbroek #endif
1770*00b67f09SDavid van Moolenbroek 		{ "", 0 }
1771*00b67f09SDavid van Moolenbroek 	};
1772*00b67f09SDavid van Moolenbroek 
1773*00b67f09SDavid van Moolenbroek 	hash_test_key_t *test_key = test_keys;
1774*00b67f09SDavid van Moolenbroek 
1775*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
1776*00b67f09SDavid van Moolenbroek 		memmove(buffer, test_key->key, test_key->len);
1777*00b67f09SDavid van Moolenbroek 		isc_hmacmd5_init(&hmacmd5, buffer, test_key->len);
1778*00b67f09SDavid van Moolenbroek 		isc_hmacmd5_update(&hmacmd5,
1779*00b67f09SDavid van Moolenbroek 				   (const isc_uint8_t *) testcase->input,
1780*00b67f09SDavid van Moolenbroek 				   testcase->input_len);
1781*00b67f09SDavid van Moolenbroek 		isc_hmacmd5_sign(&hmacmd5, digest);
1782*00b67f09SDavid van Moolenbroek 		tohexstr(digest, ISC_MD5_DIGESTLENGTH, str);
1783*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
1784*00b67f09SDavid van Moolenbroek 
1785*00b67f09SDavid van Moolenbroek 		testcase++;
1786*00b67f09SDavid van Moolenbroek 		test_key++;
1787*00b67f09SDavid van Moolenbroek 	}
1788*00b67f09SDavid van Moolenbroek }
1789*00b67f09SDavid van Moolenbroek 
1790*00b67f09SDavid van Moolenbroek /* CRC64 Test */
1791*00b67f09SDavid van Moolenbroek ATF_TC(isc_crc64);
ATF_TC_HEAD(isc_crc64,tc)1792*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isc_crc64, tc) {
1793*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "64-bit cyclic redundancy check");
1794*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isc_crc64,tc)1795*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isc_crc64, tc) {
1796*00b67f09SDavid van Moolenbroek 	isc_uint64_t crc;
1797*00b67f09SDavid van Moolenbroek 	int i;
1798*00b67f09SDavid van Moolenbroek 
1799*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
1800*00b67f09SDavid van Moolenbroek 
1801*00b67f09SDavid van Moolenbroek 	hash_testcase_t testcases[] = {
1802*00b67f09SDavid van Moolenbroek 		{
1803*00b67f09SDavid van Moolenbroek 			TEST_INPUT(""),
1804*00b67f09SDavid van Moolenbroek 			"0x0000000000000000", 1
1805*00b67f09SDavid van Moolenbroek 		},
1806*00b67f09SDavid van Moolenbroek 		{
1807*00b67f09SDavid van Moolenbroek 			TEST_INPUT("a"),
1808*00b67f09SDavid van Moolenbroek 			"0x9AA9C0AC27F473CE", 1
1809*00b67f09SDavid van Moolenbroek 		},
1810*00b67f09SDavid van Moolenbroek 		{
1811*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abc"),
1812*00b67f09SDavid van Moolenbroek 			"0x0297F4F93A818B04", 1
1813*00b67f09SDavid van Moolenbroek 		},
1814*00b67f09SDavid van Moolenbroek 		{
1815*00b67f09SDavid van Moolenbroek 			TEST_INPUT("message digest"),
1816*00b67f09SDavid van Moolenbroek 			"0xF47B357AEAF97352", 1
1817*00b67f09SDavid van Moolenbroek 		},
1818*00b67f09SDavid van Moolenbroek 		{
1819*00b67f09SDavid van Moolenbroek 			TEST_INPUT("abcdefghijklmnopqrstuvwxyz"),
1820*00b67f09SDavid van Moolenbroek 			"0xA1AA8B21F979F059", 1
1821*00b67f09SDavid van Moolenbroek 		},
1822*00b67f09SDavid van Moolenbroek 		{
1823*00b67f09SDavid van Moolenbroek 			TEST_INPUT("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm"
1824*00b67f09SDavid van Moolenbroek 				   "nopqrstuvwxyz0123456789"),
1825*00b67f09SDavid van Moolenbroek 			"0xFBB6781EF7A86DA3", 1
1826*00b67f09SDavid van Moolenbroek 		},
1827*00b67f09SDavid van Moolenbroek 		{
1828*00b67f09SDavid van Moolenbroek 			TEST_INPUT("123456789012345678901234567890123456789"
1829*00b67f09SDavid van Moolenbroek 				   "01234567890123456789012345678901234567890"),
1830*00b67f09SDavid van Moolenbroek 			"0x4A87E7C873EBE581", 1
1831*00b67f09SDavid van Moolenbroek 		},
1832*00b67f09SDavid van Moolenbroek 		{ NULL, 0, NULL, 1 }
1833*00b67f09SDavid van Moolenbroek 	};
1834*00b67f09SDavid van Moolenbroek 
1835*00b67f09SDavid van Moolenbroek 	hash_testcase_t *testcase = testcases;
1836*00b67f09SDavid van Moolenbroek 
1837*00b67f09SDavid van Moolenbroek 	while (testcase->input != NULL && testcase->result != NULL) {
1838*00b67f09SDavid van Moolenbroek 		isc_crc64_init(&crc);
1839*00b67f09SDavid van Moolenbroek 		for(i = 0; i < testcase->repeats; i++) {
1840*00b67f09SDavid van Moolenbroek 			isc_crc64_update(&crc,
1841*00b67f09SDavid van Moolenbroek 				       (const isc_uint8_t *) testcase->input,
1842*00b67f09SDavid van Moolenbroek 				       testcase->input_len);
1843*00b67f09SDavid van Moolenbroek 		}
1844*00b67f09SDavid van Moolenbroek 		isc_crc64_final(&crc);
1845*00b67f09SDavid van Moolenbroek 		tohexstr((unsigned char *) &crc, sizeof(crc), str);
1846*00b67f09SDavid van Moolenbroek 		ATF_CHECK_STREQ(str, testcase->result);
1847*00b67f09SDavid van Moolenbroek 
1848*00b67f09SDavid van Moolenbroek 		testcase++;
1849*00b67f09SDavid van Moolenbroek 	}
1850*00b67f09SDavid van Moolenbroek }
1851*00b67f09SDavid van Moolenbroek 
1852*00b67f09SDavid van Moolenbroek /*
1853*00b67f09SDavid van Moolenbroek  * Main
1854*00b67f09SDavid van Moolenbroek  */
ATF_TP_ADD_TCS(tp)1855*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TCS(tp) {
1856*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_hmacmd5);
1857*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_hmacsha1);
1858*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_hmacsha224);
1859*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_hmacsha256);
1860*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_hmacsha384);
1861*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_hmacsha512);
1862*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_md5);
1863*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_sha1);
1864*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_sha224);
1865*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_sha256);
1866*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_sha384);
1867*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_sha512);
1868*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, isc_crc64);
1869*00b67f09SDavid van Moolenbroek 	return (atf_no_error());
1870*00b67f09SDavid van Moolenbroek }
1871*00b67f09SDavid van Moolenbroek 
1872