1290001Sglebius/* 2290001Sglebius * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC") 3290001Sglebius * 4290001Sglebius * Permission to use, copy, modify, and/or distribute this software for any 5290001Sglebius * purpose with or without fee is hereby granted, provided that the above 6290001Sglebius * copyright notice and this permission notice appear in all copies. 7290001Sglebius * 8290001Sglebius * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 9290001Sglebius * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10290001Sglebius * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 11290001Sglebius * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12290001Sglebius * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 13290001Sglebius * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14290001Sglebius * PERFORMANCE OF THIS SOFTWARE. 15290001Sglebius */ 16290001Sglebius 17290001Sglebius/* $Id$ */ 18290001Sglebius 19290001Sglebius/* ! \file */ 20290001Sglebius 21290001Sglebius#include <config.h> 22290001Sglebius 23290001Sglebius#include <atf-c.h> 24290001Sglebius 25290001Sglebius#include <stdio.h> 26290001Sglebius#include <string.h> 27290001Sglebius 28290001Sglebius#include <isc/hmacmd5.h> 29290001Sglebius#include <isc/hmacsha.h> 30290001Sglebius#include <isc/md5.h> 31290001Sglebius#include <isc/sha1.h> 32290001Sglebius#include <isc/util.h> 33290001Sglebius#include <isc/string.h> 34290001Sglebius 35290001Sglebius/* 36290001Sglebius * Test data from RFC6234 37290001Sglebius */ 38290001Sglebius 39290001Sglebiusunsigned char digest[ISC_SHA512_DIGESTLENGTH]; 40290001Sglebiusunsigned char buffer[1024]; 41290001Sglebiusconst char *s; 42290001Sglebiuschar str[ISC_SHA512_DIGESTLENGTH]; 43290001Sglebiusunsigned char key[20]; 44290001Sglebiusint i = 0; 45290001Sglebius 46290001Sglebiusisc_result_t 47290001Sglebiustohexstr(unsigned char *d, unsigned int len, char *out); 48290001Sglebius/* 49290001Sglebius * Precondition: a hexadecimal number in *d, the length of that number in len, 50290001Sglebius * and a pointer to a character array to put the output (*out). 51290001Sglebius * Postcondition: A String representation of the given hexadecimal number is 52290001Sglebius * placed into the array *out 53290001Sglebius * 54290001Sglebius * 'out' MUST point to an array of at least len / 2 + 1 55290001Sglebius * 56290001Sglebius * Return values: ISC_R_SUCCESS if the operation is sucessful 57290001Sglebius */ 58290001Sglebius 59290001Sglebiusisc_result_t 60290001Sglebiustohexstr(unsigned char *d, unsigned int len, char *out) { 61290001Sglebius 62290001Sglebius out[0]='\0'; 63290001Sglebius char c_ret[] = "AA"; 64290001Sglebius unsigned int i; 65290001Sglebius strcat(out, "0x"); 66290001Sglebius for (i = 0; i < len; i++) { 67290001Sglebius sprintf(c_ret, "%02X", d[i]); 68290001Sglebius strcat(out, c_ret); 69290001Sglebius } 70290001Sglebius strcat(out, "\0"); 71290001Sglebius return (ISC_R_SUCCESS); 72290001Sglebius} 73290001Sglebius 74290001Sglebius 75290001Sglebius#define TEST_INPUT(x) (x), sizeof(x)-1 76290001Sglebius 77290001Sglebiustypedef struct hash_testcase { 78290001Sglebius const char *input; 79290001Sglebius size_t input_len; 80290001Sglebius const char *result; 81290001Sglebius int repeats; 82290001Sglebius} hash_testcase_t; 83290001Sglebius 84290001Sglebiustypedef struct hash_test_key { 85290001Sglebius const char *key; 86290001Sglebius const int len; 87290001Sglebius} hash_test_key_t; 88290001Sglebius 89290001Sglebius/* non-hmac tests */ 90290001Sglebius 91290001SglebiusATF_TC(isc_sha1); 92290001SglebiusATF_TC_HEAD(isc_sha1, tc) { 93290001Sglebius atf_tc_set_md_var(tc, "descr", "sha1 examples from RFC4634"); 94290001Sglebius} 95290001SglebiusATF_TC_BODY(isc_sha1, tc) { 96290001Sglebius isc_sha1_t sha1; 97290001Sglebius 98290001Sglebius UNUSED(tc); 99290001Sglebius 100290001Sglebius /* 101290001Sglebius * These are the various test vectors. All of these are passed 102290001Sglebius * through the hash function and the results are compared to the 103290001Sglebius * result specified here. 104290001Sglebius */ 105290001Sglebius hash_testcase_t testcases[] = { 106290001Sglebius /* Test 1 */ 107290001Sglebius { 108290001Sglebius TEST_INPUT("abc"), 109290001Sglebius "0xA9993E364706816ABA3E25717850C26C9CD0D89D", 110290001Sglebius 1 111290001Sglebius }, 112290001Sglebius /* Test 2 */ 113290001Sglebius { 114290001Sglebius TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijk" 115290001Sglebius "ljklmklmnlmnomnopnopq"), 116290001Sglebius "0x84983E441C3BD26EBAAE4AA1F95129E5E54670F1", 117290001Sglebius 1 118290001Sglebius }, 119290001Sglebius /* Test 3 */ 120290001Sglebius { 121290001Sglebius TEST_INPUT("a") /* times 1000000 */, 122290001Sglebius "0x34AA973CD4C4DAA4F61EEB2BDBAD27316534016F", 123290001Sglebius 1000000 124290001Sglebius }, 125290001Sglebius /* Test 4 -- exact multiple of 512 bits */ 126290001Sglebius { 127290001Sglebius TEST_INPUT("01234567012345670123456701234567"), 128290001Sglebius "0xDEA356A2CDDD90C7A7ECEDC5EBB563934F460452", 129290001Sglebius 20 /* 20 times */ 130290001Sglebius }, 131290001Sglebius#if 0 132290001Sglebius /* Test 5 -- optional feature, not implemented */ 133290001Sglebius { 134290001Sglebius TEST_INPUT(""), 135290001Sglebius /* "extrabits": 0x98 , "numberextrabits": 5 */ 136290001Sglebius "0x29826B003B906E660EFF4027CE98AF3531AC75BA", 137290001Sglebius 1 138290001Sglebius }, 139290001Sglebius#endif 140290001Sglebius /* Test 6 */ 141290001Sglebius { 142290001Sglebius TEST_INPUT("\x5e"), 143290001Sglebius "0x5E6F80A34A9798CAFC6A5DB96CC57BA4C4DB59C2", 144290001Sglebius 1 145290001Sglebius }, 146290001Sglebius#if 0 147290001Sglebius /* Test 7 -- optional feature, not implemented */ 148290001Sglebius { 149290001Sglebius TEST_INPUT("\x49\xb2\xae\xc2\x59\x4b\xbe\x3a" 150290001Sglebius "\x3b\x11\x75\x42\xd9\x4a\xc8"), 151290001Sglebius /* "extrabits": 0x80, "numberextrabits": 3 */ 152290001Sglebius "0x6239781E03729919C01955B3FFA8ACB60B988340", 1 }, 153290001Sglebius#endif 154290001Sglebius /* Test 8 */ 155290001Sglebius { 156290001Sglebius TEST_INPUT("\x9a\x7d\xfd\xf1\xec\xea\xd0\x6e\xd6\x46" 157290001Sglebius "\xaa\x55\xfe\x75\x71\x46"), 158290001Sglebius "0x82ABFF6605DBE1C17DEF12A394FA22A82B544A35", 159290001Sglebius 1 160290001Sglebius }, 161290001Sglebius#if 0 162290001Sglebius /* Test 9 -- optional feature, not implemented */ 163290001Sglebius { 164290001Sglebius TEST_INPUT("\x65\xf9\x32\x99\x5b\xa4\xce\x2c\xb1\xb4" 165290001Sglebius "\xa2\xe7\x1a\xe7\x02\x20\xaa\xce\xc8\x96" 166290001Sglebius "\x2d\xd4\x49\x9c\xbd\x7c\x88\x7a\x94\xea" 167290001Sglebius "\xaa\x10\x1e\xa5\xaa\xbc\x52\x9b\x4e\x7e" 168290001Sglebius "\x43\x66\x5a\x5a\xf2\xcd\x03\xfe\x67\x8e" 169290001Sglebius "\xa6\xa5\x00\x5b\xba\x3b\x08\x22\x04\xc2" 170290001Sglebius "\x8b\x91\x09\xf4\x69\xda\xc9\x2a\xaa\xb3" 171290001Sglebius "\xaa\x7c\x11\xa1\xb3\x2a"), 172290001Sglebius /* "extrabits": 0xE0 , "numberextrabits": 3 */ 173290001Sglebius "0x8C5B2A5DDAE5A97FC7F9D85661C672ADBF7933D4", 174290001Sglebius 1 175290001Sglebius }, 176290001Sglebius#endif 177290001Sglebius /* Test 10 */ 178290001Sglebius { 179290001Sglebius TEST_INPUT("\xf7\x8f\x92\x14\x1b\xcd\x17\x0a\xe8\x9b" 180290001Sglebius "\x4f\xba\x15\xa1\xd5\x9f\x3f\xd8\x4d\x22" 181290001Sglebius "\x3c\x92\x51\xbd\xac\xbb\xae\x61\xd0\x5e" 182290001Sglebius "\xd1\x15\xa0\x6a\x7c\xe1\x17\xb7\xbe\xea" 183290001Sglebius "\xd2\x44\x21\xde\xd9\xc3\x25\x92\xbd\x57" 184290001Sglebius "\xed\xea\xe3\x9c\x39\xfa\x1f\xe8\x94\x6a" 185290001Sglebius "\x84\xd0\xcf\x1f\x7b\xee\xad\x17\x13\xe2" 186290001Sglebius "\xe0\x95\x98\x97\x34\x7f\x67\xc8\x0b\x04" 187290001Sglebius "\x00\xc2\x09\x81\x5d\x6b\x10\xa6\x83\x83" 188290001Sglebius "\x6f\xd5\x56\x2a\x56\xca\xb1\xa2\x8e\x81" 189290001Sglebius "\xb6\x57\x66\x54\x63\x1c\xf1\x65\x66\xb8" 190290001Sglebius "\x6e\x3b\x33\xa1\x08\xb0\x53\x07\xc0\x0a" 191290001Sglebius "\xff\x14\xa7\x68\xed\x73\x50\x60\x6a\x0f" 192290001Sglebius "\x85\xe6\xa9\x1d\x39\x6f\x5b\x5c\xbe\x57" 193290001Sglebius "\x7f\x9b\x38\x80\x7c\x7d\x52\x3d\x6d\x79" 194290001Sglebius "\x2f\x6e\xbc\x24\xa4\xec\xf2\xb3\xa4\x27" 195290001Sglebius "\xcd\xbb\xfb"), 196290001Sglebius "0xCB0082C8F197D260991BA6A460E76E202BAD27B3", 197290001Sglebius 1 198290001Sglebius }, 199290001Sglebius { NULL, 0, NULL, 1 } 200290001Sglebius }; 201290001Sglebius 202290001Sglebius hash_testcase_t *testcase = testcases; 203290001Sglebius 204290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 205290001Sglebius isc_sha1_init(&sha1); 206290001Sglebius for(i = 0; i < testcase->repeats; i++) { 207290001Sglebius isc_sha1_update(&sha1, 208290001Sglebius (const isc_uint8_t *) testcase->input, 209290001Sglebius testcase->input_len); 210290001Sglebius } 211290001Sglebius isc_sha1_final(&sha1, digest); 212290001Sglebius tohexstr(digest, ISC_SHA1_DIGESTLENGTH, str); 213290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 214290001Sglebius 215290001Sglebius testcase++; 216290001Sglebius } 217290001Sglebius} 218290001Sglebius 219290001Sglebius 220290001SglebiusATF_TC(isc_sha224); 221290001SglebiusATF_TC_HEAD(isc_sha224, tc) { 222290001Sglebius atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634"); 223290001Sglebius} 224290001SglebiusATF_TC_BODY(isc_sha224, tc) { 225290001Sglebius isc_sha224_t sha224; 226290001Sglebius 227290001Sglebius UNUSED(tc); 228290001Sglebius 229290001Sglebius /* 230290001Sglebius * These are the various test vectors. All of these are passed 231290001Sglebius * through the hash function and the results are compared to the 232290001Sglebius * result specified here. 233290001Sglebius */ 234290001Sglebius hash_testcase_t testcases[] = { 235290001Sglebius /* Test 1 */ 236290001Sglebius { 237290001Sglebius TEST_INPUT("abc"), 238290001Sglebius "0x23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7" 239290001Sglebius "E36C9DA7", 240290001Sglebius 1 241290001Sglebius }, 242290001Sglebius /* Test 2 */ 243290001Sglebius { 244290001Sglebius TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijklj" 245290001Sglebius "klmklmnlmnomnopnopq"), 246290001Sglebius "0x75388B16512776CC5DBA5DA1FD890150B0C6455CB4F58B" 247290001Sglebius "1952522525", 248290001Sglebius 1 249290001Sglebius }, 250290001Sglebius /* Test 3 */ 251290001Sglebius { 252290001Sglebius TEST_INPUT("a"), 253290001Sglebius "0x20794655980C91D8BBB4C1EA97618A4BF03F42581948B2" 254290001Sglebius "EE4EE7AD67", 255290001Sglebius 1000000 256290001Sglebius }, 257290001Sglebius /* Test 4 */ 258290001Sglebius { 259290001Sglebius TEST_INPUT("01234567012345670123456701234567"), 260290001Sglebius "0x567F69F168CD7844E65259CE658FE7AADFA25216E68ECA" 261290001Sglebius "0EB7AB8262", 262290001Sglebius 20 263290001Sglebius }, 264290001Sglebius#if 0 265290001Sglebius /* Test 5 -- unimplemented optional functionality */ 266290001Sglebius { 267290001Sglebius TEST_INPUT(""), 268290001Sglebius "0xXXX", 269290001Sglebius 1 270290001Sglebius }, 271290001Sglebius#endif 272290001Sglebius /* Test 6 */ 273290001Sglebius { 274290001Sglebius TEST_INPUT("\x07"), 275290001Sglebius "0x00ECD5F138422B8AD74C9799FD826C531BAD2FCABC7450" 276290001Sglebius "BEE2AA8C2A", 277290001Sglebius 1 278290001Sglebius }, 279290001Sglebius#if 0 280290001Sglebius /* Test 7 -- unimplemented optional functionality */ 281290001Sglebius { 282290001Sglebius TEST_INPUT(""), 283290001Sglebius "0xXXX", 284290001Sglebius 1 285290001Sglebius }, 286290001Sglebius#endif 287290001Sglebius /* Test 8 */ 288290001Sglebius { 289290001Sglebius TEST_INPUT("\x18\x80\x40\x05\xdd\x4f\xbd\x15\x56\x29" 290290001Sglebius "\x9d\x6f\x9d\x93\xdf\x62"), 291290001Sglebius "0xDF90D78AA78821C99B40BA4C966921ACCD8FFB1E98AC38" 292290001Sglebius "8E56191DB1", 293290001Sglebius 1 294290001Sglebius }, 295290001Sglebius#if 0 296290001Sglebius /* Test 9 */ 297290001Sglebius { 298290001Sglebius TEST_INPUT(""), 299290001Sglebius "0xXXX", 300290001Sglebius 1 301290001Sglebius }, 302290001Sglebius#endif 303290001Sglebius /* Test 10 */ 304290001Sglebius { 305290001Sglebius TEST_INPUT("\x55\xb2\x10\x07\x9c\x61\xb5\x3a\xdd\x52" 306290001Sglebius "\x06\x22\xd1\xac\x97\xd5\xcd\xbe\x8c\xb3" 307290001Sglebius "\x3a\xa0\xae\x34\x45\x17\xbe\xe4\xd7\xba" 308290001Sglebius "\x09\xab\xc8\x53\x3c\x52\x50\x88\x7a\x43" 309290001Sglebius "\xbe\xbb\xac\x90\x6c\x2e\x18\x37\xf2\x6b" 310290001Sglebius "\x36\xa5\x9a\xe3\xbe\x78\x14\xd5\x06\x89" 311290001Sglebius "\x6b\x71\x8b\x2a\x38\x3e\xcd\xac\x16\xb9" 312290001Sglebius "\x61\x25\x55\x3f\x41\x6f\xf3\x2c\x66\x74" 313290001Sglebius "\xc7\x45\x99\xa9\x00\x53\x86\xd9\xce\x11" 314290001Sglebius "\x12\x24\x5f\x48\xee\x47\x0d\x39\x6c\x1e" 315290001Sglebius "\xd6\x3b\x92\x67\x0c\xa5\x6e\xc8\x4d\xee" 316290001Sglebius "\xa8\x14\xb6\x13\x5e\xca\x54\x39\x2b\xde" 317290001Sglebius "\xdb\x94\x89\xbc\x9b\x87\x5a\x8b\xaf\x0d" 318290001Sglebius "\xc1\xae\x78\x57\x36\x91\x4a\xb7\xda\xa2" 319290001Sglebius "\x64\xbc\x07\x9d\x26\x9f\x2c\x0d\x7e\xdd" 320290001Sglebius "\xd8\x10\xa4\x26\x14\x5a\x07\x76\xf6\x7c" 321290001Sglebius "\x87\x82\x73"), 322290001Sglebius "0x0B31894EC8937AD9B91BDFBCBA294D9ADEFAA18E09305E" 323290001Sglebius "9F20D5C3A4", 324290001Sglebius 1 325290001Sglebius }, 326290001Sglebius { NULL, 0, NULL, 1 } 327290001Sglebius }; 328290001Sglebius 329290001Sglebius hash_testcase_t *testcase = testcases; 330290001Sglebius 331290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 332290001Sglebius isc_sha224_init(&sha224); 333290001Sglebius for(i = 0; i < testcase->repeats; i++) { 334290001Sglebius isc_sha224_update(&sha224, 335290001Sglebius (const isc_uint8_t *) testcase->input, 336290001Sglebius testcase->input_len); 337290001Sglebius } 338290001Sglebius isc_sha224_final(digest, &sha224); 339290001Sglebius /* 340290001Sglebius *API inconsistency BUG HERE 341290001Sglebius * in order to be consistant with the other isc_hash_final 342290001Sglebius * functions the call should be 343290001Sglebius * isc_sha224_final(&sha224, digest); 344290001Sglebius */ 345290001Sglebius tohexstr(digest, ISC_SHA224_DIGESTLENGTH, str); 346290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 347290001Sglebius 348290001Sglebius testcase++; 349290001Sglebius } 350290001Sglebius 351290001Sglebius} 352290001Sglebius 353290001SglebiusATF_TC(isc_sha256); 354290001SglebiusATF_TC_HEAD(isc_sha256, tc) { 355290001Sglebius atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634"); 356290001Sglebius} 357290001SglebiusATF_TC_BODY(isc_sha256, tc) { 358290001Sglebius isc_sha256_t sha256; 359290001Sglebius 360290001Sglebius UNUSED(tc); 361290001Sglebius 362290001Sglebius /* 363290001Sglebius * These are the various test vectors. All of these are passed 364290001Sglebius * through the hash function and the results are compared to the 365290001Sglebius * result specified here. 366290001Sglebius */ 367290001Sglebius hash_testcase_t testcases[] = { 368290001Sglebius /* Test 1 */ 369290001Sglebius { 370290001Sglebius TEST_INPUT("abc"), 371290001Sglebius "0xBA7816BF8F01CFEA414140DE5DAE2223B00361A396177A" 372290001Sglebius "9CB410FF61F20015AD", 373290001Sglebius 1 374290001Sglebius }, 375290001Sglebius /* Test 2 */ 376290001Sglebius { 377290001Sglebius TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijkljk" 378290001Sglebius "lmklmnlmnomnopnopq"), 379290001Sglebius "0x248D6A61D20638B8E5C026930C3E6039A33CE45964FF21" 380290001Sglebius "67F6ECEDD419DB06C1", 381290001Sglebius 1 382290001Sglebius }, 383290001Sglebius /* Test 3 */ 384290001Sglebius { 385290001Sglebius TEST_INPUT("a"), 386290001Sglebius "0xCDC76E5C9914FB9281A1C7E284D73E67F1809A48A49720" 387290001Sglebius "0E046D39CCC7112CD0", 388290001Sglebius 1000000 }, 389290001Sglebius /* Test 4 */ 390290001Sglebius { 391290001Sglebius TEST_INPUT("01234567012345670123456701234567"), 392290001Sglebius "0x594847328451BDFA85056225462CC1D867D877FB388DF0" 393290001Sglebius "CE35F25AB5562BFBB5", 394290001Sglebius 20 395290001Sglebius }, 396290001Sglebius#if 0 397290001Sglebius /* Test 5 -- unimplemented optional functionality */ 398290001Sglebius { 399290001Sglebius TEST_INPUT(""), 400290001Sglebius "0xXXX", 401290001Sglebius 1 402290001Sglebius }, 403290001Sglebius#endif 404290001Sglebius /* Test 6 */ 405290001Sglebius { 406290001Sglebius TEST_INPUT("\x19"), 407290001Sglebius "0x68AA2E2EE5DFF96E3355E6C7EE373E3D6A4E17F75F9518" 408290001Sglebius "D843709C0C9BC3E3D4", 409290001Sglebius 1 410290001Sglebius }, 411290001Sglebius#if 0 412290001Sglebius /* Test 7 -- unimplemented optional functionality */ 413290001Sglebius { 414290001Sglebius TEST_INPUT(""), 415290001Sglebius "0xXXX", 416290001Sglebius 1 417290001Sglebius }, 418290001Sglebius#endif 419290001Sglebius /* Test 8 */ 420290001Sglebius { 421290001Sglebius TEST_INPUT("\xe3\xd7\x25\x70\xdc\xdd\x78\x7c\xe3" 422290001Sglebius "\x88\x7a\xb2\xcd\x68\x46\x52"), 423290001Sglebius "0x175EE69B02BA9B58E2B0A5FD13819CEA573F3940A94F82" 424290001Sglebius "5128CF4209BEABB4E8", 425290001Sglebius 1 426290001Sglebius }, 427290001Sglebius#if 0 428290001Sglebius /* Test 9 -- unimplemented optional functionality */ 429290001Sglebius { 430290001Sglebius TEST_INPUT(""), 431290001Sglebius "0xXXX", 432290001Sglebius 1 433290001Sglebius }, 434290001Sglebius#endif 435290001Sglebius /* Test 10 */ 436290001Sglebius { 437290001Sglebius TEST_INPUT("\x83\x26\x75\x4e\x22\x77\x37\x2f\x4f\xc1" 438290001Sglebius "\x2b\x20\x52\x7a\xfe\xf0\x4d\x8a\x05\x69" 439290001Sglebius "\x71\xb1\x1a\xd5\x71\x23\xa7\xc1\x37\x76" 440290001Sglebius "\x00\x00\xd7\xbe\xf6\xf3\xc1\xf7\xa9\x08" 441290001Sglebius "\x3a\xa3\x9d\x81\x0d\xb3\x10\x77\x7d\xab" 442290001Sglebius "\x8b\x1e\x7f\x02\xb8\x4a\x26\xc7\x73\x32" 443290001Sglebius "\x5f\x8b\x23\x74\xde\x7a\x4b\x5a\x58\xcb" 444290001Sglebius "\x5c\x5c\xf3\x5b\xce\xe6\xfb\x94\x6e\x5b" 445290001Sglebius "\xd6\x94\xfa\x59\x3a\x8b\xeb\x3f\x9d\x65" 446290001Sglebius "\x92\xec\xed\xaa\x66\xca\x82\xa2\x9d\x0c" 447290001Sglebius "\x51\xbc\xf9\x33\x62\x30\xe5\xd7\x84\xe4" 448290001Sglebius "\xc0\xa4\x3f\x8d\x79\xa3\x0a\x16\x5c\xba" 449290001Sglebius "\xbe\x45\x2b\x77\x4b\x9c\x71\x09\xa9\x7d" 450290001Sglebius "\x13\x8f\x12\x92\x28\x96\x6f\x6c\x0a\xdc" 451290001Sglebius "\x10\x6a\xad\x5a\x9f\xdd\x30\x82\x57\x69" 452290001Sglebius "\xb2\xc6\x71\xaf\x67\x59\xdf\x28\xeb\x39" 453290001Sglebius "\x3d\x54\xd6"), 454290001Sglebius "0x97DBCA7DF46D62C8A422C941DD7E835B8AD3361763F7E9" 455290001Sglebius "B2D95F4F0DA6E1CCBC", 456290001Sglebius 1 457290001Sglebius }, 458290001Sglebius { NULL, 0, NULL, 1 } 459290001Sglebius }; 460290001Sglebius 461290001Sglebius hash_testcase_t *testcase = testcases; 462290001Sglebius 463290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 464290001Sglebius isc_sha256_init(&sha256); 465290001Sglebius for(i = 0; i < testcase->repeats; i++) { 466290001Sglebius isc_sha256_update(&sha256, 467290001Sglebius (const isc_uint8_t *) testcase->input, 468290001Sglebius testcase->input_len); 469290001Sglebius } 470290001Sglebius isc_sha256_final(digest, &sha256); 471290001Sglebius /* 472290001Sglebius *API inconsistency BUG HERE 473290001Sglebius * in order to be consistant with the other isc_hash_final 474290001Sglebius * functions the call should be 475290001Sglebius * isc_sha224_final(&sha224, digest); 476290001Sglebius */ 477290001Sglebius tohexstr(digest, ISC_SHA256_DIGESTLENGTH, str); 478290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 479290001Sglebius 480290001Sglebius testcase++; 481290001Sglebius } 482290001Sglebius 483290001Sglebius} 484290001Sglebius 485290001SglebiusATF_TC(isc_sha384); 486290001SglebiusATF_TC_HEAD(isc_sha384, tc) { 487290001Sglebius atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634"); 488290001Sglebius} 489290001SglebiusATF_TC_BODY(isc_sha384, tc) { 490290001Sglebius isc_sha384_t sha384; 491290001Sglebius 492290001Sglebius UNUSED(tc); 493290001Sglebius 494290001Sglebius /* 495290001Sglebius * These are the various test vectors. All of these are passed 496290001Sglebius * through the hash function and the results are compared to the 497290001Sglebius * result specified here. 498290001Sglebius */ 499290001Sglebius hash_testcase_t testcases[] = { 500290001Sglebius /* Test 1 */ 501290001Sglebius { 502290001Sglebius TEST_INPUT("abc"), 503290001Sglebius "0xCB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1" 504290001Sglebius "631A8B605A43FF5BED8086072BA1E7CC2358BAEC" 505290001Sglebius "A134C825A7", 506290001Sglebius 1 507290001Sglebius }, 508290001Sglebius /* Test 2 */ 509290001Sglebius { 510290001Sglebius TEST_INPUT("abcdefghbcdefghicdefghijdefghijkefghijkl" 511290001Sglebius "fghijklmghijklmnhijklmnoijklmnopjklmnopq" 512290001Sglebius "klmnopqrlmnopqrsmnopqrstnopqrstu"), 513290001Sglebius "0x09330C33F71147E83D192FC782CD1B4753111B173B3B05" 514290001Sglebius "D22FA08086E3B0F712FCC7C71A557E2DB966C3E9" 515290001Sglebius "FA91746039", 516290001Sglebius 1 517290001Sglebius }, 518290001Sglebius /* Test 3 */ 519290001Sglebius { 520290001Sglebius TEST_INPUT("a"), 521290001Sglebius "0x9D0E1809716474CB086E834E310A4A1CED149E9C00F248" 522290001Sglebius "527972CEC5704C2A5B07B8B3DC38ECC4EBAE97DD" 523290001Sglebius "D87F3D8985", 524290001Sglebius 1000000 525290001Sglebius }, 526290001Sglebius /* Test 4 */ 527290001Sglebius { 528290001Sglebius TEST_INPUT("01234567012345670123456701234567"), 529290001Sglebius "0x2FC64A4F500DDB6828F6A3430B8DD72A368EB7F3A8322A" 530290001Sglebius "70BC84275B9C0B3AB00D27A5CC3C2D224AA6B61A" 531290001Sglebius "0D79FB4596", 532290001Sglebius 20 533290001Sglebius }, 534290001Sglebius#if 0 535290001Sglebius /* Test 5 -- unimplemented optional functionality */ 536290001Sglebius { 537290001Sglebius TEST_INPUT(""), 538290001Sglebius "0xXXX", 539290001Sglebius 1 540290001Sglebius }, 541290001Sglebius#endif 542290001Sglebius /* Test 6 */ 543290001Sglebius { TEST_INPUT("\xb9"), 544290001Sglebius "0xBC8089A19007C0B14195F4ECC74094FEC64F01F9092928" 545290001Sglebius "2C2FB392881578208AD466828B1C6C283D2722CF" 546290001Sglebius "0AD1AB6938", 547290001Sglebius 1 548290001Sglebius }, 549290001Sglebius#if 0 550290001Sglebius /* Test 7 -- unimplemented optional functionality */ 551290001Sglebius { 552290001Sglebius TEST_INPUT(""), 553290001Sglebius "0xXXX", 554290001Sglebius 1 555290001Sglebius }, 556290001Sglebius#endif 557290001Sglebius /* Test 8 */ 558290001Sglebius { 559290001Sglebius TEST_INPUT("\xa4\x1c\x49\x77\x79\xc0\x37\x5f\xf1" 560290001Sglebius "\x0a\x7f\x4e\x08\x59\x17\x39"), 561290001Sglebius "0xC9A68443A005812256B8EC76B00516F0DBB74FAB26D665" 562290001Sglebius "913F194B6FFB0E91EA9967566B58109CBC675CC2" 563290001Sglebius "08E4C823F7", 564290001Sglebius 1 565290001Sglebius }, 566290001Sglebius#if 0 567290001Sglebius /* Test 9 -- unimplemented optional functionality */ 568290001Sglebius { 569290001Sglebius TEST_INPUT(""), 570290001Sglebius "0xXXX", 571290001Sglebius 1 572290001Sglebius }, 573290001Sglebius#endif 574290001Sglebius /* Test 10 */ 575290001Sglebius { 576290001Sglebius TEST_INPUT("\x39\x96\x69\xe2\x8f\x6b\x9c\x6d\xbc\xbb" 577290001Sglebius "\x69\x12\xec\x10\xff\xcf\x74\x79\x03\x49" 578290001Sglebius "\xb7\xdc\x8f\xbe\x4a\x8e\x7b\x3b\x56\x21" 579290001Sglebius "\xdb\x0f\x3e\x7d\xc8\x7f\x82\x32\x64\xbb" 580290001Sglebius "\xe4\x0d\x18\x11\xc9\xea\x20\x61\xe1\xc8" 581290001Sglebius "\x4a\xd1\x0a\x23\xfa\xc1\x72\x7e\x72\x02" 582290001Sglebius "\xfc\x3f\x50\x42\xe6\xbf\x58\xcb\xa8\xa2" 583290001Sglebius "\x74\x6e\x1f\x64\xf9\xb9\xea\x35\x2c\x71" 584290001Sglebius "\x15\x07\x05\x3c\xf4\xe5\x33\x9d\x52\x86" 585290001Sglebius "\x5f\x25\xcc\x22\xb5\xe8\x77\x84\xa1\x2f" 586290001Sglebius "\xc9\x61\xd6\x6c\xb6\xe8\x95\x73\x19\x9a" 587290001Sglebius "\x2c\xe6\x56\x5c\xbd\xf1\x3d\xca\x40\x38" 588290001Sglebius "\x32\xcf\xcb\x0e\x8b\x72\x11\xe8\x3a\xf3" 589290001Sglebius "\x2a\x11\xac\x17\x92\x9f\xf1\xc0\x73\xa5" 590290001Sglebius "\x1c\xc0\x27\xaa\xed\xef\xf8\x5a\xad\x7c" 591290001Sglebius "\x2b\x7c\x5a\x80\x3e\x24\x04\xd9\x6d\x2a" 592290001Sglebius "\x77\x35\x7b\xda\x1a\x6d\xae\xed\x17\x15" 593290001Sglebius "\x1c\xb9\xbc\x51\x25\xa4\x22\xe9\x41\xde" 594290001Sglebius "\x0c\xa0\xfc\x50\x11\xc2\x3e\xcf\xfe\xfd" 595290001Sglebius "\xd0\x96\x76\x71\x1c\xf3\xdb\x0a\x34\x40" 596290001Sglebius "\x72\x0e\x16\x15\xc1\xf2\x2f\xbc\x3c\x72" 597290001Sglebius "\x1d\xe5\x21\xe1\xb9\x9b\xa1\xbd\x55\x77" 598290001Sglebius "\x40\x86\x42\x14\x7e\xd0\x96"), 599290001Sglebius "0x4F440DB1E6EDD2899FA335F09515AA025EE177A79F4B4A" 600290001Sglebius "AF38E42B5C4DE660F5DE8FB2A5B2FBD2A3CBFFD2" 601290001Sglebius "0CFF1288C0", 602290001Sglebius 1 603290001Sglebius }, 604290001Sglebius { NULL, 0, NULL, 1 } 605290001Sglebius }; 606290001Sglebius 607290001Sglebius hash_testcase_t *testcase = testcases; 608290001Sglebius 609290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 610290001Sglebius isc_sha384_init(&sha384); 611290001Sglebius for(i = 0; i < testcase->repeats; i++) { 612290001Sglebius isc_sha384_update(&sha384, 613290001Sglebius (const isc_uint8_t *) testcase->input, 614290001Sglebius testcase->input_len); 615290001Sglebius } 616290001Sglebius isc_sha384_final(digest, &sha384); 617290001Sglebius /* 618290001Sglebius *API inconsistency BUG HERE 619290001Sglebius * in order to be consistant with the other isc_hash_final 620290001Sglebius * functions the call should be 621290001Sglebius * isc_sha224_final(&sha224, digest); 622290001Sglebius */ 623290001Sglebius tohexstr(digest, ISC_SHA384_DIGESTLENGTH, str); 624290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 625290001Sglebius 626290001Sglebius testcase++; 627290001Sglebius } 628290001Sglebius 629290001Sglebius} 630290001Sglebius 631290001SglebiusATF_TC(isc_sha512); 632290001SglebiusATF_TC_HEAD(isc_sha512, tc) { 633290001Sglebius atf_tc_set_md_var(tc, "descr", "sha224 examples from RFC4634"); 634290001Sglebius} 635290001SglebiusATF_TC_BODY(isc_sha512, tc) { 636290001Sglebius isc_sha512_t sha512; 637290001Sglebius 638290001Sglebius UNUSED(tc); 639290001Sglebius 640290001Sglebius /* 641290001Sglebius * These are the various test vectors. All of these are passed 642290001Sglebius * through the hash function and the results are compared to the 643290001Sglebius * result specified here. 644290001Sglebius */ 645290001Sglebius hash_testcase_t testcases[] = { 646290001Sglebius /* Test 1 */ 647290001Sglebius { 648290001Sglebius TEST_INPUT("abc"), 649290001Sglebius "0xDDAF35A193617ABACC417349AE20413112E6FA4E89A97E" 650290001Sglebius "A20A9EEEE64B55D39A2192992A274FC1A836BA3C" 651290001Sglebius "23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F", 652290001Sglebius 1 653290001Sglebius }, 654290001Sglebius /* Test 2 */ 655290001Sglebius { 656290001Sglebius TEST_INPUT("abcdefghbcdefghicdefghijdefghijkefghijkl" 657290001Sglebius "fghijklmghijklmnhijklmnoijklmnopjklmnopq" 658290001Sglebius "klmnopqrlmnopqrsmnopqrstnopqrstu"), 659290001Sglebius "0x8E959B75DAE313DA8CF4F72814FC143F8F7779C6EB9F7F" 660290001Sglebius "A17299AEADB6889018501D289E4900F7E4331B99" 661290001Sglebius "DEC4B5433AC7D329EEB6DD26545E96E55B874BE909", 662290001Sglebius 1 663290001Sglebius }, 664290001Sglebius /* Test 3 */ 665290001Sglebius { 666290001Sglebius TEST_INPUT("a"), 667290001Sglebius "0xE718483D0CE769644E2E42C7BC15B4638E1F98B13B2044" 668290001Sglebius "285632A803AFA973EBDE0FF244877EA60A4CB043" 669290001Sglebius "2CE577C31BEB009C5C2C49AA2E4EADB217AD8CC09B", 670290001Sglebius 1000000 671290001Sglebius }, 672290001Sglebius /* Test 4 */ 673290001Sglebius { 674290001Sglebius TEST_INPUT("01234567012345670123456701234567"), 675290001Sglebius "0x89D05BA632C699C31231DED4FFC127D5A894DAD412C0E0" 676290001Sglebius "24DB872D1ABD2BA8141A0F85072A9BE1E2AA04CF" 677290001Sglebius "33C765CB510813A39CD5A84C4ACAA64D3F3FB7BAE9", 678290001Sglebius 20 679290001Sglebius }, 680290001Sglebius#if 0 681290001Sglebius /* Test 5 -- unimplemented optional functionality */ 682290001Sglebius { 683290001Sglebius TEST_INPUT(""), 684290001Sglebius "0xXXX", 685290001Sglebius 1 686290001Sglebius }, 687290001Sglebius#endif 688290001Sglebius /* Test 6 */ 689290001Sglebius { 690290001Sglebius TEST_INPUT("\xD0"), 691290001Sglebius "0x9992202938E882E73E20F6B69E68A0A7149090423D93C8" 692290001Sglebius "1BAB3F21678D4ACEEEE50E4E8CAFADA4C85A54EA" 693290001Sglebius "8306826C4AD6E74CECE9631BFA8A549B4AB3FBBA15", 694290001Sglebius 1 695290001Sglebius }, 696290001Sglebius#if 0 697290001Sglebius /* Test 7 -- unimplemented optional functionality */ 698290001Sglebius { 699290001Sglebius TEST_INPUT(""), 700290001Sglebius "0xXXX", 701290001Sglebius 1 702290001Sglebius }, 703290001Sglebius#endif 704290001Sglebius /* Test 8 */ 705290001Sglebius { 706290001Sglebius TEST_INPUT("\x8d\x4e\x3c\x0e\x38\x89\x19\x14\x91\x81" 707290001Sglebius "\x6e\x9d\x98\xbf\xf0\xa0"), 708290001Sglebius "0xCB0B67A4B8712CD73C9AABC0B199E9269B20844AFB75AC" 709290001Sglebius "BDD1C153C9828924C3DDEDAAFE669C5FDD0BC66F" 710290001Sglebius "630F6773988213EB1B16F517AD0DE4B2F0C95C90F8", 711290001Sglebius 1 712290001Sglebius }, 713290001Sglebius#if 0 714290001Sglebius /* Test 9 -- unimplemented optional functionality */ 715290001Sglebius { 716290001Sglebius TEST_INPUT(""), 717290001Sglebius "0xXXX", 718290001Sglebius 1 719290001Sglebius }, 720290001Sglebius#endif 721290001Sglebius /* Test 10 */ 722290001Sglebius { 723290001Sglebius TEST_INPUT("\xa5\x5f\x20\xc4\x11\xaa\xd1\x32\x80\x7a" 724290001Sglebius "\x50\x2d\x65\x82\x4e\x31\xa2\x30\x54\x32" 725290001Sglebius "\xaa\x3d\x06\xd3\xe2\x82\xa8\xd8\x4e\x0d" 726290001Sglebius "\xe1\xde\x69\x74\xbf\x49\x54\x69\xfc\x7f" 727290001Sglebius "\x33\x8f\x80\x54\xd5\x8c\x26\xc4\x93\x60" 728290001Sglebius "\xc3\xe8\x7a\xf5\x65\x23\xac\xf6\xd8\x9d" 729290001Sglebius "\x03\xe5\x6f\xf2\xf8\x68\x00\x2b\xc3\xe4" 730290001Sglebius "\x31\xed\xc4\x4d\xf2\xf0\x22\x3d\x4b\xb3" 731290001Sglebius "\xb2\x43\x58\x6e\x1a\x7d\x92\x49\x36\x69" 732290001Sglebius "\x4f\xcb\xba\xf8\x8d\x95\x19\xe4\xeb\x50" 733290001Sglebius "\xa6\x44\xf8\xe4\xf9\x5e\xb0\xea\x95\xbc" 734290001Sglebius "\x44\x65\xc8\x82\x1a\xac\xd2\xfe\x15\xab" 735290001Sglebius "\x49\x81\x16\x4b\xbb\x6d\xc3\x2f\x96\x90" 736290001Sglebius "\x87\xa1\x45\xb0\xd9\xcc\x9c\x67\xc2\x2b" 737290001Sglebius "\x76\x32\x99\x41\x9c\xc4\x12\x8b\xe9\xa0" 738290001Sglebius "\x77\xb3\xac\xe6\x34\x06\x4e\x6d\x99\x28" 739290001Sglebius "\x35\x13\xdc\x06\xe7\x51\x5d\x0d\x73\x13" 740290001Sglebius "\x2e\x9a\x0d\xc6\xd3\xb1\xf8\xb2\x46\xf1" 741290001Sglebius "\xa9\x8a\x3f\xc7\x29\x41\xb1\xe3\xbb\x20" 742290001Sglebius "\x98\xe8\xbf\x16\xf2\x68\xd6\x4f\x0b\x0f" 743290001Sglebius "\x47\x07\xfe\x1e\xa1\xa1\x79\x1b\xa2\xf3" 744290001Sglebius "\xc0\xc7\x58\xe5\xf5\x51\x86\x3a\x96\xc9" 745290001Sglebius "\x49\xad\x47\xd7\xfb\x40\xd2"), 746290001Sglebius "0xC665BEFB36DA189D78822D10528CBF3B12B3EEF7260399" 747290001Sglebius "09C1A16A270D48719377966B957A878E72058477" 748290001Sglebius "9A62825C18DA26415E49A7176A894E7510FD1451F5", 749290001Sglebius 1 750290001Sglebius }, 751290001Sglebius { NULL, 0, NULL, 1 } 752290001Sglebius }; 753290001Sglebius 754290001Sglebius hash_testcase_t *testcase = testcases; 755290001Sglebius 756290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 757290001Sglebius isc_sha512_init(&sha512); 758290001Sglebius for(i = 0; i < testcase->repeats; i++) { 759290001Sglebius isc_sha512_update(&sha512, 760290001Sglebius (const isc_uint8_t *) testcase->input, 761290001Sglebius testcase->input_len); 762290001Sglebius } 763290001Sglebius isc_sha512_final(digest, &sha512); 764290001Sglebius /* 765290001Sglebius *API inconsistency BUG HERE 766290001Sglebius * in order to be consistant with the other isc_hash_final 767290001Sglebius * functions the call should be 768290001Sglebius * isc_sha224_final(&sha224, digest); 769290001Sglebius */ 770290001Sglebius tohexstr(digest, ISC_SHA512_DIGESTLENGTH, str); 771290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 772290001Sglebius 773290001Sglebius testcase++; 774290001Sglebius } 775290001Sglebius 776290001Sglebius} 777290001Sglebius 778290001SglebiusATF_TC(isc_md5); 779290001SglebiusATF_TC_HEAD(isc_md5, tc) { 780290001Sglebius atf_tc_set_md_var(tc, "descr", "md5 example from RFC1321"); 781290001Sglebius} 782290001SglebiusATF_TC_BODY(isc_md5, tc) { 783290001Sglebius isc_md5_t md5; 784290001Sglebius 785290001Sglebius UNUSED(tc); 786290001Sglebius 787290001Sglebius /* 788290001Sglebius * These are the various test vectors. All of these are passed 789290001Sglebius * through the hash function and the results are compared to the 790290001Sglebius * result specified here. 791290001Sglebius */ 792290001Sglebius hash_testcase_t testcases[] = { 793290001Sglebius { 794290001Sglebius TEST_INPUT(""), 795290001Sglebius "0xD41D8CD98F00B204E9800998ECF8427E", 796290001Sglebius 1 797290001Sglebius }, 798290001Sglebius { 799290001Sglebius TEST_INPUT("a"), 800290001Sglebius "0x0CC175B9C0F1B6A831C399E269772661", 801290001Sglebius 1 802290001Sglebius }, 803290001Sglebius { 804290001Sglebius TEST_INPUT("abc"), 805290001Sglebius "0x900150983CD24FB0D6963F7D28E17F72", 806290001Sglebius 1 807290001Sglebius }, 808290001Sglebius { 809290001Sglebius TEST_INPUT("message digest"), 810290001Sglebius "0xF96B697D7CB7938D525A2F31AAF161D0", 811290001Sglebius 1 812290001Sglebius }, 813290001Sglebius { 814290001Sglebius TEST_INPUT("abcdefghijklmnopqrstuvwxyz"), 815290001Sglebius "0xC3FCD3D76192E4007DFB496CCA67E13B", 816290001Sglebius 1 817290001Sglebius }, 818290001Sglebius { 819290001Sglebius TEST_INPUT("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm" 820290001Sglebius "nopqrstuvwxyz0123456789"), 821290001Sglebius "0xD174AB98D277D9F5A5611C2C9F419D9F", 822290001Sglebius 1 823290001Sglebius }, 824290001Sglebius { 825290001Sglebius TEST_INPUT("123456789012345678901234567890123456789" 826290001Sglebius "01234567890123456789012345678901234567890"), 827290001Sglebius "0x57EDF4A22BE3C955AC49DA2E2107B67A", 828290001Sglebius 1 829290001Sglebius }, 830290001Sglebius { NULL, 0, NULL, 1 } 831290001Sglebius }; 832290001Sglebius 833290001Sglebius hash_testcase_t *testcase = testcases; 834290001Sglebius 835290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 836290001Sglebius isc_md5_init(&md5); 837290001Sglebius for(i = 0; i < testcase->repeats; i++) { 838290001Sglebius isc_md5_update(&md5, 839290001Sglebius (const isc_uint8_t *) testcase->input, 840290001Sglebius testcase->input_len); 841290001Sglebius } 842290001Sglebius isc_md5_final(&md5, digest); 843290001Sglebius tohexstr(digest, ISC_MD5_DIGESTLENGTH, str); 844290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 845290001Sglebius 846290001Sglebius testcase++; 847290001Sglebius } 848290001Sglebius} 849290001Sglebius 850290001Sglebius/* HMAC-SHA1 test */ 851290001SglebiusATF_TC(isc_hmacsha1); 852290001SglebiusATF_TC_HEAD(isc_hmacsha1, tc) { 853290001Sglebius atf_tc_set_md_var(tc, "descr", "HMAC-SHA1 examples from RFC2104"); 854290001Sglebius} 855290001SglebiusATF_TC_BODY(isc_hmacsha1, tc) { 856290001Sglebius isc_hmacsha1_t hmacsha1; 857290001Sglebius 858290001Sglebius UNUSED(tc); 859290001Sglebius /* 860290001Sglebius * These are the various test vectors. All of these are passed 861290001Sglebius * through the hash function and the results are compared to the 862290001Sglebius * result specified here. 863290001Sglebius */ 864290001Sglebius hash_testcase_t testcases[] = { 865290001Sglebius /* Test 1 */ 866290001Sglebius { 867290001Sglebius TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 868290001Sglebius "0xB617318655057264E28BC0B6FB378C8EF146BE00", 869290001Sglebius 1 870290001Sglebius }, 871290001Sglebius /* Test 2 */ 872290001Sglebius { 873290001Sglebius TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 874290001Sglebius "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 875290001Sglebius "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 876290001Sglebius "0xEFFCDF6AE5EB2FA2D27416D5F184DF9C259A7C79", 877290001Sglebius 1 878290001Sglebius }, 879290001Sglebius /* Test 3 */ 880290001Sglebius { 881290001Sglebius TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 882290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 883290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 884290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 885290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 886290001Sglebius "0x125D7342B9AC11CD91A39AF48AA17B4F63F175D3", 887290001Sglebius 1 888290001Sglebius }, 889290001Sglebius /* Test 4 */ 890290001Sglebius { 891290001Sglebius TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 892290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 893290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 894290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 895290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 896290001Sglebius "0x4C9007F4026250C6BC8414F9BF50C86C2D7235DA", 897290001Sglebius 1 898290001Sglebius }, 899290001Sglebius#if 0 900290001Sglebius /* Test 5 -- unimplemented optional functionality */ 901290001Sglebius { 902290001Sglebius TEST_INPUT("Test With Truncation"), 903290001Sglebius "0x4C1A03424B55E07FE7F27BE1", 904290001Sglebius 1 905290001Sglebius }, 906290001Sglebius#endif 907290001Sglebius /* Test 6 */ 908290001Sglebius { 909290001Sglebius TEST_INPUT("Test Using Larger Than Block-Size Key - " 910290001Sglebius "Hash Key First"), 911290001Sglebius "0xAA4AE5E15272D00E95705637CE8A3B55ED402112", 1 }, 912290001Sglebius /* Test 7 */ 913290001Sglebius { 914290001Sglebius TEST_INPUT("Test Using Larger Than Block-Size Key and " 915290001Sglebius "Larger Than One Block-Size Data"), 916290001Sglebius "0xE8E99D0F45237D786D6BBAA7965C7808BBFF1A91", 917290001Sglebius 1 918290001Sglebius }, 919290001Sglebius { NULL, 0, NULL, 1 } 920290001Sglebius }; 921290001Sglebius 922290001Sglebius hash_testcase_t *testcase = testcases; 923290001Sglebius 924290001Sglebius hash_test_key_t test_keys[] = { 925290001Sglebius /* Key 1 */ 926290001Sglebius { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 927290001Sglebius "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 928290001Sglebius /* Key 2 */ 929290001Sglebius { "Jefe", 4 }, 930290001Sglebius /* Key 3 */ 931290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 932290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 933290001Sglebius /* Key 4 */ 934290001Sglebius { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 935290001Sglebius "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 936290001Sglebius "\x15\x16\x17\x18\x19", 25 }, 937290001Sglebius#if 0 938290001Sglebius /* Key 5 */ 939290001Sglebius { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 940290001Sglebius "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 941290001Sglebius#endif 942290001Sglebius /* Key 6 */ 943290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 944290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 945290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 946290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 947290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 948290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 949290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 950290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80 }, 951290001Sglebius /* Key 7 */ 952290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 953290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 954290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 955290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 956290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 957290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 958290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 959290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80 }, 960290001Sglebius { "", 0 } 961290001Sglebius }; 962290001Sglebius 963290001Sglebius hash_test_key_t *test_key = test_keys; 964290001Sglebius 965290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 966290001Sglebius memcpy(buffer, test_key->key, test_key->len); 967290001Sglebius isc_hmacsha1_init(&hmacsha1, buffer, test_key->len); 968290001Sglebius isc_hmacsha1_update(&hmacsha1, 969290001Sglebius (const isc_uint8_t *) testcase->input, 970290001Sglebius testcase->input_len); 971290001Sglebius isc_hmacsha1_sign(&hmacsha1, digest, ISC_SHA1_DIGESTLENGTH); 972290001Sglebius tohexstr(digest, ISC_SHA1_DIGESTLENGTH, str); 973290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 974290001Sglebius 975290001Sglebius testcase++; 976290001Sglebius test_key++; 977290001Sglebius } 978290001Sglebius} 979290001Sglebius 980290001Sglebius/* HMAC-SHA224 test */ 981290001SglebiusATF_TC(isc_hmacsha224); 982290001SglebiusATF_TC_HEAD(isc_hmacsha224, tc) { 983290001Sglebius atf_tc_set_md_var(tc, "descr", "HMAC-SHA224 examples from RFC4634"); 984290001Sglebius} 985290001SglebiusATF_TC_BODY(isc_hmacsha224, tc) { 986290001Sglebius isc_hmacsha224_t hmacsha224; 987290001Sglebius 988290001Sglebius UNUSED(tc); 989290001Sglebius 990290001Sglebius /* 991290001Sglebius * These are the various test vectors. All of these are passed 992290001Sglebius * through the hash function and the results are compared to the 993290001Sglebius * result specified here. 994290001Sglebius */ 995290001Sglebius hash_testcase_t testcases[] = { 996290001Sglebius /* Test 1 */ 997290001Sglebius { 998290001Sglebius TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 999290001Sglebius "0x896FB1128ABBDF196832107CD49DF33F47B4B1169912BA" 1000290001Sglebius "4F53684B22", 1001290001Sglebius 1 1002290001Sglebius }, 1003290001Sglebius /* Test 2 */ 1004290001Sglebius { 1005290001Sglebius TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 1006290001Sglebius "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 1007290001Sglebius "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1008290001Sglebius "0xA30E01098BC6DBBF45690F3A7E9E6D0F8BBEA2A39E61480" 1009290001Sglebius "08FD05E44", 1010290001Sglebius 1 1011290001Sglebius }, 1012290001Sglebius /* Test 3 */ 1013290001Sglebius { 1014290001Sglebius TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1015290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1016290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1017290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1018290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1019290001Sglebius "0x7FB3CB3588C6C1F6FFA9694D7D6AD2649365B0C1F65D69" 1020290001Sglebius "D1EC8333EA", 1021290001Sglebius 1 1022290001Sglebius }, 1023290001Sglebius /* Test 4 */ 1024290001Sglebius { 1025290001Sglebius TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1026290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1027290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1028290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1029290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1030290001Sglebius "0x6C11506874013CAC6A2ABC1BB382627CEC6A90D86EFC01" 1031290001Sglebius "2DE7AFEC5A", 1032290001Sglebius 1 1033290001Sglebius }, 1034290001Sglebius#if 0 1035290001Sglebius /* Test 5 -- unimplemented optional functionality */ 1036290001Sglebius { 1037290001Sglebius TEST_INPUT("Test With Truncation"), 1038290001Sglebius "0x4C1A03424B55E07FE7F27BE1", 1039290001Sglebius 1 1040290001Sglebius }, 1041290001Sglebius#endif 1042290001Sglebius /* Test 6 */ 1043290001Sglebius { 1044290001Sglebius TEST_INPUT("Test Using Larger Than Block-Size Key - " 1045290001Sglebius "Hash Key First"), 1046290001Sglebius "0x95E9A0DB962095ADAEBE9B2D6F0DBCE2D499F112F2D2B7" 1047290001Sglebius "273FA6870E", 1048290001Sglebius 1 1049290001Sglebius }, 1050290001Sglebius /* Test 7 */ 1051290001Sglebius { 1052290001Sglebius TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20" 1053290001Sglebius "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67" 1054290001Sglebius "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20" 1055290001Sglebius "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b" 1056290001Sglebius "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20" 1057290001Sglebius "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67" 1058290001Sglebius "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c" 1059290001Sglebius "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64" 1060290001Sglebius "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b" 1061290001Sglebius "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74" 1062290001Sglebius "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65" 1063290001Sglebius "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62" 1064290001Sglebius "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20" 1065290001Sglebius "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41" 1066290001Sglebius "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68" 1067290001Sglebius "\x6d\x2e"), 1068290001Sglebius "0x3A854166AC5D9F023F54D517D0B39DBD946770DB9C2B95" 1069290001Sglebius "C9F6F565D1", 1070290001Sglebius 1 1071290001Sglebius }, 1072290001Sglebius { NULL, 0, NULL, 1 } 1073290001Sglebius }; 1074290001Sglebius 1075290001Sglebius hash_testcase_t *testcase = testcases; 1076290001Sglebius 1077290001Sglebius hash_test_key_t test_keys[] = { 1078290001Sglebius /* Key 1 */ 1079290001Sglebius { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1080290001Sglebius "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 1081290001Sglebius /* Key 2 */ 1082290001Sglebius { "Jefe", 4 }, 1083290001Sglebius /* Key 3 */ 1084290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1085290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 1086290001Sglebius /* Key 4 */ 1087290001Sglebius { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1088290001Sglebius "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1089290001Sglebius "\x15\x16\x17\x18\x19", 25 }, 1090290001Sglebius#if 0 1091290001Sglebius /* Key 5 */ 1092290001Sglebius { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1093290001Sglebius "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1094290001Sglebius#endif 1095290001Sglebius /* Key 6 */ 1096290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1097290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1098290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1099290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1100290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1101290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1102290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1103290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1104290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1105290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1106290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1107290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1108290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1109290001Sglebius /* Key 7 */ 1110290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1111290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1112290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1113290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1114290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1115290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1116290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1117290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1118290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1119290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1120290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1121290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1122290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1123290001Sglebius { "", 0 } 1124290001Sglebius }; 1125290001Sglebius 1126290001Sglebius hash_test_key_t *test_key = test_keys; 1127290001Sglebius 1128290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 1129290001Sglebius memcpy(buffer, test_key->key, test_key->len); 1130290001Sglebius isc_hmacsha224_init(&hmacsha224, buffer, test_key->len); 1131290001Sglebius isc_hmacsha224_update(&hmacsha224, 1132290001Sglebius (const isc_uint8_t *) testcase->input, 1133290001Sglebius testcase->input_len); 1134290001Sglebius isc_hmacsha224_sign(&hmacsha224, digest, ISC_SHA224_DIGESTLENGTH); 1135290001Sglebius tohexstr(digest, ISC_SHA224_DIGESTLENGTH, str); 1136290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 1137290001Sglebius 1138290001Sglebius testcase++; 1139290001Sglebius test_key++; 1140290001Sglebius } 1141290001Sglebius} 1142290001Sglebius 1143290001Sglebius/* HMAC-SHA256 test */ 1144290001SglebiusATF_TC(isc_hmacsha256); 1145290001SglebiusATF_TC_HEAD(isc_hmacsha256, tc) { 1146290001Sglebius atf_tc_set_md_var(tc, "descr", "HMAC-SHA256 examples from RFC4634"); 1147290001Sglebius} 1148290001SglebiusATF_TC_BODY(isc_hmacsha256, tc) { 1149290001Sglebius isc_hmacsha256_t hmacsha256; 1150290001Sglebius 1151290001Sglebius UNUSED(tc); 1152290001Sglebius 1153290001Sglebius /* 1154290001Sglebius * These are the various test vectors. All of these are passed 1155290001Sglebius * through the hash function and the results are compared to the 1156290001Sglebius * result specified here. 1157290001Sglebius */ 1158290001Sglebius hash_testcase_t testcases[] = { 1159290001Sglebius /* Test 1 */ 1160290001Sglebius { 1161290001Sglebius TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 1162290001Sglebius "0xB0344C61D8DB38535CA8AFCEAF0BF12B881DC200C9833D" 1163290001Sglebius "A726E9376C2E32CFF7", 1164290001Sglebius 1 1165290001Sglebius }, 1166290001Sglebius /* Test 2 */ 1167290001Sglebius { 1168290001Sglebius TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 1169290001Sglebius "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 1170290001Sglebius "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1171290001Sglebius "0x5BDCC146BF60754E6A042426089575C75A003F089D2739" 1172290001Sglebius "839DEC58B964EC3843", 1173290001Sglebius 1 1174290001Sglebius }, 1175290001Sglebius /* Test 3 */ 1176290001Sglebius { 1177290001Sglebius TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1178290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1179290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1180290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1181290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1182290001Sglebius "0x773EA91E36800E46854DB8EBD09181A72959098B3EF8C1" 1183290001Sglebius "22D9635514CED565FE", 1184290001Sglebius 1 1185290001Sglebius }, 1186290001Sglebius /* Test 4 */ 1187290001Sglebius { 1188290001Sglebius TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1189290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1190290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1191290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1192290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1193290001Sglebius "0x82558A389A443C0EA4CC819899F2083A85F0FAA3E578F8" 1194290001Sglebius "077A2E3FF46729665B", 1195290001Sglebius 1 1196290001Sglebius }, 1197290001Sglebius#if 0 1198290001Sglebius /* Test 5 -- unimplemented optional functionality */ 1199290001Sglebius { 1200290001Sglebius TEST_INPUT("Test With Truncation"), 1201290001Sglebius "0x4C1A03424B55E07FE7F27BE1", 1202290001Sglebius 1 1203290001Sglebius }, 1204290001Sglebius#endif 1205290001Sglebius /* Test 6 */ 1206290001Sglebius { 1207290001Sglebius TEST_INPUT("Test Using Larger Than Block-Size Key - " 1208290001Sglebius "Hash Key First"), 1209290001Sglebius "0x60E431591EE0B67F0D8A26AACBF5B77F8E0BC6213728C5" 1210290001Sglebius "140546040F0EE37F54", 1211290001Sglebius 1 1212290001Sglebius }, 1213290001Sglebius /* Test 7 */ 1214290001Sglebius { 1215290001Sglebius TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20" 1216290001Sglebius "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67" 1217290001Sglebius "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20" 1218290001Sglebius "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b" 1219290001Sglebius "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20" 1220290001Sglebius "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67" 1221290001Sglebius "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c" 1222290001Sglebius "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64" 1223290001Sglebius "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b" 1224290001Sglebius "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74" 1225290001Sglebius "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65" 1226290001Sglebius "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62" 1227290001Sglebius "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20" 1228290001Sglebius "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41" 1229290001Sglebius "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68" 1230290001Sglebius "\x6d\x2e"), 1231290001Sglebius "0x9B09FFA71B942FCB27635FBCD5B0E944BFDC63644F0713" 1232290001Sglebius "938A7F51535C3A35E2", 1233290001Sglebius 1 1234290001Sglebius }, 1235290001Sglebius { NULL, 0, NULL, 1 } 1236290001Sglebius }; 1237290001Sglebius 1238290001Sglebius hash_testcase_t *testcase = testcases; 1239290001Sglebius 1240290001Sglebius hash_test_key_t test_keys[] = { 1241290001Sglebius /* Key 1 */ 1242290001Sglebius { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1243290001Sglebius "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 1244290001Sglebius /* Key 2 */ 1245290001Sglebius { "Jefe", 4 }, 1246290001Sglebius /* Key 3 */ 1247290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1248290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 1249290001Sglebius /* Key 4 */ 1250290001Sglebius { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1251290001Sglebius "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1252290001Sglebius "\x15\x16\x17\x18\x19", 25 }, 1253290001Sglebius#if 0 1254290001Sglebius /* Key 5 */ 1255290001Sglebius { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1256290001Sglebius "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1257290001Sglebius#endif 1258290001Sglebius /* Key 6 */ 1259290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1260290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1261290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1262290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1263290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1264290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1265290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1266290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1267290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1268290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1269290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1270290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1271290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1272290001Sglebius /* Key 7 */ 1273290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1274290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1275290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1276290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1277290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1278290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1279290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1280290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1281290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1282290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1283290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1284290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1285290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1286290001Sglebius { "", 0 } 1287290001Sglebius }; 1288290001Sglebius 1289290001Sglebius hash_test_key_t *test_key = test_keys; 1290290001Sglebius 1291290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 1292290001Sglebius memcpy(buffer, test_key->key, test_key->len); 1293290001Sglebius isc_hmacsha256_init(&hmacsha256, buffer, test_key->len); 1294290001Sglebius isc_hmacsha256_update(&hmacsha256, 1295290001Sglebius (const isc_uint8_t *) testcase->input, 1296290001Sglebius testcase->input_len); 1297290001Sglebius isc_hmacsha256_sign(&hmacsha256, digest, ISC_SHA256_DIGESTLENGTH); 1298290001Sglebius tohexstr(digest, ISC_SHA256_DIGESTLENGTH, str); 1299290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 1300290001Sglebius 1301290001Sglebius testcase++; 1302290001Sglebius test_key++; 1303290001Sglebius } 1304290001Sglebius} 1305290001Sglebius 1306290001Sglebius/* HMAC-SHA384 test */ 1307290001SglebiusATF_TC(isc_hmacsha384); 1308290001SglebiusATF_TC_HEAD(isc_hmacsha384, tc) { 1309290001Sglebius atf_tc_set_md_var(tc, "descr", "HMAC-SHA384 examples from RFC4634"); 1310290001Sglebius} 1311290001SglebiusATF_TC_BODY(isc_hmacsha384, tc) { 1312290001Sglebius isc_hmacsha384_t hmacsha384; 1313290001Sglebius 1314290001Sglebius UNUSED(tc); 1315290001Sglebius 1316290001Sglebius /* 1317290001Sglebius * These are the various test vectors. All of these are passed 1318290001Sglebius * through the hash function and the results are compared to the 1319290001Sglebius * result specified here. 1320290001Sglebius */ 1321290001Sglebius hash_testcase_t testcases[] = { 1322290001Sglebius /* Test 1 */ 1323290001Sglebius { 1324290001Sglebius TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 1325290001Sglebius "0xAFD03944D84895626B0825F4AB46907F15F9DADBE4101E" 1326290001Sglebius "C682AA034C7CEBC59CFAEA9EA9076EDE7F4AF152" 1327290001Sglebius "E8B2FA9CB6", 1328290001Sglebius 1 1329290001Sglebius }, 1330290001Sglebius /* Test 2 */ 1331290001Sglebius { 1332290001Sglebius TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 1333290001Sglebius "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 1334290001Sglebius "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1335290001Sglebius "0xAF45D2E376484031617F78D2B58A6B1B9C7EF464F5A01B" 1336290001Sglebius "47E42EC3736322445E8E2240CA5E69E2C78B3239" 1337290001Sglebius "ECFAB21649", 1338290001Sglebius 1 1339290001Sglebius }, 1340290001Sglebius /* Test 3 */ 1341290001Sglebius { 1342290001Sglebius TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1343290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1344290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1345290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1346290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1347290001Sglebius "0x88062608D3E6AD8A0AA2ACE014C8A86F0AA635D947AC9F" 1348290001Sglebius "EBE83EF4E55966144B2A5AB39DC13814B94E3AB6" 1349290001Sglebius "E101A34F27", 1350290001Sglebius 1 1351290001Sglebius }, 1352290001Sglebius /* Test 4 */ 1353290001Sglebius { 1354290001Sglebius TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1355290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1356290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1357290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1358290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1359290001Sglebius "0x3E8A69B7783C25851933AB6290AF6CA77A998148085000" 1360290001Sglebius "9CC5577C6E1F573B4E6801DD23C4A7D679CCF8A3" 1361290001Sglebius "86C674CFFB", 1362290001Sglebius 1 1363290001Sglebius }, 1364290001Sglebius#if 0 1365290001Sglebius /* Test 5 -- unimplemented optional functionality */ 1366290001Sglebius { 1367290001Sglebius TEST_INPUT("Test With Truncation"), 1368290001Sglebius "0x4C1A03424B55E07FE7F27BE1", 1369290001Sglebius 1 1370290001Sglebius }, 1371290001Sglebius#endif 1372290001Sglebius /* Test 6 */ 1373290001Sglebius { 1374290001Sglebius TEST_INPUT("Test Using Larger Than Block-Size Key - " 1375290001Sglebius "Hash Key First"), 1376290001Sglebius "0x4ECE084485813E9088D2C63A041BC5B44F9EF1012A2B58" 1377290001Sglebius "8F3CD11F05033AC4C60C2EF6AB4030FE8296248D" 1378290001Sglebius "F163F44952", 1379290001Sglebius 1 1380290001Sglebius }, 1381290001Sglebius /* Test 7 */ 1382290001Sglebius { 1383290001Sglebius TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20" 1384290001Sglebius "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67" 1385290001Sglebius "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20" 1386290001Sglebius "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b" 1387290001Sglebius "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20" 1388290001Sglebius "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67" 1389290001Sglebius "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c" 1390290001Sglebius "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64" 1391290001Sglebius "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b" 1392290001Sglebius "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74" 1393290001Sglebius "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65" 1394290001Sglebius "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62" 1395290001Sglebius "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20" 1396290001Sglebius "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41" 1397290001Sglebius "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68" 1398290001Sglebius "\x6d\x2e"), 1399290001Sglebius "0x6617178E941F020D351E2F254E8FD32C602420FEB0B8FB" 1400290001Sglebius "9ADCCEBB82461E99C5A678CC31E799176D3860E6" 1401290001Sglebius "110C46523E", 1402290001Sglebius 1 1403290001Sglebius }, 1404290001Sglebius { NULL, 0, NULL, 1 } 1405290001Sglebius }; 1406290001Sglebius 1407290001Sglebius hash_testcase_t *testcase = testcases; 1408290001Sglebius 1409290001Sglebius hash_test_key_t test_keys[] = { 1410290001Sglebius /* Key 1 */ 1411290001Sglebius { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1412290001Sglebius "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 1413290001Sglebius /* Key 2 */ 1414290001Sglebius { "Jefe", 4 }, 1415290001Sglebius /* Key 3 */ 1416290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1417290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 1418290001Sglebius /* Key 4 */ 1419290001Sglebius { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1420290001Sglebius "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1421290001Sglebius "\x15\x16\x17\x18\x19", 25 }, 1422290001Sglebius#if 0 1423290001Sglebius /* Key 5 */ 1424290001Sglebius { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1425290001Sglebius "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1426290001Sglebius#endif 1427290001Sglebius /* Key 6 */ 1428290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1429290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1430290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1431290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1432290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1433290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1434290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1435290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1436290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1437290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1438290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1439290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1440290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1441290001Sglebius /* Key 7 */ 1442290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1443290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1444290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1445290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1446290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1447290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1448290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1449290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1450290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1451290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1452290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1453290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1454290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1455290001Sglebius { "", 0 } 1456290001Sglebius }; 1457290001Sglebius 1458290001Sglebius hash_test_key_t *test_key = test_keys; 1459290001Sglebius 1460290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 1461290001Sglebius memcpy(buffer, test_key->key, test_key->len); 1462290001Sglebius isc_hmacsha384_init(&hmacsha384, buffer, test_key->len); 1463290001Sglebius isc_hmacsha384_update(&hmacsha384, 1464290001Sglebius (const isc_uint8_t *) testcase->input, 1465290001Sglebius testcase->input_len); 1466290001Sglebius isc_hmacsha384_sign(&hmacsha384, digest, ISC_SHA384_DIGESTLENGTH); 1467290001Sglebius tohexstr(digest, ISC_SHA384_DIGESTLENGTH, str); 1468290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 1469290001Sglebius 1470290001Sglebius testcase++; 1471290001Sglebius test_key++; 1472290001Sglebius } 1473290001Sglebius} 1474290001Sglebius 1475290001Sglebius/* HMAC-SHA512 test */ 1476290001SglebiusATF_TC(isc_hmacsha512); 1477290001SglebiusATF_TC_HEAD(isc_hmacsha512, tc) { 1478290001Sglebius atf_tc_set_md_var(tc, "descr", "HMAC-SHA512 examples from RFC4634"); 1479290001Sglebius} 1480290001SglebiusATF_TC_BODY(isc_hmacsha512, tc) { 1481290001Sglebius isc_hmacsha512_t hmacsha512; 1482290001Sglebius 1483290001Sglebius UNUSED(tc); 1484290001Sglebius 1485290001Sglebius /* 1486290001Sglebius * These are the various test vectors. All of these are passed 1487290001Sglebius * through the hash function and the results are compared to the 1488290001Sglebius * result specified here. 1489290001Sglebius */ 1490290001Sglebius hash_testcase_t testcases[] = { 1491290001Sglebius /* Test 1 */ 1492290001Sglebius { 1493290001Sglebius TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 1494290001Sglebius "0x87AA7CDEA5EF619D4FF0B4241A1D6CB02379F4E2CE4EC2" 1495290001Sglebius "787AD0B30545E17CDEDAA833B7D6B8A702038B27" 1496290001Sglebius "4EAEA3F4E4BE9D914EEB61F1702E696C203A126854", 1497290001Sglebius 1 1498290001Sglebius }, 1499290001Sglebius /* Test 2 */ 1500290001Sglebius { 1501290001Sglebius TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61" 1502290001Sglebius "\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20" 1503290001Sglebius "\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1504290001Sglebius "0x164B7A7BFCF819E2E395FBE73B56E0A387BD64222E831F" 1505290001Sglebius "D610270CD7EA2505549758BF75C05A994A6D034F" 1506290001Sglebius "65F8F0E6FDCAEAB1A34D4A6B4B636E070A38BCE737", 1507290001Sglebius 1 1508290001Sglebius }, 1509290001Sglebius /* Test 3 */ 1510290001Sglebius { 1511290001Sglebius TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1512290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1513290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1514290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1515290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1516290001Sglebius "0xFA73B0089D56A284EFB0F0756C890BE9B1B5DBDD8EE81A" 1517290001Sglebius "3655F83E33B2279D39BF3E848279A722C806B485" 1518290001Sglebius "A47E67C807B946A337BEE8942674278859E13292FB", 1519290001Sglebius 1 1520290001Sglebius }, 1521290001Sglebius /* Test 4 */ 1522290001Sglebius { 1523290001Sglebius TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1524290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1525290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1526290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1527290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1528290001Sglebius "0xB0BA465637458C6990E5A8C5F61D4AF7E576D97FF94B87" 1529290001Sglebius "2DE76F8050361EE3DBA91CA5C11AA25EB4D67927" 1530290001Sglebius "5CC5788063A5F19741120C4F2DE2ADEBEB10A298DD", 1531290001Sglebius 1 1532290001Sglebius }, 1533290001Sglebius#if 0 1534290001Sglebius /* Test 5 -- unimplemented optional functionality */ 1535290001Sglebius { 1536290001Sglebius TEST_INPUT("Test With Truncation"), 1537290001Sglebius "0x4C1A03424B55E07FE7F27BE1", 1538290001Sglebius 1 1539290001Sglebius }, 1540290001Sglebius#endif 1541290001Sglebius /* Test 6 */ 1542290001Sglebius { 1543290001Sglebius TEST_INPUT("Test Using Larger Than Block-Size Key - " 1544290001Sglebius "Hash Key First"), 1545290001Sglebius "0x80B24263C7C1A3EBB71493C1DD7BE8B49B46D1F41B4AEE" 1546290001Sglebius "C1121B013783F8F3526B56D037E05F2598BD0FD2" 1547290001Sglebius "215D6A1E5295E64F73F63F0AEC8B915A985D786598", 1548290001Sglebius 1 1549290001Sglebius }, 1550290001Sglebius /* Test 7 */ 1551290001Sglebius { 1552290001Sglebius TEST_INPUT("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20" 1553290001Sglebius "\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67" 1554290001Sglebius "\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20" 1555290001Sglebius "\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b" 1556290001Sglebius "\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20" 1557290001Sglebius "\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67" 1558290001Sglebius "\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c" 1559290001Sglebius "\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64" 1560290001Sglebius "\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b" 1561290001Sglebius "\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74" 1562290001Sglebius "\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65" 1563290001Sglebius "\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62" 1564290001Sglebius "\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20" 1565290001Sglebius "\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41" 1566290001Sglebius "\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68" 1567290001Sglebius "\x6d\x2e"), 1568290001Sglebius "0xE37B6A775DC87DBAA4DFA9F96E5E3FFDDEBD71F8867289" 1569290001Sglebius "865DF5A32D20CDC944B6022CAC3C4982B10D5EEB" 1570290001Sglebius "55C3E4DE15134676FB6DE0446065C97440FA8C6A58", 1571290001Sglebius 1 1572290001Sglebius }, 1573290001Sglebius { NULL, 0, NULL, 1 } 1574290001Sglebius }; 1575290001Sglebius 1576290001Sglebius hash_testcase_t *testcase = testcases; 1577290001Sglebius 1578290001Sglebius hash_test_key_t test_keys[] = { 1579290001Sglebius /* Key 1 */ 1580290001Sglebius { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1581290001Sglebius "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20 }, 1582290001Sglebius /* Key 2 */ 1583290001Sglebius { "Jefe", 4 }, 1584290001Sglebius /* Key 3 */ 1585290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1586290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20 }, 1587290001Sglebius /* Key 4 */ 1588290001Sglebius { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1589290001Sglebius "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1590290001Sglebius "\x15\x16\x17\x18\x19", 25 }, 1591290001Sglebius#if 0 1592290001Sglebius /* Key 5 */ 1593290001Sglebius { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1594290001Sglebius "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1595290001Sglebius#endif 1596290001Sglebius /* Key 6 */ 1597290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1598290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1599290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1600290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1601290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1602290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1603290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1604290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1605290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1606290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1607290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1608290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1609290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1610290001Sglebius /* Key 7 */ 1611290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1612290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1613290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1614290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1615290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1616290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1617290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1618290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1619290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1620290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1621290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1622290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1623290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1624290001Sglebius { "", 0 } 1625290001Sglebius }; 1626290001Sglebius 1627290001Sglebius hash_test_key_t *test_key = test_keys; 1628290001Sglebius 1629290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 1630290001Sglebius memcpy(buffer, test_key->key, test_key->len); 1631290001Sglebius isc_hmacsha512_init(&hmacsha512, buffer, test_key->len); 1632290001Sglebius isc_hmacsha512_update(&hmacsha512, 1633290001Sglebius (const isc_uint8_t *) testcase->input, 1634290001Sglebius testcase->input_len); 1635290001Sglebius isc_hmacsha512_sign(&hmacsha512, digest, ISC_SHA512_DIGESTLENGTH); 1636290001Sglebius tohexstr(digest, ISC_SHA512_DIGESTLENGTH, str); 1637290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 1638290001Sglebius 1639290001Sglebius testcase++; 1640290001Sglebius test_key++; 1641290001Sglebius } 1642290001Sglebius} 1643290001Sglebius 1644290001Sglebius 1645290001Sglebius/* HMAC-MD5 Test */ 1646290001SglebiusATF_TC(isc_hmacmd5); 1647290001SglebiusATF_TC_HEAD(isc_hmacmd5, tc) { 1648290001Sglebius atf_tc_set_md_var(tc, "descr", "HMAC-MD5 examples from RFC2104"); 1649290001Sglebius} 1650290001SglebiusATF_TC_BODY(isc_hmacmd5, tc) { 1651290001Sglebius isc_hmacmd5_t hmacmd5; 1652290001Sglebius 1653290001Sglebius UNUSED(tc); 1654290001Sglebius 1655290001Sglebius /* 1656290001Sglebius * These are the various test vectors. All of these are passed 1657290001Sglebius * through the hash function and the results are compared to the 1658290001Sglebius * result specified here. 1659290001Sglebius */ 1660290001Sglebius hash_testcase_t testcases[] = { 1661290001Sglebius /* Test 1 */ 1662290001Sglebius { 1663290001Sglebius TEST_INPUT("\x48\x69\x20\x54\x68\x65\x72\x65"), 1664290001Sglebius "0x9294727A3638BB1C13F48EF8158BFC9D", 1665290001Sglebius 1 1666290001Sglebius }, 1667290001Sglebius /* Test 2 */ 1668290001Sglebius { 1669290001Sglebius TEST_INPUT("\x77\x68\x61\x74\x20\x64\x6f\x20\x79" 1670290001Sglebius "\x61\x20\x77\x61\x6e\x74\x20\x66\x6f" 1671290001Sglebius "\x72\x20\x6e\x6f\x74\x68\x69\x6e\x67\x3f"), 1672290001Sglebius "0x750C783E6AB0B503EAA86E310A5DB738", 1 1673290001Sglebius }, 1674290001Sglebius /* Test 3 */ 1675290001Sglebius { 1676290001Sglebius TEST_INPUT("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1677290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1678290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1679290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" 1680290001Sglebius "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"), 1681290001Sglebius "0x56BE34521D144C88DBB8C733F0E8B3F6", 1682290001Sglebius 1 1683290001Sglebius }, 1684290001Sglebius /* Test 4 */ 1685290001Sglebius { 1686290001Sglebius TEST_INPUT("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1687290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1688290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1689290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" 1690290001Sglebius "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"), 1691290001Sglebius "0x697EAF0ACA3A3AEA3A75164746FFAA79", 1692290001Sglebius 1 1693290001Sglebius }, 1694290001Sglebius#if 0 1695290001Sglebius /* Test 5 -- unimplemented optional functionality */ 1696290001Sglebius { 1697290001Sglebius TEST_INPUT("Test With Truncation"), 1698290001Sglebius "0x4C1A03424B55E07FE7F27BE1", 1699290001Sglebius 1 1700290001Sglebius }, 1701290001Sglebius /* Test 6 -- unimplemented optional functionality */ 1702290001Sglebius { 1703290001Sglebius TEST_INPUT("Test Using Larger Than Block-Size Key - " 1704290001Sglebius "Hash Key First"), 1705290001Sglebius "0xAA4AE5E15272D00E95705637CE8A3B55ED402112", 1706290001Sglebius 1 1707290001Sglebius }, 1708290001Sglebius /* Test 7 -- unimplemented optional functionality */ 1709290001Sglebius { 1710290001Sglebius TEST_INPUT("Test Using Larger Than Block-Size Key and " 1711290001Sglebius "Larger Than One Block-Size Data"), 1712290001Sglebius "0xE8E99D0F45237D786D6BBAA7965C7808BBFF1A91", 1713290001Sglebius 1 1714290001Sglebius }, 1715290001Sglebius#endif 1716290001Sglebius { NULL, 0, NULL, 1 } 1717290001Sglebius }; 1718290001Sglebius 1719290001Sglebius hash_testcase_t *testcase = testcases; 1720290001Sglebius 1721290001Sglebius hash_test_key_t test_keys[] = { 1722290001Sglebius /* Key 1 */ 1723290001Sglebius { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" 1724290001Sglebius "\x0b\x0b\x0b\x0b\x0b\x0b", 16 }, 1725290001Sglebius /* Key 2 */ 1726290001Sglebius { "Jefe", 4 }, 1727290001Sglebius /* Key 3 */ 1728290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1729290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa", 16 }, 1730290001Sglebius /* Key 4 */ 1731290001Sglebius { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 1732290001Sglebius "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14" 1733290001Sglebius "\x15\x16\x17\x18\x19", 25 }, 1734290001Sglebius#if 0 1735290001Sglebius /* Key 5 */ 1736290001Sglebius { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c" 1737290001Sglebius "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20 }, 1738290001Sglebius /* Key 6 */ 1739290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1740290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1741290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1742290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1743290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1744290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1745290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1746290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1747290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1748290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1749290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1750290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1751290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1752290001Sglebius /* Key 7 */ 1753290001Sglebius { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1754290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1755290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1756290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1757290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1758290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1759290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1760290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1761290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1762290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1763290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1764290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" 1765290001Sglebius "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 131 }, 1766290001Sglebius#endif 1767290001Sglebius { "", 0 } 1768290001Sglebius }; 1769290001Sglebius 1770290001Sglebius hash_test_key_t *test_key = test_keys; 1771290001Sglebius 1772290001Sglebius while (testcase->input != NULL && testcase->result != NULL) { 1773290001Sglebius memcpy(buffer, test_key->key, test_key->len); 1774290001Sglebius isc_hmacmd5_init(&hmacmd5, buffer, test_key->len); 1775290001Sglebius isc_hmacmd5_update(&hmacmd5, 1776290001Sglebius (const isc_uint8_t *) testcase->input, 1777290001Sglebius testcase->input_len); 1778290001Sglebius isc_hmacmd5_sign(&hmacmd5, digest); 1779290001Sglebius tohexstr(digest, ISC_MD5_DIGESTLENGTH, str); 1780290001Sglebius ATF_CHECK_STREQ(str, testcase->result); 1781290001Sglebius 1782290001Sglebius testcase++; 1783290001Sglebius test_key++; 1784290001Sglebius } 1785290001Sglebius} 1786290001Sglebius 1787290001Sglebius/* 1788290001Sglebius * Main 1789290001Sglebius */ 1790290001SglebiusATF_TP_ADD_TCS(tp) { 1791290001Sglebius ATF_TP_ADD_TC(tp, isc_hmacmd5); 1792290001Sglebius ATF_TP_ADD_TC(tp, isc_hmacsha1); 1793290001Sglebius ATF_TP_ADD_TC(tp, isc_hmacsha224); 1794290001Sglebius ATF_TP_ADD_TC(tp, isc_hmacsha256); 1795290001Sglebius ATF_TP_ADD_TC(tp, isc_hmacsha384); 1796290001Sglebius ATF_TP_ADD_TC(tp, isc_hmacsha512); 1797290001Sglebius ATF_TP_ADD_TC(tp, isc_md5); 1798290001Sglebius ATF_TP_ADD_TC(tp, isc_sha1); 1799290001Sglebius ATF_TP_ADD_TC(tp, isc_sha224); 1800290001Sglebius ATF_TP_ADD_TC(tp, isc_sha256); 1801290001Sglebius ATF_TP_ADD_TC(tp, isc_sha384); 1802290001Sglebius ATF_TP_ADD_TC(tp, isc_sha512); 1803290001Sglebius return (atf_no_error()); 1804290001Sglebius} 1805290001Sglebius 1806