Annotation of embedaddon/bird2/lib/mac_test.c, revision 1.1

1.1     ! misho       1: /*
        !             2:  *     BIRD Library -- SHA and HMAC-SHA functions tests
        !             3:  *
        !             4:  *     (c) 2015 CZ.NIC z.s.p.o.
        !             5:  *
        !             6:  *     Can be freely distributed and used under the terms of the GNU GPL.
        !             7:  */
        !             8: 
        !             9: #include "test/birdtest.h"
        !            10: #include "test/bt-utils.h"
        !            11: 
        !            12: #include "lib/mac.h"
        !            13: 
        !            14: 
        !            15: #define define_test_hash_fn(name,id)                                   \
        !            16: static int                                                             \
        !            17: test_##name(void *out_, const void *in_, const void *expected_out_)    \
        !            18: {                                                                      \
        !            19:   char *out = out_;                                                    \
        !            20:   const char *in = in_;                                                        \
        !            21:   const char *expected_out = expected_out_;                            \
        !            22:                                                                        \
        !            23:   struct mac_context ctx;                                              \
        !            24:   mac_init(&ctx, id, NULL, 0);                                         \
        !            25:   mac_update(&ctx, in, strlen(in));                                    \
        !            26:   byte *out_bin = mac_final(&ctx);                                     \
        !            27:                                                                        \
        !            28:   uint len = mac_type_length(id);                                      \
        !            29:   bt_bytes_to_hex(out, out_bin, len);                                  \
        !            30:                                                                        \
        !            31:   return strncmp(out, expected_out, 2*len+1) == 0; \
        !            32: }
        !            33: 
        !            34: define_test_hash_fn(md5,       ALG_MD5)
        !            35: define_test_hash_fn(sha1,      ALG_SHA1)
        !            36: define_test_hash_fn(sha224,    ALG_SHA224)
        !            37: define_test_hash_fn(sha256,    ALG_SHA256)
        !            38: define_test_hash_fn(sha384,    ALG_SHA384)
        !            39: define_test_hash_fn(sha512,    ALG_SHA512)
        !            40: 
        !            41: 
        !            42: static int
        !            43: t_md5(void)
        !            44: {
        !            45:   struct bt_pair test_vectors[] = {
        !            46:     {
        !            47:       .in  = "",
        !            48:       .out = "d41d8cd98f00b204e9800998ecf8427e",
        !            49:     },
        !            50:     {
        !            51:       .in  = "a",
        !            52:       .out = "0cc175b9c0f1b6a831c399e269772661",
        !            53:     },
        !            54:     {
        !            55:       .in  = "abc",
        !            56:       .out = "900150983cd24fb0d6963f7d28e17f72",
        !            57:     },
        !            58:     {
        !            59:       .in  = "message digest",
        !            60:       .out = "f96b697d7cb7938d525a2f31aaf161d0",
        !            61:     },
        !            62:     {
        !            63:       .in  = "abcdefghijklmnopqrstuvwxyz",
        !            64:       .out = "c3fcd3d76192e4007dfb496cca67e13b",
        !            65:     },
        !            66:     {
        !            67:       .in  = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
        !            68:       .out = "d174ab98d277d9f5a5611c2c9f419d9f",
        !            69:     },
        !            70:     {
        !            71:       .in  = "12345678901234567890123456789012345678901234567890123456789012345678901234567890",
        !            72:       .out = "57edf4a22be3c955ac49da2e2107b67a",
        !            73:     },
        !            74:   };
        !            75: 
        !            76:   return bt_assert_batch(test_vectors, test_md5, bt_fmt_str, bt_fmt_str);
        !            77: }
        !            78: 
        !            79: 
        !            80: /*
        !            81:  * Testing SHAxxx functions
        !            82:  */
        !            83: 
        !            84: 
        !            85: static int
        !            86: t_sha1(void)
        !            87: {
        !            88:   struct bt_pair test_vectors[] = {
        !            89:     {
        !            90:       .in  = "",
        !            91:       .out = "da39a3ee5e6b4b0d3255bfef95601890afd80709",
        !            92:     },
        !            93:     {
        !            94:       .in  = "a",
        !            95:       .out = "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8",
        !            96:     },
        !            97:     {
        !            98:       .in  = "abc",
        !            99:       .out = "a9993e364706816aba3e25717850c26c9cd0d89d",
        !           100:     },
        !           101:     {
        !           102:       .in  = "message digest",
        !           103:       .out = "c12252ceda8be8994d5fa0290a47231c1d16aae3",
        !           104:     },
        !           105:     {
        !           106:       .in  = "abcdefghijklmnopqrstuvwxyz",
        !           107:       .out = "32d10c7b8cf96570ca04ce37f2a19d84240d3a89",
        !           108:     },
        !           109:     {
        !           110:       .in  = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
        !           111:       .out = "761c457bf73b14d27e9e9265c46f4b4dda11f940",
        !           112:     },
        !           113:     {
        !           114:       .in  = "12345678901234567890123456789012345678901234567890123456789012345678901234567890",
        !           115:       .out = "50abf5706a150990a08b2c5ea40fa0e585554732",
        !           116:     },
        !           117:     {
        !           118:       .in  = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        !           119:       .out = "6a64fcc1fb970f7339ce886601775d2efea5cd4b",
        !           120:     },
        !           121:   };
        !           122: 
        !           123:   return bt_assert_batch(test_vectors, test_sha1, bt_fmt_str, bt_fmt_str);
        !           124: }
        !           125: 
        !           126: static int
        !           127: t_sha224(void)
        !           128: {
        !           129:   struct bt_pair test_vectors[] = {
        !           130:     {
        !           131:       .in  = "",
        !           132:       .out = "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f",
        !           133:     },
        !           134:     {
        !           135:       .in  = "a",
        !           136:       .out = "abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5",
        !           137:     },
        !           138:     {
        !           139:       .in  = "abc",
        !           140:       .out = "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7",
        !           141:     },
        !           142:     {
        !           143:       .in  = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
        !           144:       .out = "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525",
        !           145:     },
        !           146:     {
        !           147:       .in  = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        !           148:       .out = "cca7dd1a332a17775d8b0429bdb45055c2d4368ebaab0c7cf385586e",
        !           149:     },
        !           150:   };
        !           151: 
        !           152:   return bt_assert_batch(test_vectors, test_sha224, bt_fmt_str, bt_fmt_str);
        !           153: }
        !           154: 
        !           155: static int
        !           156: t_sha256(void)
        !           157: {
        !           158:   struct bt_pair test_vectors[] = {
        !           159:     {
        !           160:       .in  = "",
        !           161:       .out = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        !           162:     },
        !           163:     {
        !           164:       .in  = "a",
        !           165:       .out = "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb",
        !           166:     },
        !           167:     {
        !           168:       .in  = "abc",
        !           169:       .out = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
        !           170:     },
        !           171:     {
        !           172:       .in  = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
        !           173:       .out = "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
        !           174:     },
        !           175:     {
        !           176:       .in  = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        !           177:       .out = "bf18b43b61652b5d73f41ebf3d72e5e43aebf5076f497dde31ea3de9de4998ef",
        !           178:     },
        !           179:   };
        !           180: 
        !           181:   return bt_assert_batch(test_vectors, test_sha256, bt_fmt_str, bt_fmt_str);
        !           182: }
        !           183: 
        !           184: static int
        !           185: t_sha384(void)
        !           186: {
        !           187:   struct bt_pair test_vectors[] = {
        !           188:     {
        !           189:       .in  = "",
        !           190:       .out = "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b",
        !           191:     },
        !           192:     {
        !           193:       .in  = "a",
        !           194:       .out = "54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31",
        !           195:     },
        !           196:     {
        !           197:       .in  = "abc",
        !           198:       .out = "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7",
        !           199:     },
        !           200:     {
        !           201:       .in  = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
        !           202:       .out = "3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b",
        !           203:     },
        !           204:     {
        !           205:       .in  = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        !           206:       .out = "6452928a62ca915a60f2d16ea22cc832d8ecb35443d78a3ff6986e7def9174a1dc16ce2ff65d3ed1666db98357f3c05e",
        !           207:     },
        !           208:   };
        !           209: 
        !           210:   return bt_assert_batch(test_vectors, test_sha384, bt_fmt_str, bt_fmt_str);
        !           211: }
        !           212: 
        !           213: static int
        !           214: t_sha512(void)
        !           215: {
        !           216:   struct bt_pair test_vectors[] = {
        !           217:     {
        !           218:       .in  = "",
        !           219:       .out = "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
        !           220:     },
        !           221:     {
        !           222:       .in  = "a",
        !           223:       .out = "1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75",
        !           224:     },
        !           225:     {
        !           226:       .in  = "abc",
        !           227:       .out = "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
        !           228:     },
        !           229:     {
        !           230:       .in  = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
        !           231:       .out = "204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445",
        !           232:     },
        !           233:     {
        !           234:       .in  = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        !           235:       .out = "415509a1c345371acb3e27a88b3835e3b6dfebcbbab5134850596f4db64d7bb22ac42c3cd179446a80c92b8be955460eb536eac01389a7e1fdf09d1dca83922f",
        !           236:     },
        !           237:   };
        !           238: 
        !           239:   return bt_assert_batch(test_vectors, test_sha512, bt_fmt_str, bt_fmt_str);
        !           240: }
        !           241: 
        !           242: 
        !           243: /*
        !           244:  * Testing SHAxxx HMAC functions
        !           245:  */
        !           246: 
        !           247: #define HMAC_BUFFER_SIZE 160
        !           248: struct hmac_data_in {
        !           249:   byte key[HMAC_BUFFER_SIZE];
        !           250:   uint key_len;
        !           251:   byte data[HMAC_BUFFER_SIZE];
        !           252:   uint data_len;
        !           253: };
        !           254: 
        !           255: static void
        !           256: hmac_in_fmt(char *buf, size_t size, const void *data_)
        !           257: {
        !           258:   uint i;
        !           259:   const struct hmac_data_in *data = data_;
        !           260: 
        !           261:   snprintf(buf, size, "data: '");
        !           262:   for (i = 0; i < data->data_len; i++)
        !           263:     snprintf(buf+strlen(buf), size-strlen(buf), bt_is_char(data->data[i]) ? "%c" : " 0x%02x", data->data[i]);
        !           264: 
        !           265:   snprintf(buf+strlen(buf), size-strlen(buf), "', key: '");
        !           266:   for (i = 0; i < data->key_len; i++)
        !           267:     snprintf(buf+strlen(buf), size-strlen(buf), bt_is_char(data->key[i]) ? "%c" : " 0x%02x", data->key[i]);
        !           268:   snprintf(buf+strlen(buf), size-strlen(buf), "'");
        !           269: }
        !           270: 
        !           271: #define define_test_hmac_fn(name,id)                                   \
        !           272: static int                                                             \
        !           273: test_##name##_hmac(void *out_, const void *in_, const void *expected_out_)     \
        !           274: {                                                                      \
        !           275:   char *out = out_;                                                    \
        !           276:   const struct hmac_data_in *in = in_;                                 \
        !           277:   const char *expected_out = expected_out_;                            \
        !           278:                                                                        \
        !           279:   struct mac_context ctx;                                              \
        !           280:   mac_init(&ctx, id, in->key, in->key_len);                            \
        !           281:   mac_update(&ctx, in->data, in->data_len);                            \
        !           282:   byte *out_bin = mac_final(&ctx);                                     \
        !           283:                                                                        \
        !           284:   uint len = mac_type_length(id);                                      \
        !           285:   bt_bytes_to_hex(out, out_bin, len);                                  \
        !           286:                                                                        \
        !           287:   return strncmp(out, expected_out, 2*len+1) == 0; \
        !           288: }
        !           289: 
        !           290: define_test_hmac_fn(md5,       ALG_HMAC_MD5)
        !           291: define_test_hmac_fn(sha1,      ALG_HMAC_SHA1)
        !           292: define_test_hmac_fn(sha224,    ALG_HMAC_SHA224)
        !           293: define_test_hmac_fn(sha256,    ALG_HMAC_SHA256)
        !           294: define_test_hmac_fn(sha384,    ALG_HMAC_SHA384)
        !           295: define_test_hmac_fn(sha512,    ALG_HMAC_SHA512)
        !           296: 
        !           297: 
        !           298: static int
        !           299: t_md5_hmac(void)
        !           300: {
        !           301:   struct bt_pair test_vectors[] = {
        !           302:     {
        !           303:       .in  = & (struct hmac_data_in) {
        !           304:        .key = {
        !           305:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           306:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           307:        },
        !           308:        .key_len = 16,
        !           309:        .data = "Hi There",
        !           310:        .data_len = 8,
        !           311:       },
        !           312:       .out = "9294727a3638bb1c13f48ef8158bfc9d",
        !           313:     },
        !           314:     {
        !           315:       .in  = & (struct hmac_data_in) {
        !           316:        .key = "Jefe",
        !           317:        .key_len = 4,
        !           318:        .data = "what do ya want for nothing?",
        !           319:        .data_len = 28,
        !           320:       },
        !           321:       .out = "750c783e6ab0b503eaa86e310a5db738",
        !           322:     },
        !           323:     {
        !           324:       .in  = & (struct hmac_data_in) {
        !           325:        .key = {
        !           326:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           327:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           328:        },
        !           329:        .key_len = 16,
        !           330:        .data = {
        !           331:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           332:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           333:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           334:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           335:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           336:        },
        !           337:        .data_len = 50,
        !           338:       },
        !           339:       .out = "56be34521d144c88dbb8c733f0e8b3f6",
        !           340:     },
        !           341:     {
        !           342:       .in  = & (struct hmac_data_in) {
        !           343:        .key = {
        !           344:          0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
        !           345:          0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
        !           346:          0x15, 0x16, 0x17, 0x18, 0x19,
        !           347:        },
        !           348:        .key_len = 25,
        !           349:        .data = {
        !           350:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           351:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           352:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           353:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           354:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           355:        },
        !           356:        .data_len = 50,
        !           357:       },
        !           358:       .out = "697eaf0aca3a3aea3a75164746ffaa79",
        !           359:     },
        !           360:     {
        !           361:       .in  = & (struct hmac_data_in) {
        !           362:        .key = {
        !           363:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           364:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           365:        },
        !           366:        .key_len = 16,
        !           367:        .data = "Test With Truncation",
        !           368:        .data_len = 20,
        !           369:       },
        !           370:       .out = "56461ef2342edc00f9bab995690efd4c",
        !           371:     },
        !           372:     {
        !           373:       .in  = & (struct hmac_data_in) {
        !           374:        .key = {
        !           375:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           376:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           377:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           378:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           379:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           380:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           381:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           382:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           383:        },
        !           384:        .key_len = 80,
        !           385:        .data = "Test Using Larger Than Block-Size Key - Hash Key First",
        !           386:        .data_len = 54,
        !           387:       },
        !           388:       .out = "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd",
        !           389:     },
        !           390:     {
        !           391:       .in  = & (struct hmac_data_in) {
        !           392:        .key = {
        !           393:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           394:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           395:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           396:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           397:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           398:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           399:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           400:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           401:        },
        !           402:        .key_len = 80,
        !           403:        .data = "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
        !           404:        .data_len = 73,
        !           405:       },
        !           406:       .out = "6f630fad67cda0ee1fb1f562db3aa53e",
        !           407:     },
        !           408:   };
        !           409: 
        !           410:   return bt_assert_batch(test_vectors, test_md5_hmac, hmac_in_fmt, bt_fmt_str);
        !           411: }
        !           412: 
        !           413: static int
        !           414: t_sha1_hmac(void)
        !           415: {
        !           416:   struct bt_pair test_vectors[] = {
        !           417:     {
        !           418:       .in  = & (struct hmac_data_in) {
        !           419:        .key = {
        !           420:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           421:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           422:        },
        !           423:        .key_len = 20,
        !           424:        .data = "Hi There",
        !           425:        .data_len = 8,
        !           426:       },
        !           427:       .out = "b617318655057264e28bc0b6fb378c8ef146be00",
        !           428:     },
        !           429:     {
        !           430:       .in  = & (struct hmac_data_in) {
        !           431:        .key = "Jefe",
        !           432:        .key_len = 4,
        !           433:        .data = "what do ya want for nothing?",
        !           434:        .data_len = 28,
        !           435:       },
        !           436:       .out = "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79",
        !           437:     },
        !           438:     {
        !           439:       .in  = & (struct hmac_data_in) {
        !           440:        .key = {
        !           441:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           442:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           443:        },
        !           444:        .key_len = 20,
        !           445:        .data = {
        !           446:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           447:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           448:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           449:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           450:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           451:        },
        !           452:        .data_len = 50,
        !           453:       },
        !           454:       .out = "125d7342b9ac11cd91a39af48aa17b4f63f175d3",
        !           455:     },
        !           456:     {
        !           457:       .in  = & (struct hmac_data_in) {
        !           458:        .key = {
        !           459:          0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
        !           460:          0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
        !           461:          0x15, 0x16, 0x17, 0x18, 0x19,
        !           462:        },
        !           463:        .key_len = 25,
        !           464:        .data = {
        !           465:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           466:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           467:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           468:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           469:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           470:        },
        !           471:        .data_len = 50,
        !           472:       },
        !           473:       .out = "4c9007f4026250c6bc8414f9bf50c86c2d7235da",
        !           474:     },
        !           475:     {
        !           476:       .in  = & (struct hmac_data_in) {
        !           477:        .key = {
        !           478:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           479:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           480:        },
        !           481:        .key_len = 20,
        !           482:        .data = "Test With Truncation",
        !           483:        .data_len = 20,
        !           484:       },
        !           485:       .out = "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04",
        !           486:     },
        !           487:     {
        !           488:       .in  = & (struct hmac_data_in) {
        !           489:        .key = {
        !           490:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           491:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           492:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           493:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           494:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           495:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           496:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           497:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           498:        },
        !           499:        .key_len = 80,
        !           500:        .data = "Test Using Larger Than Block-Size Key - Hash Key First",
        !           501:        .data_len = 54,
        !           502:       },
        !           503:       .out = "aa4ae5e15272d00e95705637ce8a3b55ed402112",
        !           504:     },
        !           505:     {
        !           506:       .in  = & (struct hmac_data_in) {
        !           507:        .key = {
        !           508:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           509:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           510:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           511:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           512:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           513:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           514:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           515:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           516:        },
        !           517:        .key_len = 80,
        !           518:        .data = "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
        !           519:        .data_len = 73,
        !           520:       },
        !           521:       .out = "e8e99d0f45237d786d6bbaa7965c7808bbff1a91",
        !           522:     },
        !           523:     {
        !           524:       .in  = & (struct hmac_data_in) {
        !           525:        .key = {
        !           526:          0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
        !           527:          0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
        !           528:          0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
        !           529:          0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
        !           530:          0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
        !           531:          0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
        !           532:          0x61, 0x61, 0x61, 0x61,
        !           533:        },
        !           534:        .key_len = 64,
        !           535:        .data = "Test Using key 64 bytes sized",
        !           536:        .data_len = 29,
        !           537:       },
        !           538:       .out = "a55d4fb80962a6b3d2e720705314bee417d68cf6",
        !           539:     },
        !           540:   };
        !           541: 
        !           542:   return bt_assert_batch(test_vectors, test_sha1_hmac, hmac_in_fmt, bt_fmt_str);
        !           543: }
        !           544: 
        !           545: static int
        !           546: t_sha224_hmac(void)
        !           547: {
        !           548:   struct bt_pair test_vectors[] = {
        !           549:     {
        !           550:       .in  = & (struct hmac_data_in) {
        !           551:        .key = {
        !           552:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           553:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           554:        },
        !           555:        .key_len = 20,
        !           556:        .data = "Hi There",
        !           557:        .data_len = 8,
        !           558:       },
        !           559:       .out = "896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22",
        !           560:     },
        !           561:     {
        !           562:       .in  = & (struct hmac_data_in) {
        !           563:        .key = "Jefe",
        !           564:        .key_len = 4,
        !           565:        .data = "what do ya want for nothing?",
        !           566:        .data_len = 28,
        !           567:       },
        !           568:       .out = "a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44",
        !           569:     },
        !           570:     {
        !           571:       .in  = & (struct hmac_data_in) {
        !           572:        .key = {
        !           573:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           574:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           575:        },
        !           576:        .key_len = 20,
        !           577:        .data = {
        !           578:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           579:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           580:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           581:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           582:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           583:        },
        !           584:        .data_len = 50,
        !           585:       },
        !           586:       .out = "7fb3cb3588c6c1f6ffa9694d7d6ad2649365b0c1f65d69d1ec8333ea",
        !           587:     },
        !           588:     {
        !           589:       .in  = & (struct hmac_data_in) {
        !           590:        .key = {
        !           591:          0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
        !           592:          0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
        !           593:          0x15, 0x16, 0x17, 0x18, 0x19,
        !           594:        },
        !           595:        .key_len = 25,
        !           596:        .data = {
        !           597:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           598:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           599:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           600:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           601:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           602:        },
        !           603:        .data_len = 50,
        !           604:       },
        !           605:       .out = "6c11506874013cac6a2abc1bb382627cec6a90d86efc012de7afec5a",
        !           606:     },
        !           607:     {
        !           608:       .in  = & (struct hmac_data_in) {
        !           609:        .key = {
        !           610:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           611:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           612:        },
        !           613:        .key_len = 20,
        !           614:        .data = "Test With Truncation",
        !           615:        .data_len = 20,
        !           616:       },
        !           617:       .out = "0e2aea68a90c8d37c988bcdb9fca6fa8099cd857c7ec4a1815cac54c",
        !           618:     },
        !           619:     {
        !           620:       .in  = & (struct hmac_data_in) {
        !           621:        .key = {
        !           622:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           623:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           624:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           625:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           626:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           627:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           628:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           629:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           630:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           631:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           632:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           633:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           634:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           635:          0xaa,
        !           636:        },
        !           637:        .key_len = 131,
        !           638:        .data = "Test Using Larger Than Block-Size Key - Hash Key First",
        !           639:        .data_len = 54,
        !           640:       },
        !           641:       .out = "95e9a0db962095adaebe9b2d6f0dbce2d499f112f2d2b7273fa6870e",
        !           642:     },
        !           643:     {
        !           644:       .in  = & (struct hmac_data_in) {
        !           645:        .key = {
        !           646:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           647:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           648:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           649:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           650:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           651:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           652:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           653:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           654:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           655:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           656:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           657:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           658:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           659:          0xaa,
        !           660:        },
        !           661:        .key_len = 131,
        !           662:        .data = "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm.",
        !           663:        .data_len = 152,
        !           664:       },
        !           665:       .out = "3a854166ac5d9f023f54d517d0b39dbd946770db9c2b95c9f6f565d1",
        !           666:     },
        !           667:   };
        !           668: 
        !           669:   return bt_assert_batch(test_vectors, test_sha224_hmac, hmac_in_fmt, bt_fmt_str);
        !           670: }
        !           671: 
        !           672: static int
        !           673: t_sha256_hmac(void)
        !           674: {
        !           675:   struct bt_pair test_vectors[] = {
        !           676:     {
        !           677:       .in  = & (struct hmac_data_in) {
        !           678:        .key = {
        !           679:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           680:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           681:        },
        !           682:        .key_len = 20,
        !           683:        .data = "Hi There",
        !           684:        .data_len = 8,
        !           685:       },
        !           686:       .out = "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7",
        !           687:     },
        !           688:     {
        !           689:       .in  = & (struct hmac_data_in) {
        !           690:        .key = "Jefe",
        !           691:        .key_len = 4,
        !           692:        .data = "what do ya want for nothing?",
        !           693:        .data_len = 28,
        !           694:       },
        !           695:       .out = "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843",
        !           696:     },
        !           697:     {
        !           698:       .in  = & (struct hmac_data_in) {
        !           699:        .key = {
        !           700:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           701:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           702:        },
        !           703:        .key_len = 20,
        !           704:        .data = {
        !           705:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           706:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           707:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           708:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           709:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           710:        },
        !           711:        .data_len = 50,
        !           712:       },
        !           713:       .out = "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe",
        !           714:     },
        !           715:     {
        !           716:       .in  = & (struct hmac_data_in) {
        !           717:        .key = {
        !           718:          0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
        !           719:          0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
        !           720:          0x15, 0x16, 0x17, 0x18, 0x19,
        !           721:        },
        !           722:        .key_len = 25,
        !           723:        .data = {
        !           724:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           725:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           726:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           727:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           728:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           729:        },
        !           730:        .data_len = 50,
        !           731:       },
        !           732:       .out = "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b",
        !           733:     },
        !           734:     {
        !           735:       .in  = & (struct hmac_data_in) {
        !           736:        .key = {
        !           737:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           738:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           739:        },
        !           740:        .key_len = 20,
        !           741:        .data = "Test With Truncation",
        !           742:        .data_len = 20,
        !           743:       },
        !           744:       .out = "a3b6167473100ee06e0c796c2955552bfa6f7c0a6a8aef8b93f860aab0cd20c5",
        !           745:     },
        !           746:     {
        !           747:       .in  = & (struct hmac_data_in) {
        !           748:        .key = {
        !           749:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           750:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           751:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           752:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           753:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           754:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           755:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           756:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           757:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           758:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           759:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           760:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           761:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           762:          0xaa,
        !           763:        },
        !           764:        .key_len = 131,
        !           765:        .data = "Test Using Larger Than Block-Size Key - Hash Key First",
        !           766:        .data_len = 54,
        !           767:       },
        !           768:       .out = "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54",
        !           769:     },
        !           770:     {
        !           771:       .in  = & (struct hmac_data_in) {
        !           772:        .key = {
        !           773:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           774:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           775:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           776:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           777:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           778:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           779:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           780:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           781:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           782:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           783:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           784:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           785:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           786:          0xaa,
        !           787:        },
        !           788:        .key_len = 131,
        !           789:        .data = "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm.",
        !           790:        .data_len = 152,
        !           791:       },
        !           792:       .out = "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2",
        !           793:     },
        !           794:   };
        !           795: 
        !           796:   return bt_assert_batch(test_vectors, test_sha256_hmac, hmac_in_fmt, bt_fmt_str);
        !           797: }
        !           798: 
        !           799: static int
        !           800: t_sha384_hmac(void)
        !           801: {
        !           802:   struct bt_pair test_vectors[] = {
        !           803:     {
        !           804:       .in  = & (struct hmac_data_in) {
        !           805:        .key = {
        !           806:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           807:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           808:        },
        !           809:        .key_len = 20,
        !           810:        .data = "Hi There",
        !           811:        .data_len = 8,
        !           812:       },
        !           813:       .out = "afd03944d84895626b0825f4ab46907f15f9dadbe4101ec682aa034c7cebc59cfaea9ea9076ede7f4af152e8b2fa9cb6",
        !           814:     },
        !           815:     {
        !           816:       .in  = & (struct hmac_data_in) {
        !           817:        .key = "Jefe",
        !           818:        .key_len = 4,
        !           819:        .data = "what do ya want for nothing?",
        !           820:        .data_len = 28,
        !           821:       },
        !           822:       .out = "af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649",
        !           823:     },
        !           824:     {
        !           825:       .in  = & (struct hmac_data_in) {
        !           826:        .key = {
        !           827:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           828:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           829:        },
        !           830:        .key_len = 20,
        !           831:        .data = {
        !           832:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           833:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           834:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           835:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           836:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           837:        },
        !           838:        .data_len = 50,
        !           839:       },
        !           840:       .out = "88062608d3e6ad8a0aa2ace014c8a86f0aa635d947ac9febe83ef4e55966144b2a5ab39dc13814b94e3ab6e101a34f27",
        !           841:     },
        !           842:     {
        !           843:       .in  = & (struct hmac_data_in) {
        !           844:        .key = {
        !           845:          0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
        !           846:          0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
        !           847:          0x15, 0x16, 0x17, 0x18, 0x19,
        !           848:        },
        !           849:        .key_len = 25,
        !           850:        .data = {
        !           851:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           852:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           853:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           854:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           855:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           856:        },
        !           857:        .data_len = 50,
        !           858:       },
        !           859:       .out = "3e8a69b7783c25851933ab6290af6ca77a9981480850009cc5577c6e1f573b4e6801dd23c4a7d679ccf8a386c674cffb",
        !           860:     },
        !           861:     {
        !           862:       .in  = & (struct hmac_data_in) {
        !           863:        .key = {
        !           864:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           865:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           866:        },
        !           867:        .key_len = 20,
        !           868:        .data = "Test With Truncation",
        !           869:        .data_len = 20,
        !           870:       },
        !           871:       .out = "3abf34c3503b2a23a46efc619baef897f4c8e42c934ce55ccbae9740fcbc1af4ca62269e2a37cd88ba926341efe4aeea",
        !           872:     },
        !           873:     {
        !           874:       .in  = & (struct hmac_data_in) {
        !           875:        .key = {
        !           876:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           877:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           878:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           879:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           880:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           881:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           882:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           883:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           884:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           885:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           886:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           887:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           888:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           889:          0xaa,
        !           890:        },
        !           891:        .key_len = 131,
        !           892:        .data = "Test Using Larger Than Block-Size Key - Hash Key First",
        !           893:        .data_len = 54,
        !           894:       },
        !           895:       .out = "4ece084485813e9088d2c63a041bc5b44f9ef1012a2b588f3cd11f05033ac4c60c2ef6ab4030fe8296248df163f44952",
        !           896:     },
        !           897:     {
        !           898:       .in  = & (struct hmac_data_in) {
        !           899:        .key = {
        !           900:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           901:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           902:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           903:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           904:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           905:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           906:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           907:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           908:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           909:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           910:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           911:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           912:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           913:          0xaa,
        !           914:        },
        !           915:        .key_len = 131,
        !           916:        .data = "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm.",
        !           917:        .data_len = 152,
        !           918:       },
        !           919:       .out = "6617178e941f020d351e2f254e8fd32c602420feb0b8fb9adccebb82461e99c5a678cc31e799176d3860e6110c46523e",
        !           920:     },
        !           921:   };
        !           922: 
        !           923:   return bt_assert_batch(test_vectors, test_sha384_hmac, hmac_in_fmt, bt_fmt_str);
        !           924: }
        !           925: 
        !           926: static int
        !           927: t_sha512_hmac(void)
        !           928: {
        !           929:   struct bt_pair test_vectors[] = {
        !           930:     {
        !           931:       .in  = & (struct hmac_data_in) {
        !           932:        .key = {
        !           933:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           934:          0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
        !           935:        },
        !           936:        .key_len = 20,
        !           937:        .data = "Hi There",
        !           938:        .data_len = 8,
        !           939:       },
        !           940:       .out = "87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854",
        !           941:     },
        !           942:     {
        !           943:       .in  = & (struct hmac_data_in) {
        !           944:        .key = "Jefe",
        !           945:        .key_len = 4,
        !           946:        .data = "what do ya want for nothing?",
        !           947:        .data_len = 28,
        !           948:       },
        !           949:       .out = "164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737",
        !           950:     },
        !           951:     {
        !           952:       .in  = & (struct hmac_data_in) {
        !           953:        .key = {
        !           954:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           955:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !           956:        },
        !           957:        .key_len = 20,
        !           958:        .data = {
        !           959:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           960:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           961:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           962:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           963:          0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
        !           964:        },
        !           965:        .data_len = 50,
        !           966:       },
        !           967:       .out = "fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb",
        !           968:     },
        !           969:     {
        !           970:       .in  = & (struct hmac_data_in) {
        !           971:        .key = {
        !           972:          0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
        !           973:          0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
        !           974:          0x15, 0x16, 0x17, 0x18, 0x19,
        !           975:        },
        !           976:        .key_len = 25,
        !           977:        .data = {
        !           978:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           979:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           980:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           981:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           982:          0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
        !           983:        },
        !           984:        .data_len = 50,
        !           985:       },
        !           986:       .out = "b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd",
        !           987:     },
        !           988:     {
        !           989:       .in  = & (struct hmac_data_in) {
        !           990:        .key = {
        !           991:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           992:          0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
        !           993:        },
        !           994:        .key_len = 20,
        !           995:        .data = "Test With Truncation",
        !           996:        .data_len = 20,
        !           997:       },
        !           998:       .out = "415fad6271580a531d4179bc891d87a650188707922a4fbb36663a1eb16da008711c5b50ddd0fc235084eb9d3364a1454fb2ef67cd1d29fe6773068ea266e96b",
        !           999:     },
        !          1000:     {
        !          1001:       .in  = & (struct hmac_data_in) {
        !          1002:        .key = {
        !          1003:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1004:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1005:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1006:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1007:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1008:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1009:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1010:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1011:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1012:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1013:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1014:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1015:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1016:          0xaa,
        !          1017:        },
        !          1018:        .key_len = 131,
        !          1019:        .data = "Test Using Larger Than Block-Size Key - Hash Key First",
        !          1020:        .data_len = 54,
        !          1021:       },
        !          1022:       .out = "80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598",
        !          1023:     },
        !          1024:     {
        !          1025:       .in  = & (struct hmac_data_in) {
        !          1026:        .key = {
        !          1027:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1028:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1029:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1030:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1031:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1032:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1033:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1034:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1035:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1036:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1037:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1038:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1039:          0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        !          1040:          0xaa,
        !          1041:        },
        !          1042:        .key_len = 131,
        !          1043:        .data = "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm.",
        !          1044:        .data_len = 152,
        !          1045:       },
        !          1046:       .out = "e37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58",
        !          1047:     },
        !          1048:   };
        !          1049: 
        !          1050:   return bt_assert_batch(test_vectors, test_sha512_hmac, hmac_in_fmt, bt_fmt_str);
        !          1051: }
        !          1052: 
        !          1053: 
        !          1054: /*
        !          1055:  * Testing SHAxxx concating independence
        !          1056:  */
        !          1057: 
        !          1058: #include "lib/sha256.h"
        !          1059: #include "lib/sha512.h"
        !          1060: 
        !          1061: static int
        !          1062: t_sha256_concating(void)
        !          1063: {
        !          1064:   char hash_a[SHA256_HEX_SIZE];
        !          1065:   char hash_b[SHA256_HEX_SIZE];
        !          1066: 
        !          1067:   char *str_a  = "a" "bb" "ccc" "dddd" "eeeee" "ffffff";
        !          1068:   char *str_b1 = "a"                                   ;
        !          1069:   char *str_b2 =     "bb"                              ;
        !          1070:   char *str_b3 =          "ccc"                        ;
        !          1071:   char *str_b4 =                "dddd"                 ;
        !          1072:   char *str_b5 =                       "eeeee"         ;
        !          1073:   char *str_b6 =                               "ffffff";
        !          1074: 
        !          1075:   struct hash_context ctx_a;
        !          1076:   sha256_init(&ctx_a);
        !          1077:   sha256_update(&ctx_a, str_a, strlen(str_a));
        !          1078:   byte *hash_a_ = sha256_final(&ctx_a);
        !          1079:   bt_bytes_to_hex(hash_a, hash_a_, SHA256_SIZE);
        !          1080: 
        !          1081:   struct hash_context ctx_b;
        !          1082:   sha256_init(&ctx_b);
        !          1083:   sha256_update(&ctx_b, str_b1, strlen(str_b1));
        !          1084:   sha256_update(&ctx_b, str_b2, strlen(str_b2));
        !          1085:   sha256_update(&ctx_b, str_b3, strlen(str_b3));
        !          1086:   sha256_update(&ctx_b, str_b4, strlen(str_b4));
        !          1087:   sha256_update(&ctx_b, str_b5, strlen(str_b5));
        !          1088:   sha256_update(&ctx_b, str_b6, strlen(str_b6));
        !          1089:   byte *hash_b_ = sha256_final(&ctx_b);
        !          1090:   bt_bytes_to_hex(hash_b, hash_b_, SHA256_SIZE);
        !          1091: 
        !          1092:   int are_hash_a_b_equal = (strncmp(hash_a, hash_b, sizeof(hash_a)) == 0);
        !          1093:   bt_assert_msg(are_hash_a_b_equal, "Hashes A: %s, B: %s should be same", hash_a, hash_b);
        !          1094: 
        !          1095:   return 1;
        !          1096: }
        !          1097: 
        !          1098: 
        !          1099: static int
        !          1100: t_sha512_concating(void)
        !          1101: {
        !          1102:   char hash_a[SHA512_HEX_SIZE];
        !          1103:   char hash_b[SHA512_HEX_SIZE];
        !          1104: 
        !          1105:   char *str_a  = "a" "bb" "ccc" "dddd" "eeeee" "ffffff";
        !          1106:   char *str_b1 = "a"                                   ;
        !          1107:   char *str_b2 =     "bb"                              ;
        !          1108:   char *str_b3 =          "ccc"                        ;
        !          1109:   char *str_b4 =                "dddd"                 ;
        !          1110:   char *str_b5 =                       "eeeee"         ;
        !          1111:   char *str_b6 =                               "ffffff";
        !          1112: 
        !          1113:   struct hash_context ctx_a;
        !          1114:   sha512_init(&ctx_a);
        !          1115:   sha512_update(&ctx_a, str_a, strlen(str_a));
        !          1116:   byte *hash_a_ = sha512_final(&ctx_a);
        !          1117:   bt_bytes_to_hex(hash_a, hash_a_, SHA512_SIZE);
        !          1118: 
        !          1119:   struct hash_context ctx_b;
        !          1120:   sha512_init(&ctx_b);
        !          1121:   sha512_update(&ctx_b, str_b1, strlen(str_b1));
        !          1122:   sha512_update(&ctx_b, str_b2, strlen(str_b2));
        !          1123:   sha512_update(&ctx_b, str_b3, strlen(str_b3));
        !          1124:   sha512_update(&ctx_b, str_b4, strlen(str_b4));
        !          1125:   sha512_update(&ctx_b, str_b5, strlen(str_b5));
        !          1126:   sha512_update(&ctx_b, str_b6, strlen(str_b6));
        !          1127:   byte *hash_b_ = sha512_final(&ctx_b);
        !          1128:   bt_bytes_to_hex(hash_b, hash_b_, SHA512_SIZE);
        !          1129: 
        !          1130:   int are_hash_a_b_equal = (strncmp(hash_a, hash_b, sizeof(hash_a)) == 0);
        !          1131:   bt_assert_msg(are_hash_a_b_equal, "Hashes A: %s, B: %s should be same", hash_a, hash_b);
        !          1132: 
        !          1133:   return 1;
        !          1134: }
        !          1135: 
        !          1136: int
        !          1137: main(int argc, char *argv[])
        !          1138: {
        !          1139:   bt_init(argc, argv);
        !          1140: 
        !          1141:   bt_test_suite(t_md5,    "Testing MD5 by RFC 1321");
        !          1142:   bt_test_suite(t_sha1,   "Testing SHA-1");
        !          1143:   bt_test_suite(t_sha224, "Testing SHA-224");
        !          1144:   bt_test_suite(t_sha256, "Testing SHA-256");
        !          1145:   bt_test_suite(t_sha384, "Testing SHA-384");
        !          1146:   bt_test_suite(t_sha512, "Testing SHA-512");
        !          1147: 
        !          1148:   bt_test_suite(t_md5_hmac, "Testing HMAC-MD5 by RFC 2202");
        !          1149:   bt_test_suite(t_sha1_hmac,   "Testing HMAC-SHA-1 by RFC 2202");
        !          1150:   bt_test_suite(t_sha224_hmac, "Testing HMAC-SHA-224 by RFC 4231");
        !          1151:   bt_test_suite(t_sha256_hmac, "Testing HMAC-SHA-256 by RFC 4231");
        !          1152:   bt_test_suite(t_sha384_hmac, "Testing HMAC-SHA-384 by RFC 4231");
        !          1153:   bt_test_suite(t_sha512_hmac, "Testing HMAC-SHA-512 by RFC 4231");
        !          1154: 
        !          1155:   bt_test_suite(t_sha256_concating, "Testing concatenation input string to hash using sha256_update");
        !          1156:   bt_test_suite(t_sha512_concating, "Testing concatenation input string to hash using sha512_update");
        !          1157: 
        !          1158:   return bt_exit_value();
        !          1159: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>