1d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Copyright (c) 2014, Google Inc. 2d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 3d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Permission to use, copy, modify, and/or distribute this software for any 4d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * purpose with or without fee is hereby granted, provided that the above 5d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * copyright notice and this permission notice appear in all copies. 6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 7d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 10d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 12d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 13d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ 14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <stdio.h> 16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <string.h> 17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/crypto.h> 19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/digest.h> 20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/err.h> 21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/hkdf.h> 22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 24d9e397b599b13d642138480a28c14db7a136bf0Adam Langleytypedef struct { 25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const EVP_MD *(*md_func)(void); 26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const uint8_t ikm[80]; 27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const size_t ikm_len; 28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const uint8_t salt[80]; 29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const size_t salt_len; 30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const uint8_t info[80]; 31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const size_t info_len; 32d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const size_t out_len; 33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const uint8_t out[82]; 34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} hkdf_test_vector_t; 35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* These test vectors are from RFC 5869. */ 37d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystatic const hkdf_test_vector_t kTests[] = { 38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley EVP_sha256, 40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 22, 44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0c, 47d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 13, 48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 10, 51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 42, { 52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, 0x90, 0x43, 0x4f, 0x64, 53d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xd0, 0x36, 0x2f, 0x2a, 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c, 54d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, 0x34, 0x00, 0x72, 0x08, 55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xd5, 0xb8, 0x87, 0x18, 0x58, 0x65 56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 58d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley EVP_sha256, 60d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 61d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 62d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 63d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 64d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 65d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 66d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 67d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f 68d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 80, 69d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 70d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 71d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 72d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 73d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 74d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 75d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 76d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf 77d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 80, 78d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 79d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 80d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 81d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 82d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 83d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 84d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 85d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 86d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 80, 87d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 82, { 88d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, 0xc8, 0xe7, 0xf7, 0x8c, 89d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x59, 0x6a, 0x49, 0x34, 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8, 90d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, 0x59, 0x04, 0x5a, 0x99, 91d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xca, 0xc7, 0x82, 0x72, 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09, 92d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, 0x36, 0x77, 0x93, 0xa9, 93d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xac, 0xa3, 0xdb, 0x71, 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87, 94d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, 0x1d, 0x87 95d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 96d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 97d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 98d9e397b599b13d642138480a28c14db7a136bf0Adam Langley EVP_sha256, 99d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 102d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 22, 103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0, 105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 0, 106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0, 108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 0, 109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 42, { 110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, 0x71, 0x5f, 0x80, 0x2a, 111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x06, 0x3c, 0x5a, 0x31, 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e, 112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, 0x9d, 0x20, 0x13, 0x95, 113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xfa, 0xa4, 0xb6, 0x1a, 0x96, 0xc8 114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley EVP_sha1, 118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 11, 121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0c, 124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 13, 125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 10, 128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 42, { 129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x08, 0x5a, 0x01, 0xea, 0x1b, 0x10, 0xf3, 0x69, 0x33, 0x06, 0x8b, 0x56, 130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xef, 0xa5, 0xad, 0x81, 0xa4, 0xf1, 0x4b, 0x82, 0x2f, 0x5b, 0x09, 0x15, 131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x68, 0xa9, 0xcd, 0xd4, 0xf1, 0x55, 0xfd, 0xa2, 0xc2, 0x2e, 0x42, 0x24, 132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x78, 0xd3, 0x05, 0xf3, 0xf8, 0x96 133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley EVP_sha1, 137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f 145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 80, 146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf 154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 80, 155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 157d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 161d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 162d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 80, 164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 82, { 165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0b, 0xd7, 0x70, 0xa7, 0x4d, 0x11, 0x60, 0xf7, 0xc9, 0xf1, 0x2c, 0xd5, 166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x91, 0x2a, 0x06, 0xeb, 0xff, 0x6a, 0xdc, 0xae, 0x89, 0x9d, 0x92, 0x19, 167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x1f, 0xe4, 0x30, 0x56, 0x73, 0xba, 0x2f, 0xfe, 0x8f, 0xa3, 0xf1, 0xa4, 168d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xe5, 0xad, 0x79, 0xf3, 0xf3, 0x34, 0xb3, 0xb2, 0x02, 0xb2, 0x17, 0x3c, 169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x48, 0x6e, 0xa3, 0x7c, 0xe3, 0xd3, 0x97, 0xed, 0x03, 0x4c, 0x7f, 0x9d, 170d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xfe, 0xb1, 0x5c, 0x5e, 0x92, 0x73, 0x36, 0xd0, 0x44, 0x1f, 0x4c, 0x43, 171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x00, 0xe2, 0xcf, 0xf0, 0xd0, 0x90, 0x0b, 0x52, 0xd3, 0xb4 172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley EVP_sha1, 176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 22, 180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0, 182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 0, 183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0, 185d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 0, 186d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 42, { 187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0a, 0xc1, 0xaf, 0x70, 0x02, 0xb3, 0xd7, 0x61, 0xd1, 0xe5, 0x52, 0x98, 188d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xda, 0x9d, 0x05, 0x06, 0xb9, 0xae, 0x52, 0x05, 0x72, 0x20, 0xa3, 0x06, 189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xe0, 0x7b, 0x6b, 0x87, 0xe8, 0xdf, 0x21, 0xd0, 0xea, 0x00, 0x03, 0x3d, 190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xe0, 0x39, 0x84, 0xd3, 0x49, 0x18 191d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley EVP_sha1, 195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 22, 199d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0, 201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 0, 202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley { 203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0, 204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 0, 205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 42, { 206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x2c, 0x91, 0x11, 0x72, 0x04, 0xd7, 0x45, 0xf3, 0x50, 0x0d, 0x63, 0x6a, 207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x62, 0xf6, 0x4f, 0x0a, 0xb3, 0xba, 0xe5, 0x48, 0xaa, 0x53, 0xd4, 0x23, 208d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0xb0, 0xd1, 0xf2, 0x7e, 0xbb, 0xa6, 0xf5, 0xe5, 0x67, 0x3a, 0x08, 0x1d, 209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 0x70, 0xcc, 0xe7, 0xac, 0xfc, 0x48 210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley }, 212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley}; 213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 214d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyint main(void) { 215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint8_t buf[82]; 216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley size_t i; 217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley CRYPTO_library_init(); 219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ERR_load_crypto_strings(); 220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 221d9e397b599b13d642138480a28c14db7a136bf0Adam Langley for (i = 0; i < sizeof(kTests) / sizeof(kTests[0]); i++) { 222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const hkdf_test_vector_t *test = &kTests[i]; 223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if (!HKDF(buf, test->out_len, test->md_func(), test->ikm, test->ikm_len, 224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley test->salt, test->salt_len, test->info, test->info_len)) { 225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley fprintf(stderr, "Call to HKDF failed\n"); 226e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley ERR_print_errors_fp(stderr); 227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 1; 228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if (memcmp(buf, test->out, test->out_len) != 0) { 230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley fprintf(stderr, "%u: Resulting key material does not match test vector\n", 231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley (unsigned)i); 232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 1; 233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley printf("PASS\n"); 237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ERR_free_strings(); 238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 0; 239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} 240