1*657b055cStb /* $OpenBSD: hkdf_test.c,v 1.2 2018/07/17 17:06:49 tb Exp $ */
21eb0ad50Sbeck /* Copyright (c) 2014, Google Inc.
31eb0ad50Sbeck *
41eb0ad50Sbeck * Permission to use, copy, modify, and/or distribute this software for any
51eb0ad50Sbeck * purpose with or without fee is hereby granted, provided that the above
61eb0ad50Sbeck * copyright notice and this permission notice appear in all copies.
71eb0ad50Sbeck *
81eb0ad50Sbeck * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
91eb0ad50Sbeck * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
101eb0ad50Sbeck * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
111eb0ad50Sbeck * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
121eb0ad50Sbeck * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
131eb0ad50Sbeck * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
141eb0ad50Sbeck * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
151eb0ad50Sbeck
161eb0ad50Sbeck #include <stdio.h>
171eb0ad50Sbeck #include <string.h>
181eb0ad50Sbeck
191eb0ad50Sbeck #include <openssl/crypto.h>
201eb0ad50Sbeck #include <openssl/evp.h>
211eb0ad50Sbeck #include <openssl/err.h>
221eb0ad50Sbeck #include <openssl/hkdf.h>
231eb0ad50Sbeck
241eb0ad50Sbeck #define OPENSSL_ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
251eb0ad50Sbeck
261eb0ad50Sbeck typedef struct HKDFTestVector_st {
271eb0ad50Sbeck const EVP_MD *(*md_func)(void);
281eb0ad50Sbeck const uint8_t ikm[80];
291eb0ad50Sbeck const size_t ikm_len;
301eb0ad50Sbeck const uint8_t salt[80];
311eb0ad50Sbeck const size_t salt_len;
321eb0ad50Sbeck const uint8_t info[80];
331eb0ad50Sbeck const size_t info_len;
341eb0ad50Sbeck const uint8_t prk[EVP_MAX_MD_SIZE];
351eb0ad50Sbeck const size_t prk_len;
361eb0ad50Sbeck const size_t out_len;
371eb0ad50Sbeck const uint8_t out[82];
381eb0ad50Sbeck } HKDFTestVector;
391eb0ad50Sbeck
401eb0ad50Sbeck /* These test vectors are from RFC 5869. */
411eb0ad50Sbeck static const HKDFTestVector kTests[] = {
421eb0ad50Sbeck {
431eb0ad50Sbeck EVP_sha256,
441eb0ad50Sbeck {
451eb0ad50Sbeck 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
461eb0ad50Sbeck 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
471eb0ad50Sbeck }, 22,
481eb0ad50Sbeck {
491eb0ad50Sbeck 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
501eb0ad50Sbeck 0x0c,
511eb0ad50Sbeck }, 13,
521eb0ad50Sbeck {
531eb0ad50Sbeck 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
541eb0ad50Sbeck }, 10,
551eb0ad50Sbeck {
561eb0ad50Sbeck 0x07, 0x77, 0x09, 0x36, 0x2c, 0x2e, 0x32, 0xdf, 0x0d, 0xdc, 0x3f, 0x0d,
571eb0ad50Sbeck 0xc4, 0x7b, 0xba, 0x63, 0x90, 0xb6, 0xc7, 0x3b, 0xb5, 0x0f, 0x9c, 0x31,
581eb0ad50Sbeck 0x22, 0xec, 0x84, 0x4a, 0xd7, 0xc2, 0xb3, 0xe5,
591eb0ad50Sbeck }, 32,
601eb0ad50Sbeck 42, {
611eb0ad50Sbeck 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, 0x90, 0x43, 0x4f, 0x64,
621eb0ad50Sbeck 0xd0, 0x36, 0x2f, 0x2a, 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c,
631eb0ad50Sbeck 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, 0x34, 0x00, 0x72, 0x08,
641eb0ad50Sbeck 0xd5, 0xb8, 0x87, 0x18, 0x58, 0x65
651eb0ad50Sbeck }
661eb0ad50Sbeck },
671eb0ad50Sbeck {
681eb0ad50Sbeck EVP_sha256,
691eb0ad50Sbeck {
701eb0ad50Sbeck 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
711eb0ad50Sbeck 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
721eb0ad50Sbeck 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
731eb0ad50Sbeck 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
741eb0ad50Sbeck 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
751eb0ad50Sbeck 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
761eb0ad50Sbeck 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f
771eb0ad50Sbeck }, 80,
781eb0ad50Sbeck {
791eb0ad50Sbeck 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
801eb0ad50Sbeck 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
811eb0ad50Sbeck 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
821eb0ad50Sbeck 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
831eb0ad50Sbeck 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b,
841eb0ad50Sbeck 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
851eb0ad50Sbeck 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf
861eb0ad50Sbeck }, 80,
871eb0ad50Sbeck {
881eb0ad50Sbeck 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb,
891eb0ad50Sbeck 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
901eb0ad50Sbeck 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3,
911eb0ad50Sbeck 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
921eb0ad50Sbeck 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
931eb0ad50Sbeck 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
941eb0ad50Sbeck 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
951eb0ad50Sbeck }, 80,
961eb0ad50Sbeck {
971eb0ad50Sbeck 0x06, 0xa6, 0xb8, 0x8c, 0x58, 0x53, 0x36, 0x1a, 0x06, 0x10, 0x4c, 0x9c,
981eb0ad50Sbeck 0xeb, 0x35, 0xb4, 0x5c, 0xef, 0x76, 0x00, 0x14, 0x90, 0x46, 0x71, 0x01,
991eb0ad50Sbeck 0x4a, 0x19, 0x3f, 0x40, 0xc1, 0x5f, 0xc2, 0x44,
1001eb0ad50Sbeck }, 32,
1011eb0ad50Sbeck 82, {
1021eb0ad50Sbeck 0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, 0xc8, 0xe7, 0xf7, 0x8c,
1031eb0ad50Sbeck 0x59, 0x6a, 0x49, 0x34, 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8,
1041eb0ad50Sbeck 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, 0x59, 0x04, 0x5a, 0x99,
1051eb0ad50Sbeck 0xca, 0xc7, 0x82, 0x72, 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09,
1061eb0ad50Sbeck 0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, 0x36, 0x77, 0x93, 0xa9,
1071eb0ad50Sbeck 0xac, 0xa3, 0xdb, 0x71, 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87,
1081eb0ad50Sbeck 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, 0x1d, 0x87
1091eb0ad50Sbeck }
1101eb0ad50Sbeck },
1111eb0ad50Sbeck {
1121eb0ad50Sbeck EVP_sha256,
1131eb0ad50Sbeck {
1141eb0ad50Sbeck 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1151eb0ad50Sbeck 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1161eb0ad50Sbeck }, 22,
1171eb0ad50Sbeck {
1181eb0ad50Sbeck 0,
1191eb0ad50Sbeck }, 0,
1201eb0ad50Sbeck {
1211eb0ad50Sbeck 0,
1221eb0ad50Sbeck }, 0,
1231eb0ad50Sbeck {
1241eb0ad50Sbeck 0x19, 0xef, 0x24, 0xa3, 0x2c, 0x71, 0x7b, 0x16, 0x7f, 0x33, 0xa9, 0x1d,
1251eb0ad50Sbeck 0x6f, 0x64, 0x8b, 0xdf, 0x96, 0x59, 0x67, 0x76, 0xaf, 0xdb, 0x63, 0x77,
1261eb0ad50Sbeck 0xac, 0x43, 0x4c, 0x1c, 0x29, 0x3c, 0xcb, 0x04
1271eb0ad50Sbeck }, 32,
1281eb0ad50Sbeck 42, {
1291eb0ad50Sbeck 0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, 0x71, 0x5f, 0x80, 0x2a,
1301eb0ad50Sbeck 0x06, 0x3c, 0x5a, 0x31, 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e,
1311eb0ad50Sbeck 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, 0x9d, 0x20, 0x13, 0x95,
1321eb0ad50Sbeck 0xfa, 0xa4, 0xb6, 0x1a, 0x96, 0xc8
1331eb0ad50Sbeck }
1341eb0ad50Sbeck },
1351eb0ad50Sbeck {
1361eb0ad50Sbeck EVP_sha1,
1371eb0ad50Sbeck {
1381eb0ad50Sbeck 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1391eb0ad50Sbeck }, 11,
1401eb0ad50Sbeck {
1411eb0ad50Sbeck 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
1421eb0ad50Sbeck 0x0c,
1431eb0ad50Sbeck }, 13,
1441eb0ad50Sbeck {
1451eb0ad50Sbeck 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
1461eb0ad50Sbeck }, 10,
1471eb0ad50Sbeck {
1481eb0ad50Sbeck 0x9b, 0x6c, 0x18, 0xc4, 0x32, 0xa7, 0xbf, 0x8f, 0x0e, 0x71, 0xc8, 0xeb,
1491eb0ad50Sbeck 0x88, 0xf4, 0xb3, 0x0b, 0xaa, 0x2b, 0xa2, 0x43
1501eb0ad50Sbeck }, 20,
1511eb0ad50Sbeck 42, {
1521eb0ad50Sbeck 0x08, 0x5a, 0x01, 0xea, 0x1b, 0x10, 0xf3, 0x69, 0x33, 0x06, 0x8b, 0x56,
1531eb0ad50Sbeck 0xef, 0xa5, 0xad, 0x81, 0xa4, 0xf1, 0x4b, 0x82, 0x2f, 0x5b, 0x09, 0x15,
1541eb0ad50Sbeck 0x68, 0xa9, 0xcd, 0xd4, 0xf1, 0x55, 0xfd, 0xa2, 0xc2, 0x2e, 0x42, 0x24,
1551eb0ad50Sbeck 0x78, 0xd3, 0x05, 0xf3, 0xf8, 0x96
1561eb0ad50Sbeck }
1571eb0ad50Sbeck },
1581eb0ad50Sbeck {
1591eb0ad50Sbeck EVP_sha1,
1601eb0ad50Sbeck {
1611eb0ad50Sbeck 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
1621eb0ad50Sbeck 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1631eb0ad50Sbeck 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
1641eb0ad50Sbeck 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
1651eb0ad50Sbeck 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
1661eb0ad50Sbeck 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
1671eb0ad50Sbeck 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f
1681eb0ad50Sbeck }, 80,
1691eb0ad50Sbeck {
1701eb0ad50Sbeck 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
1711eb0ad50Sbeck 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
1721eb0ad50Sbeck 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
1731eb0ad50Sbeck 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
1741eb0ad50Sbeck 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b,
1751eb0ad50Sbeck 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
1761eb0ad50Sbeck 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf
1771eb0ad50Sbeck }, 80,
1781eb0ad50Sbeck {
1791eb0ad50Sbeck 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb,
1801eb0ad50Sbeck 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
1811eb0ad50Sbeck 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3,
1821eb0ad50Sbeck 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
1831eb0ad50Sbeck 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
1841eb0ad50Sbeck 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1851eb0ad50Sbeck 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1861eb0ad50Sbeck }, 80,
1871eb0ad50Sbeck {
1881eb0ad50Sbeck 0x8a, 0xda, 0xe0, 0x9a, 0x2a, 0x30, 0x70, 0x59, 0x47, 0x8d, 0x30, 0x9b,
1891eb0ad50Sbeck 0x26, 0xc4, 0x11, 0x5a, 0x22, 0x4c, 0xfa, 0xf6,
1901eb0ad50Sbeck }, 20,
1911eb0ad50Sbeck 82, {
1921eb0ad50Sbeck 0x0b, 0xd7, 0x70, 0xa7, 0x4d, 0x11, 0x60, 0xf7, 0xc9, 0xf1, 0x2c, 0xd5,
1931eb0ad50Sbeck 0x91, 0x2a, 0x06, 0xeb, 0xff, 0x6a, 0xdc, 0xae, 0x89, 0x9d, 0x92, 0x19,
1941eb0ad50Sbeck 0x1f, 0xe4, 0x30, 0x56, 0x73, 0xba, 0x2f, 0xfe, 0x8f, 0xa3, 0xf1, 0xa4,
1951eb0ad50Sbeck 0xe5, 0xad, 0x79, 0xf3, 0xf3, 0x34, 0xb3, 0xb2, 0x02, 0xb2, 0x17, 0x3c,
1961eb0ad50Sbeck 0x48, 0x6e, 0xa3, 0x7c, 0xe3, 0xd3, 0x97, 0xed, 0x03, 0x4c, 0x7f, 0x9d,
1971eb0ad50Sbeck 0xfe, 0xb1, 0x5c, 0x5e, 0x92, 0x73, 0x36, 0xd0, 0x44, 0x1f, 0x4c, 0x43,
1981eb0ad50Sbeck 0x00, 0xe2, 0xcf, 0xf0, 0xd0, 0x90, 0x0b, 0x52, 0xd3, 0xb4
1991eb0ad50Sbeck }
2001eb0ad50Sbeck },
2011eb0ad50Sbeck {
2021eb0ad50Sbeck EVP_sha1,
2031eb0ad50Sbeck {
2041eb0ad50Sbeck 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
2051eb0ad50Sbeck 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
2061eb0ad50Sbeck }, 22,
2071eb0ad50Sbeck {
2081eb0ad50Sbeck 0,
2091eb0ad50Sbeck }, 0,
2101eb0ad50Sbeck {
2111eb0ad50Sbeck 0,
2121eb0ad50Sbeck }, 0,
2131eb0ad50Sbeck {
2141eb0ad50Sbeck 0xda, 0x8c, 0x8a, 0x73, 0xc7, 0xfa, 0x77, 0x28, 0x8e, 0xc6, 0xf5, 0xe7,
2151eb0ad50Sbeck 0xc2, 0x97, 0x78, 0x6a, 0xa0, 0xd3, 0x2d, 0x01,
2161eb0ad50Sbeck }, 20,
2171eb0ad50Sbeck 42, {
2181eb0ad50Sbeck 0x0a, 0xc1, 0xaf, 0x70, 0x02, 0xb3, 0xd7, 0x61, 0xd1, 0xe5, 0x52, 0x98,
2191eb0ad50Sbeck 0xda, 0x9d, 0x05, 0x06, 0xb9, 0xae, 0x52, 0x05, 0x72, 0x20, 0xa3, 0x06,
2201eb0ad50Sbeck 0xe0, 0x7b, 0x6b, 0x87, 0xe8, 0xdf, 0x21, 0xd0, 0xea, 0x00, 0x03, 0x3d,
2211eb0ad50Sbeck 0xe0, 0x39, 0x84, 0xd3, 0x49, 0x18
2221eb0ad50Sbeck }
2231eb0ad50Sbeck },
2241eb0ad50Sbeck {
2251eb0ad50Sbeck EVP_sha1,
2261eb0ad50Sbeck {
2271eb0ad50Sbeck 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
2281eb0ad50Sbeck 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
2291eb0ad50Sbeck }, 22,
2301eb0ad50Sbeck {
2311eb0ad50Sbeck 0,
2321eb0ad50Sbeck }, 0,
2331eb0ad50Sbeck {
2341eb0ad50Sbeck 0,
2351eb0ad50Sbeck }, 0,
2361eb0ad50Sbeck {
2371eb0ad50Sbeck 0x2a, 0xdc, 0xca, 0xda, 0x18, 0x77, 0x9e, 0x7c, 0x20, 0x77, 0xad, 0x2e,
2381eb0ad50Sbeck 0xb1, 0x9d, 0x3f, 0x3e, 0x73, 0x13, 0x85, 0xdd,
2391eb0ad50Sbeck }, 20,
2401eb0ad50Sbeck 42, {
2411eb0ad50Sbeck 0x2c, 0x91, 0x11, 0x72, 0x04, 0xd7, 0x45, 0xf3, 0x50, 0x0d, 0x63, 0x6a,
2421eb0ad50Sbeck 0x62, 0xf6, 0x4f, 0x0a, 0xb3, 0xba, 0xe5, 0x48, 0xaa, 0x53, 0xd4, 0x23,
2431eb0ad50Sbeck 0xb0, 0xd1, 0xf2, 0x7e, 0xbb, 0xa6, 0xf5, 0xe5, 0x67, 0x3a, 0x08, 0x1d,
2441eb0ad50Sbeck 0x70, 0xcc, 0xe7, 0xac, 0xfc, 0x48
2451eb0ad50Sbeck }
2461eb0ad50Sbeck },
2471eb0ad50Sbeck };
2481eb0ad50Sbeck
main(void)2491eb0ad50Sbeck int main(void) {
2501eb0ad50Sbeck size_t i;
2511eb0ad50Sbeck OPENSSL_add_all_algorithms_noconf();
2521eb0ad50Sbeck
2531eb0ad50Sbeck for (i = 0; i < OPENSSL_ARRAY_SIZE(kTests); i++) {
2541eb0ad50Sbeck const HKDFTestVector *test = &kTests[i];
2551eb0ad50Sbeck uint8_t prk[EVP_MAX_MD_SIZE];
2561eb0ad50Sbeck uint8_t buf[82];
2571eb0ad50Sbeck size_t prk_len;
2581eb0ad50Sbeck if (!HKDF_extract(prk, &prk_len, test->md_func(), test->ikm,
2591eb0ad50Sbeck test->ikm_len, test->salt, test->salt_len)) {
2601eb0ad50Sbeck fprintf(stderr, "Call to HKDF_extract failed\n");
2611eb0ad50Sbeck ERR_print_errors_fp(stderr);
2621eb0ad50Sbeck return 1;
2631eb0ad50Sbeck }
2641eb0ad50Sbeck if (prk_len != test->prk_len ||
2651eb0ad50Sbeck memcmp(prk, test->prk, test->prk_len) != 0) {
2661eb0ad50Sbeck fprintf(stderr, "%zu: Resulting PRK does not match"
2671eb0ad50Sbeck "test vector\n", i);
2681eb0ad50Sbeck return 1;
2691eb0ad50Sbeck }
2701eb0ad50Sbeck if (!HKDF_expand(buf, test->out_len, test->md_func(), prk, prk_len,
2711eb0ad50Sbeck test->info, test->info_len)) {
2721eb0ad50Sbeck fprintf(stderr, "Call to HKDF_expand failed\n");
2731eb0ad50Sbeck ERR_print_errors_fp(stderr);
2741eb0ad50Sbeck return 1;
2751eb0ad50Sbeck }
2761eb0ad50Sbeck if (memcmp(buf, test->out, test->out_len) != 0) {
2771eb0ad50Sbeck fprintf(stderr,
2781eb0ad50Sbeck "%zu: Resulting key material does not match test"
2791eb0ad50Sbeck "vector\n", i);
2801eb0ad50Sbeck return 1;
2811eb0ad50Sbeck }
2821eb0ad50Sbeck
2831eb0ad50Sbeck if (!HKDF(buf, test->out_len, test->md_func(), test->ikm,
2841eb0ad50Sbeck test->ikm_len, test->salt, test->salt_len, test->info,
2851eb0ad50Sbeck test->info_len)) {
2861eb0ad50Sbeck fprintf(stderr, "Call to HKDF failed\n");
2871eb0ad50Sbeck ERR_print_errors_fp(stderr);
2881eb0ad50Sbeck return 1;
2891eb0ad50Sbeck }
2901eb0ad50Sbeck if (memcmp(buf, test->out, test->out_len) != 0) {
2911eb0ad50Sbeck fprintf(stderr,
2921eb0ad50Sbeck "%zu: Resulting key material does not match test"
2931eb0ad50Sbeck "vector\n", i);
2941eb0ad50Sbeck return 1;
2951eb0ad50Sbeck }
2961eb0ad50Sbeck }
2971eb0ad50Sbeck
2981eb0ad50Sbeck printf("PASS\n");
2991eb0ad50Sbeck return 0;
3001eb0ad50Sbeck }
301