1 /* $NetBSD: hash_test.c,v 1.6 2014/12/10 04:37:53 christos Exp $ */
4 * Copyright (C) 2004-2007, 2014 Internet Systems Consortium, Inc. ("ISC")
5 * Copyright (C) 2000, 2001 Internet Software Consortium.
7 * Permission to use, copy, modify, and/or distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
11 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
20 /* Id: hash_test.c,v 1.19 2007/06/19 23:46:59 tbox Exp */
28 #include <isc/hmacmd5.h>
29 #include <isc/hmacsha.h>
33 #include <isc/string.h>
36 print_digest(const char *s
, const char *hash
, unsigned char *d
,
41 printf("hash (%s) %s:\n\t", hash
, s
);
42 for (i
= 0; i
< words
; i
++) {
44 for (j
= 0; j
< 4; j
++)
45 printf("%02x", d
[i
* 4 + j
]);
51 main(int argc
, char **argv
) {
55 isc_hmacmd5_t hmacmd5
;
56 isc_hmacsha1_t hmacsha1
;
57 isc_hmacsha224_t hmacsha224
;
58 isc_hmacsha256_t hmacsha256
;
59 isc_hmacsha384_t hmacsha384
;
60 isc_hmacsha512_t hmacsha512
;
61 unsigned char digest
[ISC_SHA512_DIGESTLENGTH
];
62 unsigned char buffer
[1024];
64 unsigned char key
[20];
71 memmove(buffer
, s
, strlen(s
));
72 isc_sha1_update(&sha1
, buffer
, strlen(s
));
73 isc_sha1_final(&sha1
, digest
);
74 print_digest(s
, "sha1", digest
, ISC_SHA1_DIGESTLENGTH
/4);
76 s
= "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
78 memmove(buffer
, s
, strlen(s
));
79 isc_sha1_update(&sha1
, buffer
, strlen(s
));
80 isc_sha1_final(&sha1
, digest
);
81 print_digest(s
, "sha1", digest
, ISC_SHA1_DIGESTLENGTH
/4);
84 isc_sha224_init(&sha224
);
85 memmove(buffer
, s
, strlen(s
));
86 isc_sha224_update(&sha224
, buffer
, strlen(s
));
87 isc_sha224_final(digest
, &sha224
);
88 print_digest(s
, "sha224", digest
, ISC_SHA224_DIGESTLENGTH
/4);
90 s
= "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
91 isc_sha224_init(&sha224
);
92 memmove(buffer
, s
, strlen(s
));
93 isc_sha224_update(&sha224
, buffer
, strlen(s
));
94 isc_sha224_final(digest
, &sha224
);
95 print_digest(s
, "sha224", digest
, ISC_SHA224_DIGESTLENGTH
/4);
99 memmove(buffer
, s
, strlen(s
));
100 isc_md5_update(&md5
, buffer
, strlen(s
));
101 isc_md5_final(&md5
, digest
);
102 print_digest(s
, "md5", digest
, 4);
105 * The 3 HMAC-MD5 examples from RFC2104
108 memset(key
, 0x0b, 16);
109 isc_hmacmd5_init(&hmacmd5
, key
, 16);
110 memmove(buffer
, s
, strlen(s
));
111 isc_hmacmd5_update(&hmacmd5
, buffer
, strlen(s
));
112 isc_hmacmd5_sign(&hmacmd5
, digest
);
113 print_digest(s
, "hmacmd5", digest
, 4);
115 s
= "what do ya want for nothing?";
116 strcpy((char *)key
, "Jefe");
117 isc_hmacmd5_init(&hmacmd5
, key
, 4);
118 memmove(buffer
, s
, strlen(s
));
119 isc_hmacmd5_update(&hmacmd5
, buffer
, strlen(s
));
120 isc_hmacmd5_sign(&hmacmd5
, digest
);
121 print_digest(s
, "hmacmd5", digest
, 4);
123 s
= "\335\335\335\335\335\335\335\335\335\335"
124 "\335\335\335\335\335\335\335\335\335\335"
125 "\335\335\335\335\335\335\335\335\335\335"
126 "\335\335\335\335\335\335\335\335\335\335"
127 "\335\335\335\335\335\335\335\335\335\335";
128 memset(key
, 0xaa, 16);
129 isc_hmacmd5_init(&hmacmd5
, key
, 16);
130 memmove(buffer
, s
, strlen(s
));
131 isc_hmacmd5_update(&hmacmd5
, buffer
, strlen(s
));
132 isc_hmacmd5_sign(&hmacmd5
, digest
);
133 print_digest(s
, "hmacmd5", digest
, 4);
136 * The 3 HMAC-SHA1 examples from RFC4634.
139 memset(key
, 0x0b, 20);
140 isc_hmacsha1_init(&hmacsha1
, key
, 20);
141 memmove(buffer
, s
, strlen(s
));
142 isc_hmacsha1_update(&hmacsha1
, buffer
, strlen(s
));
143 isc_hmacsha1_sign(&hmacsha1
, digest
, ISC_SHA1_DIGESTLENGTH
);
144 print_digest(s
, "hmacsha1", digest
, ISC_SHA1_DIGESTLENGTH
/4);
146 s
= "what do ya want for nothing?";
147 strcpy((char *)key
, "Jefe");
148 isc_hmacsha1_init(&hmacsha1
, key
, 4);
149 memmove(buffer
, s
, strlen(s
));
150 isc_hmacsha1_update(&hmacsha1
, buffer
, strlen(s
));
151 isc_hmacsha1_sign(&hmacsha1
, digest
, ISC_SHA1_DIGESTLENGTH
);
152 print_digest(s
, "hmacsha1", digest
, ISC_SHA1_DIGESTLENGTH
/4);
154 s
= "\335\335\335\335\335\335\335\335\335\335"
155 "\335\335\335\335\335\335\335\335\335\335"
156 "\335\335\335\335\335\335\335\335\335\335"
157 "\335\335\335\335\335\335\335\335\335\335"
158 "\335\335\335\335\335\335\335\335\335\335";
159 memset(key
, 0xaa, 20);
160 isc_hmacsha1_init(&hmacsha1
, key
, 20);
161 memmove(buffer
, s
, strlen(s
));
162 isc_hmacsha1_update(&hmacsha1
, buffer
, strlen(s
));
163 isc_hmacsha1_sign(&hmacsha1
, digest
, ISC_SHA1_DIGESTLENGTH
);
164 print_digest(s
, "hmacsha1", digest
, ISC_SHA1_DIGESTLENGTH
/4);
167 * The 3 HMAC-SHA224 examples from RFC4634.
170 memset(key
, 0x0b, 20);
171 isc_hmacsha224_init(&hmacsha224
, key
, 20);
172 memmove(buffer
, s
, strlen(s
));
173 isc_hmacsha224_update(&hmacsha224
, buffer
, strlen(s
));
174 isc_hmacsha224_sign(&hmacsha224
, digest
, ISC_SHA224_DIGESTLENGTH
);
175 print_digest(s
, "hmacsha224", digest
, ISC_SHA224_DIGESTLENGTH
/4);
177 s
= "what do ya want for nothing?";
178 strcpy((char *)key
, "Jefe");
179 isc_hmacsha224_init(&hmacsha224
, key
, 4);
180 memmove(buffer
, s
, strlen(s
));
181 isc_hmacsha224_update(&hmacsha224
, buffer
, strlen(s
));
182 isc_hmacsha224_sign(&hmacsha224
, digest
, ISC_SHA224_DIGESTLENGTH
);
183 print_digest(s
, "hmacsha224", digest
, ISC_SHA224_DIGESTLENGTH
/4);
185 s
= "\335\335\335\335\335\335\335\335\335\335"
186 "\335\335\335\335\335\335\335\335\335\335"
187 "\335\335\335\335\335\335\335\335\335\335"
188 "\335\335\335\335\335\335\335\335\335\335"
189 "\335\335\335\335\335\335\335\335\335\335";
190 memset(key
, 0xaa, 20);
191 isc_hmacsha224_init(&hmacsha224
, key
, 20);
192 memmove(buffer
, s
, strlen(s
));
193 isc_hmacsha224_update(&hmacsha224
, buffer
, strlen(s
));
194 isc_hmacsha224_sign(&hmacsha224
, digest
, ISC_SHA224_DIGESTLENGTH
);
195 print_digest(s
, "hmacsha224", digest
, ISC_SHA224_DIGESTLENGTH
/4);
198 * The 3 HMAC-SHA256 examples from RFC4634.
201 memset(key
, 0x0b, 20);
202 isc_hmacsha256_init(&hmacsha256
, key
, 20);
203 memmove(buffer
, s
, strlen(s
));
204 isc_hmacsha256_update(&hmacsha256
, buffer
, strlen(s
));
205 isc_hmacsha256_sign(&hmacsha256
, digest
, ISC_SHA256_DIGESTLENGTH
);
206 print_digest(s
, "hmacsha256", digest
, ISC_SHA256_DIGESTLENGTH
/4);
208 s
= "what do ya want for nothing?";
209 strcpy((char *)key
, "Jefe");
210 isc_hmacsha256_init(&hmacsha256
, key
, 4);
211 memmove(buffer
, s
, strlen(s
));
212 isc_hmacsha256_update(&hmacsha256
, buffer
, strlen(s
));
213 isc_hmacsha256_sign(&hmacsha256
, digest
, ISC_SHA256_DIGESTLENGTH
);
214 print_digest(s
, "hmacsha256", digest
, ISC_SHA256_DIGESTLENGTH
/4);
216 s
= "\335\335\335\335\335\335\335\335\335\335"
217 "\335\335\335\335\335\335\335\335\335\335"
218 "\335\335\335\335\335\335\335\335\335\335"
219 "\335\335\335\335\335\335\335\335\335\335"
220 "\335\335\335\335\335\335\335\335\335\335";
221 memset(key
, 0xaa, 20);
222 isc_hmacsha256_init(&hmacsha256
, key
, 20);
223 memmove(buffer
, s
, strlen(s
));
224 isc_hmacsha256_update(&hmacsha256
, buffer
, strlen(s
));
225 isc_hmacsha256_sign(&hmacsha256
, digest
, ISC_SHA256_DIGESTLENGTH
);
226 print_digest(s
, "hmacsha256", digest
, ISC_SHA256_DIGESTLENGTH
/4);
229 * The 3 HMAC-SHA384 examples from RFC4634.
232 memset(key
, 0x0b, 20);
233 isc_hmacsha384_init(&hmacsha384
, key
, 20);
234 memmove(buffer
, s
, strlen(s
));
235 isc_hmacsha384_update(&hmacsha384
, buffer
, strlen(s
));
236 isc_hmacsha384_sign(&hmacsha384
, digest
, ISC_SHA384_DIGESTLENGTH
);
237 print_digest(s
, "hmacsha384", digest
, ISC_SHA384_DIGESTLENGTH
/4);
239 s
= "what do ya want for nothing?";
240 strcpy((char *)key
, "Jefe");
241 isc_hmacsha384_init(&hmacsha384
, key
, 4);
242 memmove(buffer
, s
, strlen(s
));
243 isc_hmacsha384_update(&hmacsha384
, buffer
, strlen(s
));
244 isc_hmacsha384_sign(&hmacsha384
, digest
, ISC_SHA384_DIGESTLENGTH
);
245 print_digest(s
, "hmacsha384", digest
, ISC_SHA384_DIGESTLENGTH
/4);
247 s
= "\335\335\335\335\335\335\335\335\335\335"
248 "\335\335\335\335\335\335\335\335\335\335"
249 "\335\335\335\335\335\335\335\335\335\335"
250 "\335\335\335\335\335\335\335\335\335\335"
251 "\335\335\335\335\335\335\335\335\335\335";
252 memset(key
, 0xaa, 20);
253 isc_hmacsha384_init(&hmacsha384
, key
, 20);
254 memmove(buffer
, s
, strlen(s
));
255 isc_hmacsha384_update(&hmacsha384
, buffer
, strlen(s
));
256 isc_hmacsha384_sign(&hmacsha384
, digest
, ISC_SHA384_DIGESTLENGTH
);
257 print_digest(s
, "hmacsha384", digest
, ISC_SHA384_DIGESTLENGTH
/4);
260 * The 3 HMAC-SHA512 examples from RFC4634.
263 memset(key
, 0x0b, 20);
264 isc_hmacsha512_init(&hmacsha512
, key
, 20);
265 memmove(buffer
, s
, strlen(s
));
266 isc_hmacsha512_update(&hmacsha512
, buffer
, strlen(s
));
267 isc_hmacsha512_sign(&hmacsha512
, digest
, ISC_SHA512_DIGESTLENGTH
);
268 print_digest(s
, "hmacsha512", digest
, ISC_SHA512_DIGESTLENGTH
/4);
270 s
= "what do ya want for nothing?";
271 strcpy((char *)key
, "Jefe");
272 isc_hmacsha512_init(&hmacsha512
, key
, 4);
273 memmove(buffer
, s
, strlen(s
));
274 isc_hmacsha512_update(&hmacsha512
, buffer
, strlen(s
));
275 isc_hmacsha512_sign(&hmacsha512
, digest
, ISC_SHA512_DIGESTLENGTH
);
276 print_digest(s
, "hmacsha512", digest
, ISC_SHA512_DIGESTLENGTH
/4);
278 s
= "\335\335\335\335\335\335\335\335\335\335"
279 "\335\335\335\335\335\335\335\335\335\335"
280 "\335\335\335\335\335\335\335\335\335\335"
281 "\335\335\335\335\335\335\335\335\335\335"
282 "\335\335\335\335\335\335\335\335\335\335";
283 memset(key
, 0xaa, 20);
284 isc_hmacsha512_init(&hmacsha512
, key
, 20);
285 memmove(buffer
, s
, strlen(s
));
286 isc_hmacsha512_update(&hmacsha512
, buffer
, strlen(s
));
287 isc_hmacsha512_sign(&hmacsha512
, digest
, ISC_SHA512_DIGESTLENGTH
);
288 print_digest(s
, "hmacsha512", digest
, ISC_SHA512_DIGESTLENGTH
/4);