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#ifndef OPENSSL_HEADER_HKDF_H 16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define OPENSSL_HEADER_HKDF_H 17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/base.h> 19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef __cplusplus 21d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyextern "C" { 22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif 23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 24d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Computes HKDF (as specified by RFC 5869) of initial keying material |secret| 26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * with |salt| and |info| using |digest|, and outputs |out_len| bytes to 27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out_key|. It returns one on success and zero on error. 28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * HKDF is an Extract-and-Expand algorithm. It does not do any key stretching, 30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * and as such, is not suited to be used alone to generate a key from a 31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * password. */ 32d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int HKDF(uint8_t *out_key, size_t out_len, const EVP_MD *digest, 33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const uint8_t *secret, size_t secret_len, 34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const uint8_t *salt, size_t salt_len, 35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley const uint8_t *info, size_t info_len); 36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 37d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if defined(__cplusplus) 39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} /* extern C */ 40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif 41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define HKDF_F_HKDF 100 43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define HKDF_R_OUTPUT_TOO_LARGE 100 44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif /* OPENSSL_HEADER_HKDF_H */ 46