1275970Scy/* 2275970Scy * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC") 3275970Scy * 4275970Scy * Permission to use, copy, modify, and/or distribute this software for any 5275970Scy * purpose with or without fee is hereby granted, provided that the above 6275970Scy * copyright notice and this permission notice appear in all copies. 7275970Scy * 8275970Scy * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 9275970Scy * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10275970Scy * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 11275970Scy * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12275970Scy * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 13275970Scy * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14275970Scy * PERFORMANCE OF THIS SOFTWARE. 15275970Scy */ 16275970Scy 17275970Scy/* $Id$ */ 18275970Scy 19275970Scy/* ! \file */ 20275970Scy 21275970Scy#include <config.h> 22275970Scy 23275970Scy#include <atf-c.h> 24275970Scy 25275970Scy#include <stdio.h> 26275970Scy#include <string.h> 27275970Scy 28275970Scy#include <isc/hmacmd5.h> 29275970Scy#include <isc/hmacsha.h> 30275970Scy#include <isc/md5.h> 31275970Scy#include <isc/sha1.h> 32275970Scy#include <isc/util.h> 33275970Scy#include <isc/string.h> 34275970Scy 35275970Scy/* 36275970Scy * Test data from RFC6234 37275970Scy */ 38275970Scy 39275970Scyunsigned char digest[ISC_SHA512_DIGESTLENGTH]; 40275970Scyunsigned char buffer[1024]; 41275970Scyconst char *s; 42275970Scychar str[ISC_SHA512_DIGESTLENGTH]; 43275970Scyunsigned char key[20]; 44275970Scyint i = 0; 45275970Scy 46275970Scyisc_result_t 47275970Scytohexstr(unsigned char *d, unsigned int len, char *out); 48275970Scy/* 49275970Scy * Precondition: a hexadecimal number in *d, the length of that number in len, 50275970Scy * and a pointer to a character array to put the output (*out). 51275970Scy * Postcondition: A String representation of the given hexadecimal number is 52275970Scy * placed into the array *out 53275970Scy * 54275970Scy * 'out' MUST point to an array of at least len / 2 + 1 55275970Scy * 56275970Scy * Return values: ISC_R_SUCCESS if the operation is sucessful 57275970Scy */ 58275970Scy 59275970Scyisc_result_t 60275970Scytohexstr(unsigned char *d, unsigned int len, char *out) { 61275970Scy 62275970Scy out[0]='\0'; 63275970Scy char c_ret[] = "AA"; 64275970Scy unsigned int i; 65275970Scy strcat(out, "0x"); 66275970Scy for (i = 0; i < len; i++) { 67275970Scy sprintf(c_ret, "%02X", d[i]); 68275970Scy strcat(out, c_ret); 69275970Scy } 70275970Scy strcat(out, "\0"); 71275970Scy return (ISC_R_SUCCESS); 72275970Scy} 73275970Scy 74275970Scy 75275970Scy#define TEST_INPUT(x) (x), sizeof(x)-1 76275970Scy 77275970Scytypedef struct hash_testcase { 78275970Scy const char *input; 79275970Scy size_t input_len; 80275970Scy const char *result; 81275970Scy int repeats; 82275970Scy} hash_testcase_t; 83275970Scy 84275970Scytypedef struct hash_test_key { 85275970Scy const char *key; 86275970Scy const int len; 87275970Scy} hash_test_key_t; 88275970Scy 89275970Scy/* non-hmac tests */ 90275970Scy 91275970ScyATF_TC(isc_sha1); 92275970ScyATF_TC_HEAD(isc_sha1, tc) { 93275970Scy atf_tc_set_md_var(tc, "descr", "sha1 examples from RFC4634"); 94275970Scy} 95275970ScyATF_TC_BODY(isc_sha1, tc) { 96275970Scy isc_sha1_t sha1; 97275970Scy 98275970Scy UNUSED(tc); 99275970Scy 100275970Scy /* 101275970Scy * These are the various test vectors. All of these are passed 102275970Scy * through the hash function and the results are compared to the 103275970Scy * result specified here. 104275970Scy */ 105275970Scy hash_testcase_t testcases[] = { 106275970Scy /* Test 1 */ 107275970Scy { 108275970Scy TEST_INPUT("abc"), 109275970Scy "0xA9993E364706816ABA3E25717850C26C9CD0D89D", 110275970Scy 1 111275970Scy }, 112275970Scy /* Test 2 */ 113275970Scy { 114275970Scy TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijk" 115275970Scy "ljklmklmnlmnomnopnopq"), 116275970Scy "0x84983E441C3BD26EBAAE4AA1F95129E5E54670F1", 117275970Scy 1 118275970Scy }, 119275970Scy /* Test 3 */ 120275970Scy { 121275970Scy TEST_INPUT("a") /* times 1000000 */, 122275970Scy "0x34AA973CD4C4DAA4F61EEB2BDBAD27316534016F", 123275970Scy 1000000 124275970Scy }, 125275970Scy /* Test 4 -- exact multiple of 512 bits */ 126275970Scy { 127275970Scy TEST_INPUT("01234567012345670123456701234567"), 128275970Scy "0xDEA356A2CDDD90C7A7ECEDC5EBB563934F460452", 129275970Scy 20 /* 20 times */ 130275970Scy }, 131275970Scy#if 0 132275970Scy /* Test 5 -- optional feature, not implemented */ 133275970Scy { 134275970Scy TEST_INPUT(""), 135275970Scy /* "extrabits": 0x98 , "numberextrabits": 5 */ 136275970Scy "0x29826B003B906E660EFF4027CE98AF3531AC75BA", 137275970Scy 1 138275970Scy }, 139275970Scy#endif 140275970Scy /* Test 6 */ 141275970Scy { 142275970Scy TEST_INPUT("\x5e"), 143275970Scy "0x5E6F80A34A9798CAFC6A5DB96CC57BA4C4DB59C2", 144275970Scy 1 145275970Scy }, 146275970Scy#if 0 147275970Scy /* Test 7 -- optional feature, not implemented */ 148275970Scy { 149275970Scy TEST_INPUT("\x49\xb2\xae\xc2\x59\x4b\xbe\x3a" 150275970Scy "\x3b\x11\x75\x42\xd9\x4a\xc8"), 151275970Scy /* "extrabits": 0x80, "numberextrabits": 3 */ 152275970Scy "0x6239781E03729919C01955B3FFA8ACB60B988340", 1 }, 153275970Scy#endif 154275970Scy /* Test 8 */ 155275970Scy { 156275970Scy TEST_INPUT("\x9a\x7d\xfd\xf1\xec\xea\xd0\x6e\xd6\x46" 157275970Scy "\xaa\x55\xfe\x75\x71\x46"), 158275970Scy "0x82ABFF6605DBE1C17DEF12A394FA22A82B544A35", 159275970Scy 1 160275970Scy }, 161275970Scy#if 0 162275970Scy /* Test 9 -- optional feature, not implemented */ 163275970Scy { 164275970Scy TEST_INPUT("\x65\xf9\x32\x99\x5b\xa4\xce\x2c\xb1\xb4" 165275970Scy "\xa2\xe7\x1a\xe7\x02\x20\xaa\xce\xc8\x96" 166275970Scy "\x2d\xd4\x49\x9c\xbd\x7c\x88\x7a\x94\xea" 167275970Scy "\xaa\x10\x1e\xa5\xaa\xbc\x52\x9b\x4e\x7e" 168275970Scy "\x43\x66\x5a\x5a\xf2\xcd\x03\xfe\x67\x8e" 169275970Scy "\xa6\xa5\x00\x5b\xba\x3b\x08\x22\x04\xc2" 170275970Scy "\x8b\x91\x09\xf4\x69\xda\xc9\x2a\xaa\xb3" 171275970Scy "\xaa\x7c\x11\xa1\xb3\x2a"), 172275970Scy /* "extrabits": 0xE0 , "numberextrabits": 3 */ 173275970Scy "0x8C5B2A5DDAE5A97FC7F9D85661C672ADBF7933D4", 174275970Scy 1 175275970Scy }, 176275970Scy#endif 177275970Scy /* Test 10 */ 178275970Scy { 179275970Scy TEST_INPUT("\xf7\x8f\x92\x14\x1b\xcd\x17\x0a\xe8\x9b" 180275970Scy "\x4f\xba\x15\xa1\xd5\x9f\x3f\xd8\x4d\x22" 181275970Scy "\x3c\x92\x51\xbd\xac\xbb\xae\x61\xd0\x5e" 182275970Scy "\xd1\x15\xa0\x6a\x7c\xe1\x17\xb7\xbe\xea" 183275970Scy "\xd2\x44\x21\xde\xd9\xc3\x25\x92\xbd\x57" 184275970Scy "\xed\xea\xe3\x9c\x39\xfa\x1f\xe8\x94\x6a" 185275970Scy "\x84\xd0\xcf\x1f\x7b\xee\xad\x17\x13\xe2" 186275970Scy "\xe0\x95\x98\x97\x34\x7f\x67\xc8\x0b\x04" 187275970Scy "\x00\xc2\x09\x81\x5d\x6b\x10\xa6\x83\x83" 188275970Scy "\x6f\xd5\x56\x2a\x56\xca\xb1\xa2\x8e\x81" 189275970Scy "\xb6\x57\x66\x54\x63\x1c\xf1\x65\x66\xb8" 190275970Scy "\x6e\x3b\x33\xa1\x08\xb0\x53\x07\xc0\x0a" 191275970Scy "\xff\x14\xa7\x68\xed\x73\x50\x60\x6a\x0f" 192275970Scy "\x85\xe6\xa9\x1d\x39\x6f\x5b\x5c\xbe\x57" 193275970Scy "\x7f\x9b\x38\x80\x7c\x7d\x52\x3d\x6d\x79" 194275970Scy "\x2f\x6e\xbc\x24\xa4\xec\xf2\xb3\xa4\x27" 195275970Scy "\xcd\xbb\xfb"), 196275970Scy "0xCB0082C8F197D260991BA6A460E76E202BAD27B3", 197275970Scy 1 198275970Scy }, 199275970Scy { NULL, 0, NULL, 1 } 200275970Scy }; 201275970Scy 202275970Scy hash_testcase_t *testcase = testcases; 203275970Scy 204275970Scy while (testcase->input != NULL && testcase->result != NULL) { 205275970Scy isc_sha1_init(&sha1); 206275970Scy for(i = 0; i < testcase->repeats; i++) { 207275970Scy isc_sha1_update(&sha1, 208275970Scy (const isc_uint8_t *) testcase->input, 209275970Scy testcase->input_len); 210275970Scy } 211275970Scy isc_sha1_final(&sha1, digest); 212275970Scy tohexstr(digest, ISC_SHA1_DIGESTLENGTH, str); 213275970Scy ATF_CHECK_STREQ(str, testcase->result); 214275970Scy 215275970Scy testcase++; 216275970Scy } 217275970Scy} 218275970Scy 219275970Scy 220275970ScyATF_TC(isc_sha224); 221275970ScyATF_TC_HEAD(isc_sha224, tc) { 222275970Scy atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634"); 223275970Scy} 224275970ScyATF_TC_BODY(isc_sha224, tc) { 225275970Scy isc_sha224_t sha224; 226275970Scy 227275970Scy UNUSED(tc); 228275970Scy 229275970Scy /* 230275970Scy * These are the various test vectors. All of these are passed 231275970Scy * through the hash function and the results are compared to the 232275970Scy * result specified here. 233275970Scy */ 234275970Scy hash_testcase_t testcases[] = { 235275970Scy /* Test 1 */ 236275970Scy { 237275970Scy TEST_INPUT("abc"), 238275970Scy "0x23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7" 239275970Scy "E36C9DA7", 240275970Scy 1 241275970Scy }, 242275970Scy /* Test 2 */ 243275970Scy { 244275970Scy TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijklj" 245275970Scy "klmklmnlmnomnopnopq"), 246275970Scy "0x75388B16512776CC5DBA5DA1FD890150B0C6455CB4F58B" 247275970Scy "1952522525", 248275970Scy 1 249275970Scy }, 250275970Scy /* Test 3 */ 251275970Scy { 252275970Scy TEST_INPUT("a"), 253275970Scy "0x20794655980C91D8BBB4C1EA97618A4BF03F42581948B2" 254275970Scy "EE4EE7AD67", 255275970Scy 1000000 256275970Scy }, 257275970Scy /* Test 4 */ 258275970Scy { 259275970Scy TEST_INPUT("01234567012345670123456701234567"), 260275970Scy "0x567F69F168CD7844E65259CE658FE7AADFA25216E68ECA" 261275970Scy "0EB7AB8262", 262275970Scy 20 263275970Scy }, 264275970Scy#if 0 265275970Scy /* Test 5 -- unimplemented optional functionality */ 266275970Scy { 267275970Scy TEST_INPUT(""), 268275970Scy "0xXXX", 269275970Scy 1 270275970Scy }, 271275970Scy#endif 272275970Scy /* Test 6 */ 273275970Scy { 274275970Scy TEST_INPUT("\x07"), 275275970Scy "0x00ECD5F138422B8AD74C9799FD826C531BAD2FCABC7450" 276275970Scy "BEE2AA8C2A", 277275970Scy 1 278275970Scy }, 279275970Scy#if 0 280275970Scy /* Test 7 -- unimplemented optional functionality */ 281275970Scy { 282275970Scy TEST_INPUT(""), 283275970Scy "0xXXX", 284275970Scy 1 285275970Scy }, 286275970Scy#endif 287275970Scy /* Test 8 */ 288275970Scy { 289275970Scy TEST_INPUT("\x18\x80\x40\x05\xdd\x4f\xbd\x15\x56\x29" 290275970Scy "\x9d\x6f\x9d\x93\xdf\x62"), 291275970Scy "0xDF90D78AA78821C99B40BA4C966921ACCD8FFB1E98AC38" 292275970Scy "8E56191DB1", 293275970Scy 1 294275970Scy }, 295275970Scy#if 0 296275970Scy /* Test 9 */ 297275970Scy { 298275970Scy TEST_INPUT(""), 299275970Scy "0xXXX", 300275970Scy 1 301275970Scy }, 302275970Scy#endif 303275970Scy /* Test 10 */ 304275970Scy { 305275970Scy TEST_INPUT("\x55\xb2\x10\x07\x9c\x61\xb5\x3a\xdd\x52" 306275970Scy "\x06\x22\xd1\xac\x97\xd5\xcd\xbe\x8c\xb3" 307275970Scy "\x3a\xa0\xae\x34\x45\x17\xbe\xe4\xd7\xba" 308275970Scy "\x09\xab\xc8\x53\x3c\x52\x50\x88\x7a\x43" 309275970Scy "\xbe\xbb\xac\x90\x6c\x2e\x18\x37\xf2\x6b" 310275970Scy "\x36\xa5\x9a\xe3\xbe\x78\x14\xd5\x06\x89" 311275970Scy "\x6b\x71\x8b\x2a\x38\x3e\xcd\xac\x16\xb9" 312275970Scy "\x61\x25\x55\x3f\x41\x6f\xf3\x2c\x66\x74" 313275970Scy "\xc7\x45\x99\xa9\x00\x53\x86\xd9\xce\x11" 314275970Scy "\x12\x24\x5f\x48\xee\x47\x0d\x39\x6c\x1e" 315275970Scy "\xd6\x3b\x92\x67\x0c\xa5\x6e\xc8\x4d\xee" 316275970Scy "\xa8\x14\xb6\x13\x5e\xca\x54\x39\x2b\xde" 317275970Scy "\xdb\x94\x89\xbc\x9b\x87\x5a\x8b\xaf\x0d" 318275970Scy "\xc1\xae\x78\x57\x36\x91\x4a\xb7\xda\xa2" 319275970Scy "\x64\xbc\x07\x9d\x26\x9f\x2c\x0d\x7e\xdd" 320275970Scy "\xd8\x10\xa4\x26\x14\x5a\x07\x76\xf6\x7c" 321275970Scy "\x87\x82\x73"), 322275970Scy "0x0B31894EC8937AD9B91BDFBCBA294D9ADEFAA18E09305E" 323275970Scy "9F20D5C3A4", 324275970Scy 1 325275970Scy }, 326275970Scy { NULL, 0, NULL, 1 } 327275970Scy }; 328275970Scy 329275970Scy hash_testcase_t *testcase = testcases; 330275970Scy 331275970Scy while (testcase->input != NULL && testcase->result != NULL) { 332275970Scy isc_sha224_init(&sha224); 333275970Scy for(i = 0; i < testcase->repeats; i++) { 334275970Scy isc_sha224_update(&sha224, 335275970Scy (const isc_uint8_t *) testcase->input, 336275970Scy testcase->input_len); 337275970Scy } 338275970Scy isc_sha224_final(digest, &sha224); 339275970Scy /* 340275970Scy *API inconsistency BUG HERE 341275970Scy * in order to be consistant with the other isc_hash_final 342275970Scy * functions the call should be 343275970Scy * isc_sha224_final(&sha224, digest); 344275970Scy */ 345275970Scy tohexstr(digest, ISC_SHA224_DIGESTLENGTH, str); 346275970Scy ATF_CHECK_STREQ(str, testcase->result); 347275970Scy 348275970Scy testcase++; 349275970Scy } 350275970Scy 351275970Scy} 352275970Scy 353275970ScyATF_TC(isc_sha256); 354275970ScyATF_TC_HEAD(isc_sha256, tc) { 355275970Scy atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634"); 356275970Scy} 357275970ScyATF_TC_BODY(isc_sha256, tc) { 358275970Scy isc_sha256_t sha256; 359275970Scy 360275970Scy UNUSED(tc); 361275970Scy 362275970Scy /* 363275970Scy * These are the various test vectors. All of these are passed 364275970Scy * through the hash function and the results are compared to the 365275970Scy * result specified here. 366275970Scy */ 367275970Scy hash_testcase_t testcases[] = { 368275970Scy /* Test 1 */ 369275970Scy { 370275970Scy TEST_INPUT("abc"), 371275970Scy "0xBA7816BF8F01CFEA414140DE5DAE2223B00361A396177A" 372275970Scy "9CB410FF61F20015AD", 373275970Scy 1 374275970Scy }, 375275970Scy /* Test 2 */ 376275970Scy { 377275970Scy TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijkljk" 378275970Scy "lmklmnlmnomnopnopq"), 379275970Scy "0x248D6A61D20638B8E5C026930C3E6039A33CE45964FF21" 380275970Scy "67F6ECEDD419DB06C1", 381275970Scy 1 382275970Scy }, 383275970Scy /* Test 3 */ 384275970Scy { 385275970Scy TEST_INPUT("a"), 386275970Scy "0xCDC76E5C9914FB9281A1C7E284D73E67F1809A48A49720" 387275970Scy "0E046D39CCC7112CD0", 388275970Scy 1000000 }, 389275970Scy /* Test 4 */ 390275970Scy { 391275970Scy TEST_INPUT("01234567012345670123456701234567"), 392275970Scy "0x594847328451BDFA85056225462CC1D867D877FB388DF0" 393275970Scy "CE35F25AB5562BFBB5", 394275970Scy 20 395275970Scy }, 396275970Scy#if 0 397275970Scy /* Test 5 -- unimplemented optional functionality */ 398275970Scy { 399275970Scy TEST_INPUT(""), 400275970Scy "0xXXX", 401275970Scy 1 402275970Scy }, 403275970Scy#endif 404275970Scy /* Test 6 */ 405275970Scy { 406275970Scy TEST_INPUT("\x19"), 407275970Scy "0x68AA2E2EE5DFF96E3355E6C7EE373E3D6A4E17F75F9518" 408275970Scy "D843709C0C9BC3E3D4", 409275970Scy 1 410275970Scy }, 411275970Scy#if 0 412275970Scy /* Test 7 -- unimplemented optional functionality */ 413275970Scy { 414275970Scy TEST_INPUT(""), 415275970Scy "0xXXX", 416275970Scy 1 417275970Scy }, 418275970Scy#endif 419275970Scy /* Test 8 */ 420275970Scy { 421275970Scy TEST_INPUT("\xe3\xd7\x25\x70\xdc\xdd\x78\x7c\xe3" 422275970Scy "\x88\x7a\xb2\xcd\x68\x46\x52"), 423275970Scy "0x175EE69B02BA9B58E2B0A5FD13819CEA573F3940A94F82" 424275970Scy "5128CF4209BEABB4E8", 425275970Scy 1 426275970Scy }, 427275970Scy#if 0 428275970Scy /* Test 9 -- unimplemented optional functionality */ 429275970Scy { 430275970Scy TEST_INPUT(""), 431275970Scy "0xXXX", 432275970Scy 1 433275970Scy }, 434275970Scy#endif 435275970Scy /* Test 10 */ 436275970Scy { 437275970Scy TEST_INPUT("\x83\x26\x75\x4e\x22\x77\x37\x2f\x4f\xc1" 438275970Scy "\x2b\x20\x52\x7a\xfe\xf0\x4d\x8a\x05\x69" 439275970Scy "\x71\xb1\x1a\xd5\x71\x23\xa7\xc1\x37\x76" 440275970Scy "\x00\x00\xd7\xbe\xf6\xf3\xc1\xf7\xa9\x08" 441275970Scy "\x3a\xa3\x9d\x81\x0d\xb3\x10\x77\x7d\xab" 442275970Scy "\x8b\x1e\x7f\x02\xb8\x4a\x26\xc7\x73\x32" 443275970Scy "\x5f\x8b\x23\x74\xde\x7a\x4b\x5a\x58\xcb" 444275970Scy "\x5c\x5c\xf3\x5b\xce\xe6\xfb\x94\x6e\x5b" 445275970Scy "\xd6\x94\xfa\x59\x3a\x8b\xeb\x3f\x9d\x65" 446275970Scy "\x92\xec\xed\xaa\x66\xca\x82\xa2\x9d\x0c" 447275970Scy "\x51\xbc\xf9\x33\x62\x30\xe5\xd7\x84\xe4" 448275970Scy "\xc0\xa4\x3f\x8d\x79\xa3\x0a\x16\x5c\xba" 449275970Scy "\xbe\x45\x2b\x77\x4b\x9c\x71\x09\xa9\x7d" 450275970Scy "\x13\x8f\x12\x92\x28\x96\x6f\x6c\x0a\xdc" 451275970Scy "\x10\x6a\xad\x5a\x9f\xdd\x30\x82\x57\x69" 452275970Scy "\xb2\xc6\x71\xaf\x67\x59\xdf\x28\xeb\x39" 453275970Scy "\x3d\x54\xd6"), 454275970Scy "0x97DBCA7DF46D62C8A422C941DD7E835B8AD3361763F7E9" 455275970Scy "B2D95F4F0DA6E1CCBC", 456275970Scy 1 457275970Scy }, 458275970Scy { NULL, 0, NULL, 1 } 459275970Scy }; 460275970Scy 461275970Scy hash_testcase_t *testcase = testcases; 462275970Scy 463275970Scy while (testcase->input != NULL && testcase->result != NULL) { 464275970Scy isc_sha256_init(&sha256); 465275970Scy for(i = 0; i < testcase->repeats; i++) { 466275970Scy isc_sha256_update(&sha256, 467275970Scy (const isc_uint8_t *) testcase->input, 468275970Scy testcase->input_len); 469275970Scy } 470275970Scy isc_sha256_final(digest, &sha256); 471275970Scy /* 472275970Scy *API inconsistency BUG HERE 473275970Scy * in order to be consistant with the other isc_hash_final 474275970Scy * functions the call should be 475275970Scy * isc_sha224_final(&sha224, digest); 476275970Scy */ 477275970Scy tohexstr(digest, ISC_SHA256_DIGESTLENGTH, str); 478275970Scy ATF_CHECK_STREQ(str, testcase->result); 479275970Scy 480275970Scy testcase++; 481275970Scy } 482275970Scy 483275970Scy} 484275970Scy 485275970ScyATF_TC(isc_sha384); 486275970ScyATF_TC_HEAD(isc_sha384, tc) { 487275970Scy atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634"); 488275970Scy} 489275970ScyATF_TC_BODY(isc_sha384, tc) { 490275970Scy isc_sha384_t sha384; 491275970Scy 492275970Scy UNUSED(tc); 493275970Scy 494275970Scy /* 495275970Scy * These are the various test vectors. All of these are passed 496275970Scy * through the hash function and the results are compared to the 497275970Scy * result specified here. 498275970Scy */ 499275970Scy hash_testcase_t testcases[] = { 500275970Scy /* Test 1 */ 501275970Scy { 502275970Scy TEST_INPUT("abc"), 503275970Scy "0xCB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1" 504275970Scy "631A8B605A43FF5BED8086072BA1E7CC2358BAEC" 505275970Scy "A134C825A7", 506275970Scy 1 507275970Scy }, 508275970Scy /* Test 2 */ 509275970Scy { 510275970Scy TEST_INPUT("abcdefghbcdefghicdefghijdefghijkefghijkl" 511275970Scy "fghijklmghijklmnhijklmnoijklmnopjklmnopq" 512275970Scy "klmnopqrlmnopqrsmnopqrstnopqrstu"), 513275970Scy "0x09330C33F71147E83D192FC782CD1B4753111B173B3B05" 514275970Scy "D22FA08086E3B0F712FCC7C71A557E2DB966C3E9" 515275970Scy "FA91746039", 516275970Scy 1 517275970Scy }, 518275970Scy /* Test 3 */ 519275970Scy { 520275970Scy TEST_INPUT("a"), 521275970Scy "0x9D0E1809716474CB086E834E310A4A1CED149E9C00F248" 522275970Scy "527972CEC5704C2A5B07B8B3DC38ECC4EBAE97DD" 523275970Scy "D87F3D8985", 524275970Scy 1000000 525275970Scy }, 526275970Scy /* Test 4 */ 527275970Scy { 528275970Scy TEST_INPUT("01234567012345670123456701234567"), 529275970Scy "0x2FC64A4F500DDB6828F6A3430B8DD72A368EB7F3A8322A" 530275970Scy "70BC84275B9C0B3AB00D27A5CC3C2D224AA6B61A" 531275970Scy "0D79FB4596", 532275970Scy 20 533275970Scy }, 534275970Scy#if 0 535275970Scy /* Test 5 -- unimplemented optional functionality */ 536275970Scy { 537275970Scy TEST_INPUT(""), 538275970Scy "0xXXX", 539275970Scy 1 540275970Scy }, 541275970Scy#endif 542275970Scy /* Test 6 */ 543275970Scy { TEST_INPUT("\xb9"), 544275970Scy "0xBC8089A19007C0B14195F4ECC74094FEC64F01F9092928" 545275970Scy "2C2FB392881578208AD466828B1C6C283D2722CF" 546275970Scy "0AD1AB6938", 547275970Scy 1 548275970Scy }, 549275970Scy#if 0 550275970Scy /* Test 7 -- unimplemented optional functionality */ 551275970Scy { 552275970Scy TEST_INPUT(""), 553275970Scy "0xXXX", 554275970Scy 1 555275970Scy }, 556275970Scy#endif 557275970Scy /* Test 8 */ 558275970Scy { 559275970Scy TEST_INPUT("\xa4\x1c\x49\x77\x79\xc0\x37\x5f\xf1" 560275970Scy "\x0a\x7f\x4e\x08\x59\x17\x39"), 561275970Scy "0xC9A68443A005812256B8EC76B00516F0DBB74FAB26D665" 562275970Scy "913F194B6FFB0E91EA9967566B58109CBC675CC2" 563275970Scy "08E4C823F7", 564275970Scy 1 565275970Scy }, 566275970Scy#if 0 567275970Scy /* Test 9 -- unimplemented optional functionality */ 568275970Scy { 569275970Scy TEST_INPUT(""), 570275970Scy "0xXXX", 571275970Scy 1 572275970Scy }, 573275970Scy#endif 574275970Scy /* Test 10 */ 575275970Scy { 576275970Scy TEST_INPUT("\x39\x96\x69\xe2\x8f\x6b\x9c\x6d\xbc\xbb" 577275970Scy "\x69\x12\xec\x10\xff\xcf\x74\x79\x03\x49" 578275970Scy "\xb7\xdc\x8f\xbe\x4a\x8e\x7b\x3b\x56\x21" 579275970Scy "\xdb\x0f\x3e\x7d\xc8\x7f\x82\x32\x64\xbb" 580275970Scy "\xe4\x0d\x18\x11\xc9\xea\x20\x61\xe1\xc8" 581275970Scy "\x4a\xd1\x0a\x23\xfa\xc1\x72\x7e\x72\x02" 582275970Scy "\xfc\x3f\x50\x42\xe6\xbf\x58\xcb\xa8\xa2" 583275970Scy "\x74\x6e\x1f\x64\xf9\xb9\xea\x35\x2c\x71" 584275970Scy "\x15\x07\x05\x3c\xf4\xe5\x33\x9d\x52\x86" 585275970Scy "\x5f\x25\xcc\x22\xb5\xe8\x77\x84\xa1\x2f" 586275970Scy "\xc9\x61\xd6\x6c\xb6\xe8\x95\x73\x19\x9a" 587275970Scy "\x2c\xe6\x56\x5c\xbd\xf1\x3d\xca\x40\x38" 588275970Scy "\x32\xcf\xcb\x0e\x8b\x72\x11\xe8\x3a\xf3" 589275970Scy "\x2a\x11\xac\x17\x92\x9f\xf1\xc0\x73\xa5" 590275970Scy "\x1c\xc0\x27\xaa\xed\xef\xf8\x5a\xad\x7c" 591275970Scy "\x2b\x7c\x5a\x80\x3e\x24\x04\xd9\x6d\x2a" 592275970Scy "\x77\x35\x7b\xda\x1a\x6d\xae\xed\x17\x15" 593275970Scy "\x1c\xb9\xbc\x51\x25\xa4\x22\xe9\x41\xde" 594275970Scy "\x0c\xa0\xfc\x50\x11\xc2\x3e\xcf\xfe\xfd" 595275970Scy "\xd0\x96\x76\x71\x1c\xf3\xdb\x0a\x34\x40" 596275970Scy "\x72\x0e\x16\x15\xc1\xf2\x2f\xbc\x3c\x72" 597275970Scy "\x1d\xe5\x21\xe1\xb9\x9b\xa1\xbd\x55\x77" 598275970Scy "\x40\x86\x42\x14\x7e\xd0\x96"), 599275970Scy "0x4F440DB1E6EDD2899FA335F09515AA025EE177A79F4B4A" 600275970Scy "AF38E42B5C4DE660F5DE8FB2A5B2FBD2A3CBFFD2" 601275970Scy "0CFF1288C0", 602275970Scy 1 603275970Scy }, 604275970Scy { NULL, 0, NULL, 1 } 605275970Scy }; 606275970Scy 607275970Scy hash_testcase_t *testcase = testcases; 608275970Scy 609275970Scy while (testcase->input != NULL && testcase->result != NULL) { 610275970Scy isc_sha384_init(&sha384); 611275970Scy for(i = 0; i < testcase->repeats; i++) { 612275970Scy isc_sha384_update(&sha384, 613275970Scy (const isc_uint8_t *) testcase->input, 614275970Scy testcase->input_len); 615275970Scy } 616275970Scy isc_sha384_final(digest, &sha384); 617275970Scy /* 618275970Scy *API inconsistency BUG HERE 619275970Scy * in order to be consistant with the other isc_hash_final 620275970Scy * functions the call should be 621275970Scy * isc_sha224_final(&sha224, digest); 622275970Scy */ 623275970Scy tohexstr(digest, ISC_SHA384_DIGESTLENGTH, str); 624275970Scy ATF_CHECK_STREQ(str, testcase->result); 625275970Scy 626275970Scy testcase++; 627275970Scy } 628275970Scy 629275970Scy} 630275970Scy 631275970ScyATF_TC(isc_sha512); 632275970ScyATF_TC_HEAD(isc_sha512, tc) { 633275970Scy atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634"); 634275970Scy} 635275970ScyATF_TC_BODY(isc_sha512, tc) { 636275970Scy isc_sha512_t sha512; 637275970Scy 638275970Scy UNUSED(tc); 639275970Scy 640275970Scy /* 641275970Scy * These are the various test vectors. All of these are passed 642275970Scy * through the hash function and the results are compared to the 643275970Scy * result specified here. 644275970Scy */ 645275970Scy hash_testcase_t testcases[] = { 646275970Scy /* Test 1 */ 647275970Scy { 648275970Scy TEST_INPUT("abc"), 649275970Scy "0xDDAF35A193617ABACC417349AE20413112E6FA4E89A97E" 650275970Scy "A20A9EEEE64B55D39A2192992A274FC1A836BA3C" 651275970Scy "23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F", 652275970Scy 1 653275970Scy }, 654275970Scy /* Test 2 */ 655275970Scy { 656275970Scy TEST_INPUT("abcdefghbcdefghicdefghijdefghijkefghijkl" 657275970Scy "fghijklmghijklmnhijklmnoijklmnopjklmnopq" 658275970Scy "klmnopqrlmnopqrsmnopqrstnopqrstu"), 659275970Scy "0x8E959B75DAE313DA8CF4F72814FC143F8F7779C6EB9F7F" 660275970Scy "A17299AEADB6889018501D289E4900F7E4331B99" 661275970Scy "DEC4B5433AC7D329EEB6DD26545E96E55B874BE909", 662275970Scy 1 663275970Scy }, 664275970Scy /* Test 3 */ 665275970Scy { 666275970Scy TEST_INPUT("a"), 667275970Scy "0xE718483D0CE769644E2E42C7BC15B4638E1F98B13B2044" 668275970Scy "285632A803AFA973EBDE0FF244877EA60A4CB043" 669275970Scy "2CE577C31BEB009C5C2C49AA2E4EADB217AD8CC09B", 670275970Scy 1000000 671275970Scy }, 672275970Scy /* Test 4 */ 673275970Scy { 674275970Scy TEST_INPUT("01234567012345670123456701234567"), 675275970Scy "0x89D05BA632C699C31231DED4FFC127D5A894DAD412C0E0" 676275970Scy "24DB872D1ABD2BA8141A0F85072A9BE1E2AA04CF" 677275970Scy "33C765CB510813A39CD5A84C4ACAA64D3F3FB7BAE9", 678275970Scy 20 679275970Scy }, 680275970Scy#if 0 681275970Scy /* Test 5 -- unimplemented optional functionality */ 682275970Scy { 683275970Scy TEST_INPUT(""), 684275970Scy "0xXXX", 685275970Scy 1 686275970Scy }, 687275970Scy#endif 688275970Scy /* Test 6 */ 689275970Scy { 690275970Scy TEST_INPUT("\xD0"), 691275970Scy "0x9992202938E882E73E20F6B69E68A0A7149090423D93C8" 692275970Scy "1BAB3F21678D4ACEEEE50E4E8CAFADA4C85A54EA" 693275970Scy "8306826C4AD6E74CECE9631BFA8A549B4AB3FBBA15", 694275970Scy 1 695275970Scy }, 696275970Scy#if 0 697275970Scy /* Test 7 -- unimplemented optional functionality */ 698275970Scy { 699275970Scy TEST_INPUT(""), 700275970Scy "0xXXX", 701275970Scy 1 702275970Scy }, 703275970Scy#endif 704275970Scy /* Test 8 */ 705275970Scy { 706275970Scy TEST_INPUT("\x8d\x4e\x3c\x0e\x38\x89\x19\x14\x91\x81" 707275970Scy "\x6e\x9d\x98\xbf\xf0\xa0"), 708275970Scy "0xCB0B67A4B8712CD73C9AABC0B199E9269B20844AFB75AC" 709275970Scy "BDD1C153C9828924C3DDEDAAFE669C5FDD0BC66F" 710275970Scy "630F6773988213EB1B16F517AD0DE4B2F0C95C90F8", 711275970Scy 1 712275970Scy }, 713275970Scy#if 0 714275970Scy /* Test 9 -- unimplemented optional functionality */ 715275970Scy { 716275970Scy TEST_INPUT(""), 717275970Scy "0xXXX", 718275970Scy 1 719275970Scy }, 720275970Scy#endif 721275970Scy /* Test 10 */ 722275970Scy { 723275970Scy TEST_INPUT("\xa5\x5f\x20\xc4\x11\xaa\xd1\x32\x80\x7a" 724275970Scy "\x50\x2d\x65\x82\x4e\x31\xa2\x30\x54\x32" 725275970Scy "\xaa\x3d\x06\xd3\xe2\x82\xa8\xd8\x4e\x0d" 726275970Scy "\xe1\xde\x69\x74\xbf\x49\x54\x69\xfc\x7f" 727275970Scy "\x33\x8f\x80\x54\xd5\x8c\x26\xc4\x93\x60" 728275970Scy "\xc3\xe8\x7a\xf5\x65\x23\xac\xf6\xd8\x9d" 729275970Scy "\x03\xe5\x6f\xf2\xf8\x68\x00\x2b\xc3\xe4" 730275970Scy "\x31\xed\xc4\x4d\xf2\xf0\x22\x3d\x4b\xb3" 731275970Scy "\xb2\x43\x58\x6e\x1a\x7d\x92\x49\x36\x69" 732275970Scy "\x4f\xcb\xba\xf8\x8d\x95\x19\xe4\xeb\x50" 733275970Scy "\xa6\x44\xf8\xe4\xf9\x5e\xb0\xea\x95\xbc" 734275970Scy "\x44\x65\xc8\x82\x1a\xac\xd2\xfe\x15\xab" 735275970Scy "\x49\x81\x16\x4b\xbb\x6d\xc3\x2f\x96\x90" 736275970Scy "\x87\xa1\x45\xb0\xd9\xcc\x9c\x67\xc2\x2b" 737275970Scy "\x76\x32\x99\x41\x9c\xc4\x12\x8b\xe9\xa0" 738275970Scy "\x77\xb3\xac\xe6\x34\x06\x4e\x6d\x99\x28" 739275970Scy "\x35\x13\xdc\x06\xe7\x51\x5d\x0d\x73\x13" 740275970Scy "\x2e\x9a\x0d\xc6\xd3\xb1\xf8\xb2\x46\xf1" 741275970Scy "\xa9\x8a\x3f\xc7\x29\x41\xb1\xe3\xbb\x20" 742275970Scy "\x98\xe8\xbf\x16\xf2\x68\xd6\x4f\x0b\x0f" 743275970Scy "\x47\x07\xfe\x1e\xa1\xa1\x79\x1b\xa2\xf3" 744275970Scy "\xc0\xc7\x58\xe5\xf5\x51\x86\x3a\x96\xc9" 745275970Scy "\x49\xad\x47\xd7\xfb\x40\xd2"), 746275970Scy "0xC665BEFB36DA189D78822D10528CBF3B12B3EEF7260399" 747275970Scy "09C1A16A270D48719377966B957A878E72058477" 748275970Scy "9A62825C18DA26415E49A7176A894E7510FD1451F5", 749275970Scy 1 750275970Scy }, 751275970Scy { NULL, 0, NULL, 1 } 752275970Scy }; 753275970Scy 754275970Scy hash_testcase_t *testcase = testcases; 755275970Scy 756275970Scy while (testcase->input != NULL && testcase->result != NULL) { 757275970Scy isc_sha512_init(&sha512); 758275970Scy for(i = 0; i < testcase->repeats; i++) { 759275970Scy isc_sha512_update(&sha512, 760275970Scy (const isc_uint8_t *) testcase->input, 761275970Scy testcase->input_len); 762275970Scy } 763275970Scy isc_sha512_final(digest, &sha512); 764275970Scy /* 765275970Scy *API inconsistency BUG HERE 766275970Scy * in order to be consistant with the other isc_hash_final 767275970Scy * functions the call should be 768275970Scy * isc_sha224_final(&sha224, digest); 769275970Scy */ 770275970Scy tohexstr(digest, ISC_SHA512_DIGESTLENGTH, str); 771275970Scy ATF_CHECK_STREQ(str, testcase->result); 772275970Scy 773275970Scy testcase++; 774275970Scy } 775275970Scy 776275970Scy} 777275970Scy 778275970ScyATF_TC(isc_md5); 779275970ScyATF_TC_HEAD(isc_md5, tc) { 780275970Scy atf_tc_set_md_var(tc, "descr", "md5 example from RFC1321"); 781275970Scy} 782275970ScyATF_TC_BODY(isc_md5, tc) { 783275970Scy isc_md5_t md5; 784275970Scy 785275970Scy UNUSED(tc); 786275970Scy 787275970Scy /* 788275970Scy * These are the various test vectors. All of these are passed 789275970Scy * through the hash function and the results are compared to the 790275970Scy * result specified here. 791275970Scy */ 792275970Scy hash_testcase_t testcases[] = { 793275970Scy { 794275970Scy TEST_INPUT(""), 795275970Scy "0xD41D8CD98F00B204E9800998ECF8427E", 796275970Scy 1 797275970Scy }, 798275970Scy { 799275970Scy TEST_INPUT("a"), 800275970Scy "0x0CC175B9C0F1B6A831C399E269772661", 801275970Scy 1 802275970Scy }, 803275970Scy { 804275970Scy TEST_INPUT("abc"), 805275970Scy "0x900150983CD24FB0D6963F7D28E17F72", 806275970Scy 1 807275970Scy }, 808275970Scy { 809275970Scy TEST_INPUT("message digest"), 810275970Scy "0xF96B697D7CB7938D525A2F31AAF161D0", 811275970Scy 1 812275970Scy }, 813275970Scy { 814275970Scy TEST_INPUT("abcdefghijklmnopqrstuvwxyz"), 815275970Scy "0xC3FCD3D76192E4007DFB496CCA67E13B", 816275970Scy 1 817275970Scy }, 818275970Scy { 819275970Scy TEST_INPUT("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm" 820275970Scy "nopqrstuvwxyz0123456789"), 821275970Scy "0xD174AB98D277D9F5A5611C2C9F419D9F", 822275970Scy 1 823275970Scy }, 824275970Scy { 825275970Scy TEST_INPUT("123456789012345678901234567890123456789" 826275970Scy "01234567890123456789012345678901234567890"), 827275970Scy "0x57EDF4A22BE3C955AC49DA2E2107B67A", 828275970Scy 1 829275970Scy }, 830275970Scy { NULL, 0, NULL, 1 } 831275970Scy }; 832275970Scy 833275970Scy hash_testcase_t *testcase = testcases; 834275970Scy 835275970Scy while (testcase->input != NULL && testcase->result != NULL) { 836275970Scy isc_md5_init(&md5); 837275970Scy for(i = 0; i < testcase->repeats; i++) { 838275970Scy isc_md5_update(&md5, 839275970Scy (const isc_uint8_t *) testcase->input, 840275970Scy testcase->input_len); 841275970Scy } 842275970Scy isc_md5_final(&md5, digest); 843275970Scy tohexstr(digest, ISC_MD5_DIGESTLENGTH, str); 844275970Scy ATF_CHECK_STREQ(str, testcase->result); 845275970Scy 846275970Scy testcase++; 847275970Scy } 848275970Scy} 849275970Scy 850275970Scy/* HMAC-SHA1 test */ 851275970ScyATF_TC(isc_hmacsha1); 852275970ScyATF_TC_HEAD(isc_hmacsha1, tc) { 853275970Scy atf_tc_set_md_var(tc, "descr", "HMAC-SHA1 examples from RFC2104"); 854275970Scy} 855275970ScyATF_TC_BODY(isc_hmacsha1, tc) { 856275970Scy isc_hmacsha1_t hmacsha1; 857275970Scy 858275970Scy UNUSED(tc); 859275970Scy /* 860275970Scy * These are the various test vectors. All of these are passed 861275970Scy * through the hash function and the results are compared to the 862275970Scy * result specified here. 863275970Scy */ 864275970Scy hash_testcase_t testcases[] = { 865275970Scy /* Test 1 */ 866275970Scy { 867275970Scy TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 868275970Scy "0xB617318655057264E28BC0B6FB378C8EF146BE00", 869275970Scy 1 870275970Scy }, 871275970Scy /* Test 2 */ 872275970Scy { 873275970Scy TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 874275970Scy "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 875275970Scy "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 876275970Scy "0xEFFCDF6AE5EB2FA2D27416D5F184DF9C259A7C79", 877275970Scy 1 878275970Scy }, 879275970Scy /* Test 3 */ 880275970Scy { 881275970Scy TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 882275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 883275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 884275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 885275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 886275970Scy "0x125D7342B9AC11CD91A39AF48AA17B4F63F175D3", 887275970Scy 1 888275970Scy }, 889275970Scy /* Test 4 */ 890275970Scy { 891275970Scy TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 892275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 893275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 894275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 895275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 896275970Scy "0x4C9007F4026250C6BC8414F9BF50C86C2D7235DA", 897275970Scy 1 898275970Scy }, 899275970Scy#if 0 900275970Scy /* Test 5 -- unimplemented optional functionality */ 901275970Scy { 902275970Scy TEST_INPUT("Test With Truncation"), 903275970Scy "0x4C1A03424B55E07FE7F27BE1", 904275970Scy 1 905275970Scy }, 906275970Scy#endif 907275970Scy /* Test 6 */ 908275970Scy { 909275970Scy TEST_INPUT("Test Using Larger Than Block-Size Key - " 910275970Scy "Hash Key First"), 911275970Scy "0xAA4AE5E15272D00E95705637CE8A3B55ED402112", 1 }, 912275970Scy /* Test 7 */ 913275970Scy { 914275970Scy TEST_INPUT("Test Using Larger Than Block-Size Key and " 915275970Scy "Larger Than One Block-Size Data"), 916275970Scy "0xE8E99D0F45237D786D6BBAA7965C7808BBFF1A91", 917275970Scy 1 918275970Scy }, 919275970Scy { NULL, 0, NULL, 1 } 920275970Scy }; 921275970Scy 922275970Scy hash_testcase_t *testcase = testcases; 923275970Scy 924275970Scy hash_test_key_t test_keys[] = { 925275970Scy /* Key 1 */ 926275970Scy { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 927275970Scy "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 928275970Scy /* Key 2 */ 929275970Scy { "Jefe", 4 }, 930275970Scy /* Key 3 */ 931275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 932275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 933275970Scy /* Key 4 */ 934275970Scy { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 935275970Scy "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 936275970Scy "\x15\x16\x17\x18\x19", 25 }, 937275970Scy#if 0 938275970Scy /* Key 5 */ 939275970Scy { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 940275970Scy "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 941275970Scy#endif 942275970Scy /* Key 6 */ 943275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 944275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 945275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 946275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 947275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 948275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 949275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 950275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80 }, 951275970Scy /* Key 7 */ 952275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 953275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 954275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 955275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 956275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 957275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 958275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 959275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80 }, 960275970Scy { "", 0 } 961275970Scy }; 962275970Scy 963275970Scy hash_test_key_t *test_key = test_keys; 964275970Scy 965275970Scy while (testcase->input != NULL && testcase->result != NULL) { 966275970Scy memcpy(buffer, test_key->key, test_key->len); 967275970Scy isc_hmacsha1_init(&hmacsha1, buffer, test_key->len); 968275970Scy isc_hmacsha1_update(&hmacsha1, 969275970Scy (const isc_uint8_t *) testcase->input, 970275970Scy testcase->input_len); 971275970Scy isc_hmacsha1_sign(&hmacsha1, digest, ISC_SHA1_DIGESTLENGTH); 972275970Scy tohexstr(digest, ISC_SHA1_DIGESTLENGTH, str); 973275970Scy ATF_CHECK_STREQ(str, testcase->result); 974275970Scy 975275970Scy testcase++; 976275970Scy test_key++; 977275970Scy } 978275970Scy} 979275970Scy 980275970Scy/* HMAC-SHA224 test */ 981275970ScyATF_TC(isc_hmacsha224); 982275970ScyATF_TC_HEAD(isc_hmacsha224, tc) { 983275970Scy atf_tc_set_md_var(tc, "descr", "HMAC-SHA224 examples from RFC4634"); 984275970Scy} 985275970ScyATF_TC_BODY(isc_hmacsha224, tc) { 986275970Scy isc_hmacsha224_t hmacsha224; 987275970Scy 988275970Scy UNUSED(tc); 989275970Scy 990275970Scy /* 991275970Scy * These are the various test vectors. All of these are passed 992275970Scy * through the hash function and the results are compared to the 993275970Scy * result specified here. 994275970Scy */ 995275970Scy hash_testcase_t testcases[] = { 996275970Scy /* Test 1 */ 997275970Scy { 998275970Scy TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 999275970Scy "0x896FB1128ABBDF196832107CD49DF33F47B4B1169912BA" 1000275970Scy "4F53684B22", 1001275970Scy 1 1002275970Scy }, 1003275970Scy /* Test 2 */ 1004275970Scy { 1005275970Scy TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 1006275970Scy "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 1007275970Scy "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1008275970Scy "0xA30E01098BC6DBBF45690F3A7E9E6D0F8BBEA2A39E61480" 1009275970Scy "08FD05E44", 1010275970Scy 1 1011275970Scy }, 1012275970Scy /* Test 3 */ 1013275970Scy { 1014275970Scy TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1015275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1016275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1017275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1018275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1019275970Scy "0x7FB3CB3588C6C1F6FFA9694D7D6AD2649365B0C1F65D69" 1020275970Scy "D1EC8333EA", 1021275970Scy 1 1022275970Scy }, 1023275970Scy /* Test 4 */ 1024275970Scy { 1025275970Scy TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1026275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1027275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1028275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1029275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1030275970Scy "0x6C11506874013CAC6A2ABC1BB382627CEC6A90D86EFC01" 1031275970Scy "2DE7AFEC5A", 1032275970Scy 1 1033275970Scy }, 1034275970Scy#if 0 1035275970Scy /* Test 5 -- unimplemented optional functionality */ 1036275970Scy { 1037275970Scy TEST_INPUT("Test With Truncation"), 1038275970Scy "0x4C1A03424B55E07FE7F27BE1", 1039275970Scy 1 1040275970Scy }, 1041275970Scy#endif 1042275970Scy /* Test 6 */ 1043275970Scy { 1044275970Scy TEST_INPUT("Test Using Larger Than Block-Size Key - " 1045275970Scy "Hash Key First"), 1046275970Scy "0x95E9A0DB962095ADAEBE9B2D6F0DBCE2D499F112F2D2B7" 1047275970Scy "273FA6870E", 1048275970Scy 1 1049275970Scy }, 1050275970Scy /* Test 7 */ 1051275970Scy { 1052275970Scy TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20" 1053275970Scy "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67" 1054275970Scy "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20" 1055275970Scy "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b" 1056275970Scy "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20" 1057275970Scy "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67" 1058275970Scy "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c" 1059275970Scy "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64" 1060275970Scy "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b" 1061275970Scy "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74" 1062275970Scy "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65" 1063275970Scy "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62" 1064275970Scy "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20" 1065275970Scy "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41" 1066275970Scy "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68" 1067275970Scy "\x6d\x2e"), 1068275970Scy "0x3A854166AC5D9F023F54D517D0B39DBD946770DB9C2B95" 1069275970Scy "C9F6F565D1", 1070275970Scy 1 1071275970Scy }, 1072275970Scy { NULL, 0, NULL, 1 } 1073275970Scy }; 1074275970Scy 1075275970Scy hash_testcase_t *testcase = testcases; 1076275970Scy 1077275970Scy hash_test_key_t test_keys[] = { 1078275970Scy /* Key 1 */ 1079275970Scy { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1080275970Scy "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 1081275970Scy /* Key 2 */ 1082275970Scy { "Jefe", 4 }, 1083275970Scy /* Key 3 */ 1084275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1085275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 1086275970Scy /* Key 4 */ 1087275970Scy { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1088275970Scy "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1089275970Scy "\x15\x16\x17\x18\x19", 25 }, 1090275970Scy#if 0 1091275970Scy /* Key 5 */ 1092275970Scy { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1093275970Scy "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1094275970Scy#endif 1095275970Scy /* Key 6 */ 1096275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1097275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1098275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1099275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1100275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1101275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1102275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1103275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1104275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1105275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1106275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1107275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1108275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1109275970Scy /* Key 7 */ 1110275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1111275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1112275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1113275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1114275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1115275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1116275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1117275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1118275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1119275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1120275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1121275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1122275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1123275970Scy { "", 0 } 1124275970Scy }; 1125275970Scy 1126275970Scy hash_test_key_t *test_key = test_keys; 1127275970Scy 1128275970Scy while (testcase->input != NULL && testcase->result != NULL) { 1129275970Scy memcpy(buffer, test_key->key, test_key->len); 1130275970Scy isc_hmacsha224_init(&hmacsha224, buffer, test_key->len); 1131275970Scy isc_hmacsha224_update(&hmacsha224, 1132275970Scy (const isc_uint8_t *) testcase->input, 1133275970Scy testcase->input_len); 1134275970Scy isc_hmacsha224_sign(&hmacsha224, digest, ISC_SHA224_DIGESTLENGTH); 1135275970Scy tohexstr(digest, ISC_SHA224_DIGESTLENGTH, str); 1136275970Scy ATF_CHECK_STREQ(str, testcase->result); 1137275970Scy 1138275970Scy testcase++; 1139275970Scy test_key++; 1140275970Scy } 1141275970Scy} 1142275970Scy 1143275970Scy/* HMAC-SHA256 test */ 1144275970ScyATF_TC(isc_hmacsha256); 1145275970ScyATF_TC_HEAD(isc_hmacsha256, tc) { 1146275970Scy atf_tc_set_md_var(tc, "descr", "HMAC-SHA256 examples from RFC4634"); 1147275970Scy} 1148275970ScyATF_TC_BODY(isc_hmacsha256, tc) { 1149275970Scy isc_hmacsha256_t hmacsha256; 1150275970Scy 1151275970Scy UNUSED(tc); 1152275970Scy 1153275970Scy /* 1154275970Scy * These are the various test vectors. All of these are passed 1155275970Scy * through the hash function and the results are compared to the 1156275970Scy * result specified here. 1157275970Scy */ 1158275970Scy hash_testcase_t testcases[] = { 1159275970Scy /* Test 1 */ 1160275970Scy { 1161275970Scy TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 1162275970Scy "0xB0344C61D8DB38535CA8AFCEAF0BF12B881DC200C9833D" 1163275970Scy "A726E9376C2E32CFF7", 1164275970Scy 1 1165275970Scy }, 1166275970Scy /* Test 2 */ 1167275970Scy { 1168275970Scy TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 1169275970Scy "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 1170275970Scy "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1171275970Scy "0x5BDCC146BF60754E6A042426089575C75A003F089D2739" 1172275970Scy "839DEC58B964EC3843", 1173275970Scy 1 1174275970Scy }, 1175275970Scy /* Test 3 */ 1176275970Scy { 1177275970Scy TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1178275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1179275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1180275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1181275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1182275970Scy "0x773EA91E36800E46854DB8EBD09181A72959098B3EF8C1" 1183275970Scy "22D9635514CED565FE", 1184275970Scy 1 1185275970Scy }, 1186275970Scy /* Test 4 */ 1187275970Scy { 1188275970Scy TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1189275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1190275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1191275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1192275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1193275970Scy "0x82558A389A443C0EA4CC819899F2083A85F0FAA3E578F8" 1194275970Scy "077A2E3FF46729665B", 1195275970Scy 1 1196275970Scy }, 1197275970Scy#if 0 1198275970Scy /* Test 5 -- unimplemented optional functionality */ 1199275970Scy { 1200275970Scy TEST_INPUT("Test With Truncation"), 1201275970Scy "0x4C1A03424B55E07FE7F27BE1", 1202275970Scy 1 1203275970Scy }, 1204275970Scy#endif 1205275970Scy /* Test 6 */ 1206275970Scy { 1207275970Scy TEST_INPUT("Test Using Larger Than Block-Size Key - " 1208275970Scy "Hash Key First"), 1209275970Scy "0x60E431591EE0B67F0D8A26AACBF5B77F8E0BC6213728C5" 1210275970Scy "140546040F0EE37F54", 1211275970Scy 1 1212275970Scy }, 1213275970Scy /* Test 7 */ 1214275970Scy { 1215275970Scy TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20" 1216275970Scy "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67" 1217275970Scy "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20" 1218275970Scy "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b" 1219275970Scy "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20" 1220275970Scy "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67" 1221275970Scy "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c" 1222275970Scy "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64" 1223275970Scy "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b" 1224275970Scy "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74" 1225275970Scy "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65" 1226275970Scy "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62" 1227275970Scy "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20" 1228275970Scy "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41" 1229275970Scy "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68" 1230275970Scy "\x6d\x2e"), 1231275970Scy "0x9B09FFA71B942FCB27635FBCD5B0E944BFDC63644F0713" 1232275970Scy "938A7F51535C3A35E2", 1233275970Scy 1 1234275970Scy }, 1235275970Scy { NULL, 0, NULL, 1 } 1236275970Scy }; 1237275970Scy 1238275970Scy hash_testcase_t *testcase = testcases; 1239275970Scy 1240275970Scy hash_test_key_t test_keys[] = { 1241275970Scy /* Key 1 */ 1242275970Scy { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1243275970Scy "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 1244275970Scy /* Key 2 */ 1245275970Scy { "Jefe", 4 }, 1246275970Scy /* Key 3 */ 1247275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1248275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 1249275970Scy /* Key 4 */ 1250275970Scy { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1251275970Scy "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1252275970Scy "\x15\x16\x17\x18\x19", 25 }, 1253275970Scy#if 0 1254275970Scy /* Key 5 */ 1255275970Scy { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1256275970Scy "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1257275970Scy#endif 1258275970Scy /* Key 6 */ 1259275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1260275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1261275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1262275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1263275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1264275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1265275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1266275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1267275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1268275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1269275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1270275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1271275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1272275970Scy /* Key 7 */ 1273275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1274275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1275275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1276275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1277275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1278275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1279275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1280275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1281275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1282275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1283275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1284275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1285275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1286275970Scy { "", 0 } 1287275970Scy }; 1288275970Scy 1289275970Scy hash_test_key_t *test_key = test_keys; 1290275970Scy 1291275970Scy while (testcase->input != NULL && testcase->result != NULL) { 1292275970Scy memcpy(buffer, test_key->key, test_key->len); 1293275970Scy isc_hmacsha256_init(&hmacsha256, buffer, test_key->len); 1294275970Scy isc_hmacsha256_update(&hmacsha256, 1295275970Scy (const isc_uint8_t *) testcase->input, 1296275970Scy testcase->input_len); 1297275970Scy isc_hmacsha256_sign(&hmacsha256, digest, ISC_SHA256_DIGESTLENGTH); 1298275970Scy tohexstr(digest, ISC_SHA256_DIGESTLENGTH, str); 1299275970Scy ATF_CHECK_STREQ(str, testcase->result); 1300275970Scy 1301275970Scy testcase++; 1302275970Scy test_key++; 1303275970Scy } 1304275970Scy} 1305275970Scy 1306275970Scy/* HMAC-SHA384 test */ 1307275970ScyATF_TC(isc_hmacsha384); 1308275970ScyATF_TC_HEAD(isc_hmacsha384, tc) { 1309275970Scy atf_tc_set_md_var(tc, "descr", "HMAC-SHA384 examples from RFC4634"); 1310275970Scy} 1311275970ScyATF_TC_BODY(isc_hmacsha384, tc) { 1312275970Scy isc_hmacsha384_t hmacsha384; 1313275970Scy 1314275970Scy UNUSED(tc); 1315275970Scy 1316275970Scy /* 1317275970Scy * These are the various test vectors. All of these are passed 1318275970Scy * through the hash function and the results are compared to the 1319275970Scy * result specified here. 1320275970Scy */ 1321275970Scy hash_testcase_t testcases[] = { 1322275970Scy /* Test 1 */ 1323275970Scy { 1324275970Scy TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 1325275970Scy "0xAFD03944D84895626B0825F4AB46907F15F9DADBE4101E" 1326275970Scy "C682AA034C7CEBC59CFAEA9EA9076EDE7F4AF152" 1327275970Scy "E8B2FA9CB6", 1328275970Scy 1 1329275970Scy }, 1330275970Scy /* Test 2 */ 1331275970Scy { 1332275970Scy TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 1333275970Scy "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 1334275970Scy "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1335275970Scy "0xAF45D2E376484031617F78D2B58A6B1B9C7EF464F5A01B" 1336275970Scy "47E42EC3736322445E8E2240CA5E69E2C78B3239" 1337275970Scy "ECFAB21649", 1338275970Scy 1 1339275970Scy }, 1340275970Scy /* Test 3 */ 1341275970Scy { 1342275970Scy TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1343275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1344275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1345275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1346275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1347275970Scy "0x88062608D3E6AD8A0AA2ACE014C8A86F0AA635D947AC9F" 1348275970Scy "EBE83EF4E55966144B2A5AB39DC13814B94E3AB6" 1349275970Scy "E101A34F27", 1350275970Scy 1 1351275970Scy }, 1352275970Scy /* Test 4 */ 1353275970Scy { 1354275970Scy TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1355275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1356275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1357275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1358275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1359275970Scy "0x3E8A69B7783C25851933AB6290AF6CA77A998148085000" 1360275970Scy "9CC5577C6E1F573B4E6801DD23C4A7D679CCF8A3" 1361275970Scy "86C674CFFB", 1362275970Scy 1 1363275970Scy }, 1364275970Scy#if 0 1365275970Scy /* Test 5 -- unimplemented optional functionality */ 1366275970Scy { 1367275970Scy TEST_INPUT("Test With Truncation"), 1368275970Scy "0x4C1A03424B55E07FE7F27BE1", 1369275970Scy 1 1370275970Scy }, 1371275970Scy#endif 1372275970Scy /* Test 6 */ 1373275970Scy { 1374275970Scy TEST_INPUT("Test Using Larger Than Block-Size Key - " 1375275970Scy "Hash Key First"), 1376275970Scy "0x4ECE084485813E9088D2C63A041BC5B44F9EF1012A2B58" 1377275970Scy "8F3CD11F05033AC4C60C2EF6AB4030FE8296248D" 1378275970Scy "F163F44952", 1379275970Scy 1 1380275970Scy }, 1381275970Scy /* Test 7 */ 1382275970Scy { 1383275970Scy TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20" 1384275970Scy "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67" 1385275970Scy "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20" 1386275970Scy "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b" 1387275970Scy "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20" 1388275970Scy "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67" 1389275970Scy "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c" 1390275970Scy "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64" 1391275970Scy "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b" 1392275970Scy "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74" 1393275970Scy "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65" 1394275970Scy "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62" 1395275970Scy "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20" 1396275970Scy "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41" 1397275970Scy "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68" 1398275970Scy "\x6d\x2e"), 1399275970Scy "0x6617178E941F020D351E2F254E8FD32C602420FEB0B8FB" 1400275970Scy "9ADCCEBB82461E99C5A678CC31E799176D3860E6" 1401275970Scy "110C46523E", 1402275970Scy 1 1403275970Scy }, 1404275970Scy { NULL, 0, NULL, 1 } 1405275970Scy }; 1406275970Scy 1407275970Scy hash_testcase_t *testcase = testcases; 1408275970Scy 1409275970Scy hash_test_key_t test_keys[] = { 1410275970Scy /* Key 1 */ 1411275970Scy { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1412275970Scy "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 1413275970Scy /* Key 2 */ 1414275970Scy { "Jefe", 4 }, 1415275970Scy /* Key 3 */ 1416275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1417275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 1418275970Scy /* Key 4 */ 1419275970Scy { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1420275970Scy "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1421275970Scy "\x15\x16\x17\x18\x19", 25 }, 1422275970Scy#if 0 1423275970Scy /* Key 5 */ 1424275970Scy { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1425275970Scy "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1426275970Scy#endif 1427275970Scy /* Key 6 */ 1428275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1429275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1430275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1431275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1432275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1433275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1434275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1435275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1436275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1437275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1438275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1439275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1440275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1441275970Scy /* Key 7 */ 1442275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1443275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1444275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1445275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1446275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1447275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1448275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1449275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1450275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1451275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1452275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1453275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1454275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1455275970Scy { "", 0 } 1456275970Scy }; 1457275970Scy 1458275970Scy hash_test_key_t *test_key = test_keys; 1459275970Scy 1460275970Scy while (testcase->input != NULL && testcase->result != NULL) { 1461275970Scy memcpy(buffer, test_key->key, test_key->len); 1462275970Scy isc_hmacsha384_init(&hmacsha384, buffer, test_key->len); 1463275970Scy isc_hmacsha384_update(&hmacsha384, 1464275970Scy (const isc_uint8_t *) testcase->input, 1465275970Scy testcase->input_len); 1466275970Scy isc_hmacsha384_sign(&hmacsha384, digest, ISC_SHA384_DIGESTLENGTH); 1467275970Scy tohexstr(digest, ISC_SHA384_DIGESTLENGTH, str); 1468275970Scy ATF_CHECK_STREQ(str, testcase->result); 1469275970Scy 1470275970Scy testcase++; 1471275970Scy test_key++; 1472275970Scy } 1473275970Scy} 1474275970Scy 1475275970Scy/* HMAC-SHA512 test */ 1476275970ScyATF_TC(isc_hmacsha512); 1477275970ScyATF_TC_HEAD(isc_hmacsha512, tc) { 1478275970Scy atf_tc_set_md_var(tc, "descr", "HMAC-SHA512 examples from RFC4634"); 1479275970Scy} 1480275970ScyATF_TC_BODY(isc_hmacsha512, tc) { 1481275970Scy isc_hmacsha512_t hmacsha512; 1482275970Scy 1483275970Scy UNUSED(tc); 1484275970Scy 1485275970Scy /* 1486275970Scy * These are the various test vectors. All of these are passed 1487275970Scy * through the hash function and the results are compared to the 1488275970Scy * result specified here. 1489275970Scy */ 1490275970Scy hash_testcase_t testcases[] = { 1491275970Scy /* Test 1 */ 1492275970Scy { 1493275970Scy TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 1494275970Scy "0x87AA7CDEA5EF619D4FF0B4241A1D6CB02379F4E2CE4EC2" 1495275970Scy "787AD0B30545E17CDEDAA833B7D6B8A702038B27" 1496275970Scy "4EAEA3F4E4BE9D914EEB61F1702E696C203A126854", 1497275970Scy 1 1498275970Scy }, 1499275970Scy /* Test 2 */ 1500275970Scy { 1501275970Scy TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 1502275970Scy "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 1503275970Scy "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1504275970Scy "0x164B7A7BFCF819E2E395FBE73B56E0A387BD64222E831F" 1505275970Scy "D610270CD7EA2505549758BF75C05A994A6D034F" 1506275970Scy "65F8F0E6FDCAEAB1A34D4A6B4B636E070A38BCE737", 1507275970Scy 1 1508275970Scy }, 1509275970Scy /* Test 3 */ 1510275970Scy { 1511275970Scy TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1512275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1513275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1514275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1515275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1516275970Scy "0xFA73B0089D56A284EFB0F0756C890BE9B1B5DBDD8EE81A" 1517275970Scy "3655F83E33B2279D39BF3E848279A722C806B485" 1518275970Scy "A47E67C807B946A337BEE8942674278859E13292FB", 1519275970Scy 1 1520275970Scy }, 1521275970Scy /* Test 4 */ 1522275970Scy { 1523275970Scy TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1524275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1525275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1526275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1527275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1528275970Scy "0xB0BA465637458C6990E5A8C5F61D4AF7E576D97FF94B87" 1529275970Scy "2DE76F8050361EE3DBA91CA5C11AA25EB4D67927" 1530275970Scy "5CC5788063A5F19741120C4F2DE2ADEBEB10A298DD", 1531275970Scy 1 1532275970Scy }, 1533275970Scy#if 0 1534275970Scy /* Test 5 -- unimplemented optional functionality */ 1535275970Scy { 1536275970Scy TEST_INPUT("Test With Truncation"), 1537275970Scy "0x4C1A03424B55E07FE7F27BE1", 1538275970Scy 1 1539275970Scy }, 1540275970Scy#endif 1541275970Scy /* Test 6 */ 1542275970Scy { 1543275970Scy TEST_INPUT("Test Using Larger Than Block-Size Key - " 1544275970Scy "Hash Key First"), 1545275970Scy "0x80B24263C7C1A3EBB71493C1DD7BE8B49B46D1F41B4AEE" 1546275970Scy "C1121B013783F8F3526B56D037E05F2598BD0FD2" 1547275970Scy "215D6A1E5295E64F73F63F0AEC8B915A985D786598", 1548275970Scy 1 1549275970Scy }, 1550275970Scy /* Test 7 */ 1551275970Scy { 1552275970Scy TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20" 1553275970Scy "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67" 1554275970Scy "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20" 1555275970Scy "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b" 1556275970Scy "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20" 1557275970Scy "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67" 1558275970Scy "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c" 1559275970Scy "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64" 1560275970Scy "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b" 1561275970Scy "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74" 1562275970Scy "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65" 1563275970Scy "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62" 1564275970Scy "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20" 1565275970Scy "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41" 1566275970Scy "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68" 1567275970Scy "\x6d\x2e"), 1568275970Scy "0xE37B6A775DC87DBAA4DFA9F96E5E3FFDDEBD71F8867289" 1569275970Scy "865DF5A32D20CDC944B6022CAC3C4982B10D5EEB" 1570275970Scy "55C3E4DE15134676FB6DE0446065C97440FA8C6A58", 1571275970Scy 1 1572275970Scy }, 1573275970Scy { NULL, 0, NULL, 1 } 1574275970Scy }; 1575275970Scy 1576275970Scy hash_testcase_t *testcase = testcases; 1577275970Scy 1578275970Scy hash_test_key_t test_keys[] = { 1579275970Scy /* Key 1 */ 1580275970Scy { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1581275970Scy "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 1582275970Scy /* Key 2 */ 1583275970Scy { "Jefe", 4 }, 1584275970Scy /* Key 3 */ 1585275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1586275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 1587275970Scy /* Key 4 */ 1588275970Scy { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1589275970Scy "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1590275970Scy "\x15\x16\x17\x18\x19", 25 }, 1591275970Scy#if 0 1592275970Scy /* Key 5 */ 1593275970Scy { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1594275970Scy "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1595275970Scy#endif 1596275970Scy /* Key 6 */ 1597275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1598275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1599275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1600275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1601275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1602275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1603275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1604275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1605275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1606275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1607275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1608275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1609275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1610275970Scy /* Key 7 */ 1611275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1612275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1613275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1614275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1615275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1616275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1617275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1618275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1619275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1620275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1621275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1622275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1623275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1624275970Scy { "", 0 } 1625275970Scy }; 1626275970Scy 1627275970Scy hash_test_key_t *test_key = test_keys; 1628275970Scy 1629275970Scy while (testcase->input != NULL && testcase->result != NULL) { 1630275970Scy memcpy(buffer, test_key->key, test_key->len); 1631275970Scy isc_hmacsha512_init(&hmacsha512, buffer, test_key->len); 1632275970Scy isc_hmacsha512_update(&hmacsha512, 1633275970Scy (const isc_uint8_t *) testcase->input, 1634275970Scy testcase->input_len); 1635275970Scy isc_hmacsha512_sign(&hmacsha512, digest, ISC_SHA512_DIGESTLENGTH); 1636275970Scy tohexstr(digest, ISC_SHA512_DIGESTLENGTH, str); 1637275970Scy ATF_CHECK_STREQ(str, testcase->result); 1638275970Scy 1639275970Scy testcase++; 1640275970Scy test_key++; 1641275970Scy } 1642275970Scy} 1643275970Scy 1644275970Scy 1645275970Scy/* HMAC-MD5 Test */ 1646275970ScyATF_TC(isc_hmacmd5); 1647275970ScyATF_TC_HEAD(isc_hmacmd5, tc) { 1648275970Scy atf_tc_set_md_var(tc, "descr", "HMAC-MD5 examples from RFC2104"); 1649275970Scy} 1650275970ScyATF_TC_BODY(isc_hmacmd5, tc) { 1651275970Scy isc_hmacmd5_t hmacmd5; 1652275970Scy 1653275970Scy UNUSED(tc); 1654275970Scy 1655275970Scy /* 1656275970Scy * These are the various test vectors. All of these are passed 1657275970Scy * through the hash function and the results are compared to the 1658275970Scy * result specified here. 1659275970Scy */ 1660275970Scy hash_testcase_t testcases[] = { 1661275970Scy /* Test 1 */ 1662275970Scy { 1663275970Scy TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 1664275970Scy "0x9294727A3638BB1C13F48EF8158BFC9D", 1665275970Scy 1 1666275970Scy }, 1667275970Scy /* Test 2 */ 1668275970Scy { 1669275970Scy TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79" 1670275970Scy "\x61\x20\x77\x61\x6e\x74\x20\x66\x6f" 1671275970Scy "\x72\x20\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1672275970Scy "0x750C783E6AB0B503EAA86E310A5DB738", 1 1673275970Scy }, 1674275970Scy /* Test 3 */ 1675275970Scy { 1676275970Scy TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1677275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1678275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1679275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1680275970Scy "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1681275970Scy "0x56BE34521D144C88DBB8C733F0E8B3F6", 1682275970Scy 1 1683275970Scy }, 1684275970Scy /* Test 4 */ 1685275970Scy { 1686275970Scy TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1687275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1688275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1689275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1690275970Scy "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1691275970Scy "0x697EAF0ACA3A3AEA3A75164746FFAA79", 1692275970Scy 1 1693275970Scy }, 1694275970Scy#if 0 1695275970Scy /* Test 5 -- unimplemented optional functionality */ 1696275970Scy { 1697275970Scy TEST_INPUT("Test With Truncation"), 1698275970Scy "0x4C1A03424B55E07FE7F27BE1", 1699275970Scy 1 1700275970Scy }, 1701275970Scy /* Test 6 -- unimplemented optional functionality */ 1702275970Scy { 1703275970Scy TEST_INPUT("Test Using Larger Than Block-Size Key - " 1704275970Scy "Hash Key First"), 1705275970Scy "0xAA4AE5E15272D00E95705637CE8A3B55ED402112", 1706275970Scy 1 1707275970Scy }, 1708275970Scy /* Test 7 -- unimplemented optional functionality */ 1709275970Scy { 1710275970Scy TEST_INPUT("Test Using Larger Than Block-Size Key and " 1711275970Scy "Larger Than One Block-Size Data"), 1712275970Scy "0xE8E99D0F45237D786D6BBAA7965C7808BBFF1A91", 1713275970Scy 1 1714275970Scy }, 1715275970Scy#endif 1716275970Scy { NULL, 0, NULL, 1 } 1717275970Scy }; 1718275970Scy 1719275970Scy hash_testcase_t *testcase = testcases; 1720275970Scy 1721275970Scy hash_test_key_t test_keys[] = { 1722275970Scy /* Key 1 */ 1723275970Scy { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1724275970Scy "\x0b\x0b\x0b\x0b\x0b\x0b", 16 }, 1725275970Scy /* Key 2 */ 1726275970Scy { "Jefe", 4 }, 1727275970Scy /* Key 3 */ 1728275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1729275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa", 16 }, 1730275970Scy /* Key 4 */ 1731275970Scy { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1732275970Scy "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1733275970Scy "\x15\x16\x17\x18\x19", 25 }, 1734275970Scy#if 0 1735275970Scy /* Key 5 */ 1736275970Scy { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1737275970Scy "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1738275970Scy /* Key 6 */ 1739275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1740275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1741275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1742275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1743275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1744275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1745275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1746275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1747275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1748275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1749275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1750275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1751275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1752275970Scy /* Key 7 */ 1753275970Scy { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1754275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1755275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1756275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1757275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1758275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1759275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1760275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1761275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1762275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1763275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1764275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1765275970Scy "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1766275970Scy#endif 1767275970Scy { "", 0 } 1768275970Scy }; 1769275970Scy 1770275970Scy hash_test_key_t *test_key = test_keys; 1771275970Scy 1772275970Scy while (testcase->input != NULL && testcase->result != NULL) { 1773275970Scy memcpy(buffer, test_key->key, test_key->len); 1774275970Scy isc_hmacmd5_init(&hmacmd5, buffer, test_key->len); 1775275970Scy isc_hmacmd5_update(&hmacmd5, 1776275970Scy (const isc_uint8_t *) testcase->input, 1777275970Scy testcase->input_len); 1778275970Scy isc_hmacmd5_sign(&hmacmd5, digest); 1779275970Scy tohexstr(digest, ISC_MD5_DIGESTLENGTH, str); 1780275970Scy ATF_CHECK_STREQ(str, testcase->result); 1781275970Scy 1782275970Scy testcase++; 1783275970Scy test_key++; 1784275970Scy } 1785275970Scy} 1786275970Scy 1787275970Scy/* 1788275970Scy * Main 1789275970Scy */ 1790275970ScyATF_TP_ADD_TCS(tp) { 1791275970Scy ATF_TP_ADD_TC(tp, isc_hmacmd5); 1792275970Scy ATF_TP_ADD_TC(tp, isc_hmacsha1); 1793275970Scy ATF_TP_ADD_TC(tp, isc_hmacsha224); 1794275970Scy ATF_TP_ADD_TC(tp, isc_hmacsha256); 1795275970Scy ATF_TP_ADD_TC(tp, isc_hmacsha384); 1796275970Scy ATF_TP_ADD_TC(tp, isc_hmacsha512); 1797275970Scy ATF_TP_ADD_TC(tp, isc_md5); 1798275970Scy ATF_TP_ADD_TC(tp, isc_sha1); 1799275970Scy ATF_TP_ADD_TC(tp, isc_sha224); 1800275970Scy ATF_TP_ADD_TC(tp, isc_sha256); 1801275970Scy ATF_TP_ADD_TC(tp, isc_sha384); 1802275970Scy ATF_TP_ADD_TC(tp, isc_sha512); 1803275970Scy return (atf_no_error()); 1804275970Scy} 1805275970Scy 1806