1/* $NetBSD: md_test.c,v 1.2 2024/02/21 22:52:50 christos Exp $ */ 2 3/* 4 * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 5 * 6 * SPDX-License-Identifier: MPL-2.0 7 * 8 * This Source Code Form is subject to the terms of the Mozilla Public 9 * License, v. 2.0. If a copy of the MPL was not distributed with this 10 * file, you can obtain one at https://mozilla.org/MPL/2.0/. 11 * 12 * See the COPYRIGHT file distributed with this work for additional 13 * information regarding copyright ownership. 14 */ 15 16#include <inttypes.h> 17#include <sched.h> /* IWYU pragma: keep */ 18#include <setjmp.h> 19#include <stdarg.h> 20#include <stddef.h> 21#include <string.h> 22 23/* For FIPS_mode() */ 24#include <openssl/crypto.h> 25 26#define UNIT_TESTING 27#include <cmocka.h> 28 29#include <isc/buffer.h> 30#include <isc/hex.h> 31#include <isc/md.h> 32#include <isc/region.h> 33#include <isc/result.h> 34 35#include "md.c" 36 37#include <tests/isc.h> 38 39#define TEST_INPUT(x) (x), sizeof(x) - 1 40 41static int 42_setup(void **state) { 43 isc_md_t *md = isc_md_new(); 44 if (md == NULL) { 45 return (-1); 46 } 47 *state = md; 48 return (0); 49} 50 51static int 52_teardown(void **state) { 53 if (*state == NULL) { 54 return (-1); 55 } 56 isc_md_free(*state); 57 return (0); 58} 59 60static int 61_reset(void **state) { 62 if (*state == NULL) { 63 return (-1); 64 } 65 if (isc_md_reset(*state) != ISC_R_SUCCESS) { 66 return (-1); 67 } 68 return (0); 69} 70 71ISC_RUN_TEST_IMPL(isc_md_new) { 72 isc_md_t *md = isc_md_new(); 73 assert_non_null(md); 74 isc_md_free(md); /* Cleanup */ 75} 76 77ISC_RUN_TEST_IMPL(isc_md_free) { 78 isc_md_t *md = isc_md_new(); 79 assert_non_null(md); 80 isc_md_free(md); /* Test freeing valid message digest context */ 81 isc_md_free(NULL); /* Test freeing NULL argument */ 82} 83 84static void 85isc_md_test(isc_md_t *md, const isc_md_type_t *type, const char *buf, 86 size_t buflen, const char *result, const size_t repeats) { 87 isc_result_t res; 88 89 assert_non_null(md); 90 assert_int_equal(isc_md_init(md, type), ISC_R_SUCCESS); 91 92 for (size_t i = 0; i < repeats; i++) { 93 assert_int_equal( 94 isc_md_update(md, (const unsigned char *)buf, buflen), 95 ISC_R_SUCCESS); 96 } 97 98 unsigned char digest[ISC_MAX_MD_SIZE]; 99 unsigned int digestlen; 100 assert_int_equal(isc_md_final(md, digest, &digestlen), ISC_R_SUCCESS); 101 102 char hexdigest[ISC_MAX_MD_SIZE * 2 + 3]; 103 isc_region_t r = { .base = digest, .length = digestlen }; 104 isc_buffer_t b; 105 isc_buffer_init(&b, hexdigest, sizeof(hexdigest)); 106 107 res = isc_hex_totext(&r, 0, "", &b); 108 109 assert_return_code(res, ISC_R_SUCCESS); 110 111 assert_memory_equal(hexdigest, result, (result ? strlen(result) : 0)); 112 assert_int_equal(isc_md_reset(md), ISC_R_SUCCESS); 113} 114 115ISC_RUN_TEST_IMPL(isc_md_init) { 116 isc_md_t *md = *state; 117 assert_non_null(md); 118 119 expect_assert_failure(isc_md_init(NULL, ISC_MD_MD5)); 120 121 assert_int_equal(isc_md_init(md, NULL), ISC_R_NOTIMPLEMENTED); 122 123 assert_int_equal(isc_md_init(md, ISC_MD_MD5), ISC_R_SUCCESS); 124 assert_int_equal(isc_md_reset(md), ISC_R_SUCCESS); 125 126 assert_int_equal(isc_md_init(md, ISC_MD_SHA1), ISC_R_SUCCESS); 127 assert_int_equal(isc_md_reset(md), ISC_R_SUCCESS); 128 129 assert_int_equal(isc_md_init(md, ISC_MD_SHA224), ISC_R_SUCCESS); 130 assert_int_equal(isc_md_reset(md), ISC_R_SUCCESS); 131 132 assert_int_equal(isc_md_init(md, ISC_MD_SHA256), ISC_R_SUCCESS); 133 assert_int_equal(isc_md_reset(md), ISC_R_SUCCESS); 134 135 assert_int_equal(isc_md_init(md, ISC_MD_SHA384), ISC_R_SUCCESS); 136 assert_int_equal(isc_md_reset(md), ISC_R_SUCCESS); 137 138 assert_int_equal(isc_md_init(md, ISC_MD_SHA512), ISC_R_SUCCESS); 139 assert_int_equal(isc_md_reset(md), ISC_R_SUCCESS); 140} 141 142ISC_RUN_TEST_IMPL(isc_md_update) { 143 isc_md_t *md = *state; 144 assert_non_null(md); 145 146 /* Uses message digest context initialized in isc_md_init_test() */ 147 expect_assert_failure(isc_md_update(NULL, NULL, 0)); 148 149 assert_int_equal(isc_md_update(md, NULL, 100), ISC_R_SUCCESS); 150 assert_int_equal(isc_md_update(md, (const unsigned char *)"", 0), 151 ISC_R_SUCCESS); 152} 153 154ISC_RUN_TEST_IMPL(isc_md_reset) { 155 isc_md_t *md = *state; 156#if 0 157 unsigned char digest[ISC_MAX_MD_SIZE] __attribute((unused)); 158 unsigned int digestlen __attribute((unused)); 159#endif /* if 0 */ 160 161 assert_non_null(md); 162 163 assert_int_equal(isc_md_init(md, ISC_MD_SHA512), ISC_R_SUCCESS); 164 assert_int_equal(isc_md_update(md, (const unsigned char *)"a", 1), 165 ISC_R_SUCCESS); 166 assert_int_equal(isc_md_update(md, (const unsigned char *)"b", 1), 167 ISC_R_SUCCESS); 168 169 assert_int_equal(isc_md_reset(md), ISC_R_SUCCESS); 170 171#if 0 172 /* 173 * This test would require OpenSSL compiled with mock_assert(), 174 * so this could be only manually checked that the test will 175 * segfault when called by hand 176 */ 177 expect_assert_failure(isc_md_final(md,digest,&digestlen)); 178#endif /* if 0 */ 179} 180 181ISC_RUN_TEST_IMPL(isc_md_final) { 182 isc_md_t *md = *state; 183 assert_non_null(md); 184 185 unsigned char digest[ISC_MAX_MD_SIZE]; 186 unsigned int digestlen; 187 188 /* Fail when message digest context is empty */ 189 expect_assert_failure(isc_md_final(NULL, digest, &digestlen)); 190 /* Fail when output buffer is empty */ 191 expect_assert_failure(isc_md_final(md, NULL, &digestlen)); 192 193 assert_int_equal(isc_md_init(md, ISC_MD_SHA512), ISC_R_SUCCESS); 194 assert_int_equal(isc_md_final(md, digest, NULL), ISC_R_SUCCESS); 195} 196 197ISC_RUN_TEST_IMPL(isc_md_md5) { 198 isc_md_t *md = *state; 199 isc_md_test(md, ISC_MD_MD5, NULL, 0, NULL, 0); 200 isc_md_test(md, ISC_MD_MD5, TEST_INPUT(""), 201 "D41D8CD98F00B204E9800998ECF8427E", 1); 202 isc_md_test(md, ISC_MD_MD5, TEST_INPUT("a"), 203 "0CC175B9C0F1B6A831C399E269772661", 1); 204 isc_md_test(md, ISC_MD_MD5, TEST_INPUT("abc"), 205 "900150983CD24FB0D6963F7D28E17F72", 1); 206 isc_md_test(md, ISC_MD_MD5, TEST_INPUT("message digest"), 207 "F96B697D7CB7938D525A2F31AAF161D0", 1); 208 isc_md_test(md, ISC_MD_MD5, TEST_INPUT("abcdefghijklmnopqrstuvwxyz"), 209 "C3FCD3D76192E4007DFB496CCA67E13B", 1); 210 isc_md_test(md, ISC_MD_MD5, 211 TEST_INPUT("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm" 212 "nopqrstuvwxyz0123456789"), 213 "D174AB98D277D9F5A5611C2C9F419D9F", 1); 214 isc_md_test(md, ISC_MD_MD5, 215 TEST_INPUT("123456789012345678901234567890123456789" 216 "01234567890123456789012345678901234567890"), 217 "57EDF4A22BE3C955AC49DA2E2107B67A", 1); 218} 219 220ISC_RUN_TEST_IMPL(isc_md_sha1) { 221 isc_md_t *md = *state; 222 isc_md_test(md, ISC_MD_SHA1, NULL, 0, NULL, 0); 223 isc_md_test(md, ISC_MD_SHA1, TEST_INPUT(""), 224 "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", 1); 225 isc_md_test(md, ISC_MD_SHA1, TEST_INPUT("abc"), 226 "A9993E364706816ABA3E25717850C26C9CD0D89D", 1); 227 isc_md_test(md, ISC_MD_SHA1, 228 TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijk" 229 "ljklmklmnlmnomnopnopq"), 230 "84983E441C3BD26EBAAE4AA1F95129E5E54670F1", 1); 231 isc_md_test(md, ISC_MD_SHA1, TEST_INPUT("a"), 232 "34AA973CD4C4DAA4F61EEB2BDBAD27316534016F", 1000000); 233 isc_md_test(md, ISC_MD_SHA1, 234 TEST_INPUT("01234567012345670123456701234567"), 235 "DEA356A2CDDD90C7A7ECEDC5EBB563934F460452", 20); 236 isc_md_test(md, ISC_MD_SHA1, TEST_INPUT("\x5e"), 237 "5E6F80A34A9798CAFC6A5DB96CC57BA4C4DB59C2", 1); 238 isc_md_test(md, ISC_MD_SHA1, 239 TEST_INPUT("\x9a\x7d\xfd\xf1\xec\xea\xd0\x6e\xd6\x46" 240 "\xaa\x55\xfe\x75\x71\x46"), 241 "82ABFF6605DBE1C17DEF12A394FA22A82B544A35", 1); 242 isc_md_test(md, ISC_MD_SHA1, 243 TEST_INPUT("\xf7\x8f\x92\x14\x1b\xcd\x17\x0a\xe8\x9b" 244 "\x4f\xba\x15\xa1\xd5\x9f\x3f\xd8\x4d\x22" 245 "\x3c\x92\x51\xbd\xac\xbb\xae\x61\xd0\x5e" 246 "\xd1\x15\xa0\x6a\x7c\xe1\x17\xb7\xbe\xea" 247 "\xd2\x44\x21\xde\xd9\xc3\x25\x92\xbd\x57" 248 "\xed\xea\xe3\x9c\x39\xfa\x1f\xe8\x94\x6a" 249 "\x84\xd0\xcf\x1f\x7b\xee\xad\x17\x13\xe2" 250 "\xe0\x95\x98\x97\x34\x7f\x67\xc8\x0b\x04" 251 "\x00\xc2\x09\x81\x5d\x6b\x10\xa6\x83\x83" 252 "\x6f\xd5\x56\x2a\x56\xca\xb1\xa2\x8e\x81" 253 "\xb6\x57\x66\x54\x63\x1c\xf1\x65\x66\xb8" 254 "\x6e\x3b\x33\xa1\x08\xb0\x53\x07\xc0\x0a" 255 "\xff\x14\xa7\x68\xed\x73\x50\x60\x6a\x0f" 256 "\x85\xe6\xa9\x1d\x39\x6f\x5b\x5c\xbe\x57" 257 "\x7f\x9b\x38\x80\x7c\x7d\x52\x3d\x6d\x79" 258 "\x2f\x6e\xbc\x24\xa4\xec\xf2\xb3\xa4\x27" 259 "\xcd\xbb\xfb"), 260 "CB0082C8F197D260991BA6A460E76E202BAD27B3", 1); 261} 262 263ISC_RUN_TEST_IMPL(isc_md_sha224) { 264 isc_md_t *md = *state; 265 266 isc_md_test(md, ISC_MD_SHA224, NULL, 0, NULL, 0); 267 isc_md_test(md, ISC_MD_SHA224, TEST_INPUT(""), 268 "D14A028C2A3A2BC9476102BB288234C415A2B01F828EA62AC5B3E42F", 269 1); 270 isc_md_test(md, ISC_MD_SHA224, TEST_INPUT("abc"), 271 "23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7" 272 "E36C9DA7", 273 1); 274 isc_md_test(md, ISC_MD_SHA224, 275 TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijklj" 276 "klmklmnlmnomnopnopq"), 277 "75388B16512776CC5DBA5DA1FD890150B0C6455CB4F58B" 278 "1952522525", 279 1); 280 isc_md_test(md, ISC_MD_SHA224, TEST_INPUT("a"), 281 "20794655980C91D8BBB4C1EA97618A4BF03F42581948B2" 282 "EE4EE7AD67", 283 1000000); 284 isc_md_test(md, ISC_MD_SHA224, 285 TEST_INPUT("01234567012345670123456701234567"), 286 "567F69F168CD7844E65259CE658FE7AADFA25216E68ECA" 287 "0EB7AB8262", 288 20); 289 isc_md_test(md, ISC_MD_SHA224, TEST_INPUT("\x07"), 290 "00ECD5F138422B8AD74C9799FD826C531BAD2FCABC7450" 291 "BEE2AA8C2A", 292 1); 293 isc_md_test(md, ISC_MD_SHA224, 294 TEST_INPUT("\x18\x80\x40\x05\xdd\x4f\xbd\x15\x56\x29" 295 "\x9d\x6f\x9d\x93\xdf\x62"), 296 "DF90D78AA78821C99B40BA4C966921ACCD8FFB1E98AC38" 297 "8E56191DB1", 298 1); 299 isc_md_test(md, ISC_MD_SHA224, 300 TEST_INPUT("\x55\xb2\x10\x07\x9c\x61\xb5\x3a\xdd\x52" 301 "\x06\x22\xd1\xac\x97\xd5\xcd\xbe\x8c\xb3" 302 "\x3a\xa0\xae\x34\x45\x17\xbe\xe4\xd7\xba" 303 "\x09\xab\xc8\x53\x3c\x52\x50\x88\x7a\x43" 304 "\xbe\xbb\xac\x90\x6c\x2e\x18\x37\xf2\x6b" 305 "\x36\xa5\x9a\xe3\xbe\x78\x14\xd5\x06\x89" 306 "\x6b\x71\x8b\x2a\x38\x3e\xcd\xac\x16\xb9" 307 "\x61\x25\x55\x3f\x41\x6f\xf3\x2c\x66\x74" 308 "\xc7\x45\x99\xa9\x00\x53\x86\xd9\xce\x11" 309 "\x12\x24\x5f\x48\xee\x47\x0d\x39\x6c\x1e" 310 "\xd6\x3b\x92\x67\x0c\xa5\x6e\xc8\x4d\xee" 311 "\xa8\x14\xb6\x13\x5e\xca\x54\x39\x2b\xde" 312 "\xdb\x94\x89\xbc\x9b\x87\x5a\x8b\xaf\x0d" 313 "\xc1\xae\x78\x57\x36\x91\x4a\xb7\xda\xa2" 314 "\x64\xbc\x07\x9d\x26\x9f\x2c\x0d\x7e\xdd" 315 "\xd8\x10\xa4\x26\x14\x5a\x07\x76\xf6\x7c" 316 "\x87\x82\x73"), 317 "0B31894EC8937AD9B91BDFBCBA294D9ADEFAA18E09305E" 318 "9F20D5C3A4", 319 1); 320} 321 322ISC_RUN_TEST_IMPL(isc_md_sha256) { 323 isc_md_t *md = *state; 324 325 isc_md_test(md, ISC_MD_SHA256, NULL, 0, NULL, 0); 326 isc_md_test(md, ISC_MD_SHA256, TEST_INPUT(""), 327 "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B93" 328 "4CA495991B7852B855", 329 1); 330 331 isc_md_test(md, ISC_MD_SHA256, TEST_INPUT("abc"), 332 "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A" 333 "9CB410FF61F20015AD", 334 1); 335 isc_md_test(md, ISC_MD_SHA256, 336 TEST_INPUT("abcdbcdecdefdefgefghfghighijhijkijkljk" 337 "lmklmnlmnomnopnopq"), 338 "248D6A61D20638B8E5C026930C3E6039A33CE45964FF21" 339 "67F6ECEDD419DB06C1", 340 1); 341 isc_md_test(md, ISC_MD_SHA256, TEST_INPUT("a"), 342 "CDC76E5C9914FB9281A1C7E284D73E67F1809A48A49720" 343 "0E046D39CCC7112CD0", 344 1000000); 345 isc_md_test(md, ISC_MD_SHA256, 346 TEST_INPUT("01234567012345670123456701234567"), 347 "594847328451BDFA85056225462CC1D867D877FB388DF0" 348 "CE35F25AB5562BFBB5", 349 20); 350 isc_md_test(md, ISC_MD_SHA256, TEST_INPUT("\x19"), 351 "68AA2E2EE5DFF96E3355E6C7EE373E3D6A4E17F75F9518" 352 "D843709C0C9BC3E3D4", 353 1); 354 isc_md_test(md, ISC_MD_SHA256, 355 TEST_INPUT("\xe3\xd7\x25\x70\xdc\xdd\x78\x7c\xe3" 356 "\x88\x7a\xb2\xcd\x68\x46\x52"), 357 "175EE69B02BA9B58E2B0A5FD13819CEA573F3940A94F82" 358 "5128CF4209BEABB4E8", 359 1); 360 isc_md_test(md, ISC_MD_SHA256, 361 TEST_INPUT("\x83\x26\x75\x4e\x22\x77\x37\x2f\x4f\xc1" 362 "\x2b\x20\x52\x7a\xfe\xf0\x4d\x8a\x05\x69" 363 "\x71\xb1\x1a\xd5\x71\x23\xa7\xc1\x37\x76" 364 "\x00\x00\xd7\xbe\xf6\xf3\xc1\xf7\xa9\x08" 365 "\x3a\xa3\x9d\x81\x0d\xb3\x10\x77\x7d\xab" 366 "\x8b\x1e\x7f\x02\xb8\x4a\x26\xc7\x73\x32" 367 "\x5f\x8b\x23\x74\xde\x7a\x4b\x5a\x58\xcb" 368 "\x5c\x5c\xf3\x5b\xce\xe6\xfb\x94\x6e\x5b" 369 "\xd6\x94\xfa\x59\x3a\x8b\xeb\x3f\x9d\x65" 370 "\x92\xec\xed\xaa\x66\xca\x82\xa2\x9d\x0c" 371 "\x51\xbc\xf9\x33\x62\x30\xe5\xd7\x84\xe4" 372 "\xc0\xa4\x3f\x8d\x79\xa3\x0a\x16\x5c\xba" 373 "\xbe\x45\x2b\x77\x4b\x9c\x71\x09\xa9\x7d" 374 "\x13\x8f\x12\x92\x28\x96\x6f\x6c\x0a\xdc" 375 "\x10\x6a\xad\x5a\x9f\xdd\x30\x82\x57\x69" 376 "\xb2\xc6\x71\xaf\x67\x59\xdf\x28\xeb\x39" 377 "\x3d\x54\xd6"), 378 "97DBCA7DF46D62C8A422C941DD7E835B8AD3361763F7E9" 379 "B2D95F4F0DA6E1CCBC", 380 1); 381} 382 383ISC_RUN_TEST_IMPL(isc_md_sha384) { 384 isc_md_t *md = *state; 385 386 isc_md_test(md, ISC_MD_SHA384, NULL, 0, NULL, 0); 387 isc_md_test(md, ISC_MD_SHA384, TEST_INPUT(""), 388 "38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07" 389 "434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898" 390 "B95B" 391 "", 392 1); 393 isc_md_test(md, ISC_MD_SHA384, TEST_INPUT("abc"), 394 "CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1" 395 "631A8B605A43FF5BED8086072BA1E7CC2358BAEC" 396 "A134C825A7", 397 1); 398 isc_md_test(md, ISC_MD_SHA384, 399 TEST_INPUT("abcdefghbcdefghicdefghijdefghijkefghijkl" 400 "fghijklmghijklmnhijklmnoijklmnopjklmnopq" 401 "klmnopqrlmnopqrsmnopqrstnopqrstu"), 402 "09330C33F71147E83D192FC782CD1B4753111B173B3B05" 403 "D22FA08086E3B0F712FCC7C71A557E2DB966C3E9" 404 "FA91746039", 405 1); 406 isc_md_test(md, ISC_MD_SHA384, TEST_INPUT("a"), 407 "9D0E1809716474CB086E834E310A4A1CED149E9C00F248" 408 "527972CEC5704C2A5B07B8B3DC38ECC4EBAE97DD" 409 "D87F3D8985", 410 1000000); 411 isc_md_test(md, ISC_MD_SHA384, 412 TEST_INPUT("01234567012345670123456701234567"), 413 "2FC64A4F500DDB6828F6A3430B8DD72A368EB7F3A8322A" 414 "70BC84275B9C0B3AB00D27A5CC3C2D224AA6B61A" 415 "0D79FB4596", 416 20); 417 isc_md_test(md, ISC_MD_SHA384, TEST_INPUT("\xb9"), 418 "BC8089A19007C0B14195F4ECC74094FEC64F01F9092928" 419 "2C2FB392881578208AD466828B1C6C283D2722CF" 420 "0AD1AB6938", 421 1); 422 isc_md_test(md, ISC_MD_SHA384, 423 TEST_INPUT("\xa4\x1c\x49\x77\x79\xc0\x37\x5f\xf1" 424 "\x0a\x7f\x4e\x08\x59\x17\x39"), 425 "C9A68443A005812256B8EC76B00516F0DBB74FAB26D665" 426 "913F194B6FFB0E91EA9967566B58109CBC675CC2" 427 "08E4C823F7", 428 1); 429 isc_md_test(md, ISC_MD_SHA384, 430 TEST_INPUT("\x39\x96\x69\xe2\x8f\x6b\x9c\x6d\xbc\xbb" 431 "\x69\x12\xec\x10\xff\xcf\x74\x79\x03\x49" 432 "\xb7\xdc\x8f\xbe\x4a\x8e\x7b\x3b\x56\x21" 433 "\xdb\x0f\x3e\x7d\xc8\x7f\x82\x32\x64\xbb" 434 "\xe4\x0d\x18\x11\xc9\xea\x20\x61\xe1\xc8" 435 "\x4a\xd1\x0a\x23\xfa\xc1\x72\x7e\x72\x02" 436 "\xfc\x3f\x50\x42\xe6\xbf\x58\xcb\xa8\xa2" 437 "\x74\x6e\x1f\x64\xf9\xb9\xea\x35\x2c\x71" 438 "\x15\x07\x05\x3c\xf4\xe5\x33\x9d\x52\x86" 439 "\x5f\x25\xcc\x22\xb5\xe8\x77\x84\xa1\x2f" 440 "\xc9\x61\xd6\x6c\xb6\xe8\x95\x73\x19\x9a" 441 "\x2c\xe6\x56\x5c\xbd\xf1\x3d\xca\x40\x38" 442 "\x32\xcf\xcb\x0e\x8b\x72\x11\xe8\x3a\xf3" 443 "\x2a\x11\xac\x17\x92\x9f\xf1\xc0\x73\xa5" 444 "\x1c\xc0\x27\xaa\xed\xef\xf8\x5a\xad\x7c" 445 "\x2b\x7c\x5a\x80\x3e\x24\x04\xd9\x6d\x2a" 446 "\x77\x35\x7b\xda\x1a\x6d\xae\xed\x17\x15" 447 "\x1c\xb9\xbc\x51\x25\xa4\x22\xe9\x41\xde" 448 "\x0c\xa0\xfc\x50\x11\xc2\x3e\xcf\xfe\xfd" 449 "\xd0\x96\x76\x71\x1c\xf3\xdb\x0a\x34\x40" 450 "\x72\x0e\x16\x15\xc1\xf2\x2f\xbc\x3c\x72" 451 "\x1d\xe5\x21\xe1\xb9\x9b\xa1\xbd\x55\x77" 452 "\x40\x86\x42\x14\x7e\xd0\x96"), 453 "4F440DB1E6EDD2899FA335F09515AA025EE177A79F4B4A" 454 "AF38E42B5C4DE660F5DE8FB2A5B2FBD2A3CBFFD2" 455 "0CFF1288C0", 456 1); 457} 458 459ISC_RUN_TEST_IMPL(isc_md_sha512) { 460 isc_md_t *md = *state; 461 462 isc_md_test(md, ISC_MD_SHA512, NULL, 0, NULL, 0); 463 isc_md_test(md, ISC_MD_SHA512, TEST_INPUT(""), 464 "CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715" 465 "DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877E" 466 "EC2F63B931BD47417A81A538327AF927DA3E", 467 1); 468 isc_md_test(md, ISC_MD_SHA512, TEST_INPUT("abc"), 469 "DDAF35A193617ABACC417349AE20413112E6FA4E89A97E" 470 "A20A9EEEE64B55D39A2192992A274FC1A836BA3C" 471 "23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F", 472 1); 473 isc_md_test(md, ISC_MD_SHA512, 474 TEST_INPUT("abcdefghbcdefghicdefghijdefghijkefghijkl" 475 "fghijklmghijklmnhijklmnoijklmnopjklmnopq" 476 "klmnopqrlmnopqrsmnopqrstnopqrstu"), 477 "8E959B75DAE313DA8CF4F72814FC143F8F7779C6EB9F7F" 478 "A17299AEADB6889018501D289E4900F7E4331B99" 479 "DEC4B5433AC7D329EEB6DD26545E96E55B874BE909", 480 1); 481 isc_md_test(md, ISC_MD_SHA512, TEST_INPUT("a"), 482 "E718483D0CE769644E2E42C7BC15B4638E1F98B13B2044" 483 "285632A803AFA973EBDE0FF244877EA60A4CB043" 484 "2CE577C31BEB009C5C2C49AA2E4EADB217AD8CC09B", 485 1000000); 486 isc_md_test(md, ISC_MD_SHA512, 487 TEST_INPUT("01234567012345670123456701234567"), 488 "89D05BA632C699C31231DED4FFC127D5A894DAD412C0E0" 489 "24DB872D1ABD2BA8141A0F85072A9BE1E2AA04CF" 490 "33C765CB510813A39CD5A84C4ACAA64D3F3FB7BAE9", 491 20); 492 isc_md_test(md, ISC_MD_SHA512, TEST_INPUT("\xD0"), 493 "9992202938E882E73E20F6B69E68A0A7149090423D93C8" 494 "1BAB3F21678D4ACEEEE50E4E8CAFADA4C85A54EA" 495 "8306826C4AD6E74CECE9631BFA8A549B4AB3FBBA15", 496 1); 497 isc_md_test(md, ISC_MD_SHA512, 498 TEST_INPUT("\x8d\x4e\x3c\x0e\x38\x89\x19\x14\x91\x81" 499 "\x6e\x9d\x98\xbf\xf0\xa0"), 500 "CB0B67A4B8712CD73C9AABC0B199E9269B20844AFB75AC" 501 "BDD1C153C9828924C3DDEDAAFE669C5FDD0BC66F" 502 "630F6773988213EB1B16F517AD0DE4B2F0C95C90F8", 503 1); 504 isc_md_test(md, ISC_MD_SHA512, 505 TEST_INPUT("\xa5\x5f\x20\xc4\x11\xaa\xd1\x32\x80\x7a" 506 "\x50\x2d\x65\x82\x4e\x31\xa2\x30\x54\x32" 507 "\xaa\x3d\x06\xd3\xe2\x82\xa8\xd8\x4e\x0d" 508 "\xe1\xde\x69\x74\xbf\x49\x54\x69\xfc\x7f" 509 "\x33\x8f\x80\x54\xd5\x8c\x26\xc4\x93\x60" 510 "\xc3\xe8\x7a\xf5\x65\x23\xac\xf6\xd8\x9d" 511 "\x03\xe5\x6f\xf2\xf8\x68\x00\x2b\xc3\xe4" 512 "\x31\xed\xc4\x4d\xf2\xf0\x22\x3d\x4b\xb3" 513 "\xb2\x43\x58\x6e\x1a\x7d\x92\x49\x36\x69" 514 "\x4f\xcb\xba\xf8\x8d\x95\x19\xe4\xeb\x50" 515 "\xa6\x44\xf8\xe4\xf9\x5e\xb0\xea\x95\xbc" 516 "\x44\x65\xc8\x82\x1a\xac\xd2\xfe\x15\xab" 517 "\x49\x81\x16\x4b\xbb\x6d\xc3\x2f\x96\x90" 518 "\x87\xa1\x45\xb0\xd9\xcc\x9c\x67\xc2\x2b" 519 "\x76\x32\x99\x41\x9c\xc4\x12\x8b\xe9\xa0" 520 "\x77\xb3\xac\xe6\x34\x06\x4e\x6d\x99\x28" 521 "\x35\x13\xdc\x06\xe7\x51\x5d\x0d\x73\x13" 522 "\x2e\x9a\x0d\xc6\xd3\xb1\xf8\xb2\x46\xf1" 523 "\xa9\x8a\x3f\xc7\x29\x41\xb1\xe3\xbb\x20" 524 "\x98\xe8\xbf\x16\xf2\x68\xd6\x4f\x0b\x0f" 525 "\x47\x07\xfe\x1e\xa1\xa1\x79\x1b\xa2\xf3" 526 "\xc0\xc7\x58\xe5\xf5\x51\x86\x3a\x96\xc9" 527 "\x49\xad\x47\xd7\xfb\x40\xd2"), 528 "C665BEFB36DA189D78822D10528CBF3B12B3EEF7260399" 529 "09C1A16A270D48719377966B957A878E72058477" 530 "9A62825C18DA26415E49A7176A894E7510FD1451F5", 531 1); 532} 533 534ISC_TEST_LIST_START 535 536ISC_TEST_ENTRY(isc_md_new) 537 538ISC_TEST_ENTRY_CUSTOM(isc_md_init, _reset, _reset) 539 540ISC_TEST_ENTRY_CUSTOM(isc_md_reset, _reset, _reset) 541 542ISC_TEST_ENTRY(isc_md_md5) 543ISC_TEST_ENTRY(isc_md_sha1) 544 545ISC_TEST_ENTRY(isc_md_sha224) 546ISC_TEST_ENTRY(isc_md_sha256) 547ISC_TEST_ENTRY(isc_md_sha384) 548ISC_TEST_ENTRY(isc_md_sha512) 549 550ISC_TEST_ENTRY_CUSTOM(isc_md_update, _reset, _reset) 551ISC_TEST_ENTRY_CUSTOM(isc_md_final, _reset, _reset) 552 553ISC_TEST_ENTRY(isc_md_free) 554 555ISC_TEST_LIST_END 556 557ISC_TEST_MAIN_CUSTOM(_setup, _teardown) 558