xref: /openbsd/regress/lib/libcrypto/hkdf/hkdf_test.c (revision 657b055c)
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