1*de0e0e4dSAntonio Huete Jimenez /* $OpenBSD: kdf.h,v 1.8 2022/07/12 14:42:49 kn Exp $ */ 2*de0e0e4dSAntonio Huete Jimenez /* 3*de0e0e4dSAntonio Huete Jimenez * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 4*de0e0e4dSAntonio Huete Jimenez * project. 5*de0e0e4dSAntonio Huete Jimenez */ 6*de0e0e4dSAntonio Huete Jimenez /* ==================================================================== 7*de0e0e4dSAntonio Huete Jimenez * Copyright (c) 2016-2018 The OpenSSL Project. All rights reserved. 8*de0e0e4dSAntonio Huete Jimenez * 9*de0e0e4dSAntonio Huete Jimenez * Redistribution and use in source and binary forms, with or without 10*de0e0e4dSAntonio Huete Jimenez * modification, are permitted provided that the following conditions 11*de0e0e4dSAntonio Huete Jimenez * are met: 12*de0e0e4dSAntonio Huete Jimenez * 13*de0e0e4dSAntonio Huete Jimenez * 1. Redistributions of source code must retain the above copyright 14*de0e0e4dSAntonio Huete Jimenez * notice, this list of conditions and the following disclaimer. 15*de0e0e4dSAntonio Huete Jimenez * 16*de0e0e4dSAntonio Huete Jimenez * 2. Redistributions in binary form must reproduce the above copyright 17*de0e0e4dSAntonio Huete Jimenez * notice, this list of conditions and the following disclaimer in 18*de0e0e4dSAntonio Huete Jimenez * the documentation and/or other materials provided with the 19*de0e0e4dSAntonio Huete Jimenez * distribution. 20*de0e0e4dSAntonio Huete Jimenez * 21*de0e0e4dSAntonio Huete Jimenez * 3. All advertising materials mentioning features or use of this 22*de0e0e4dSAntonio Huete Jimenez * software must display the following acknowledgment: 23*de0e0e4dSAntonio Huete Jimenez * "This product includes software developed by the OpenSSL Project 24*de0e0e4dSAntonio Huete Jimenez * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 25*de0e0e4dSAntonio Huete Jimenez * 26*de0e0e4dSAntonio Huete Jimenez * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 27*de0e0e4dSAntonio Huete Jimenez * endorse or promote products derived from this software without 28*de0e0e4dSAntonio Huete Jimenez * prior written permission. For written permission, please contact 29*de0e0e4dSAntonio Huete Jimenez * licensing@OpenSSL.org. 30*de0e0e4dSAntonio Huete Jimenez * 31*de0e0e4dSAntonio Huete Jimenez * 5. Products derived from this software may not be called "OpenSSL" 32*de0e0e4dSAntonio Huete Jimenez * nor may "OpenSSL" appear in their names without prior written 33*de0e0e4dSAntonio Huete Jimenez * permission of the OpenSSL Project. 34*de0e0e4dSAntonio Huete Jimenez * 35*de0e0e4dSAntonio Huete Jimenez * 6. Redistributions of any form whatsoever must retain the following 36*de0e0e4dSAntonio Huete Jimenez * acknowledgment: 37*de0e0e4dSAntonio Huete Jimenez * "This product includes software developed by the OpenSSL Project 38*de0e0e4dSAntonio Huete Jimenez * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 39*de0e0e4dSAntonio Huete Jimenez * 40*de0e0e4dSAntonio Huete Jimenez * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 41*de0e0e4dSAntonio Huete Jimenez * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42*de0e0e4dSAntonio Huete Jimenez * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 43*de0e0e4dSAntonio Huete Jimenez * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 44*de0e0e4dSAntonio Huete Jimenez * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 45*de0e0e4dSAntonio Huete Jimenez * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 46*de0e0e4dSAntonio Huete Jimenez * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 47*de0e0e4dSAntonio Huete Jimenez * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48*de0e0e4dSAntonio Huete Jimenez * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 49*de0e0e4dSAntonio Huete Jimenez * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 50*de0e0e4dSAntonio Huete Jimenez * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 51*de0e0e4dSAntonio Huete Jimenez * OF THE POSSIBILITY OF SUCH DAMAGE. 52*de0e0e4dSAntonio Huete Jimenez * ==================================================================== 53*de0e0e4dSAntonio Huete Jimenez */ 54*de0e0e4dSAntonio Huete Jimenez 55*de0e0e4dSAntonio Huete Jimenez #ifndef HEADER_KDF_H 56*de0e0e4dSAntonio Huete Jimenez # define HEADER_KDF_H 57*de0e0e4dSAntonio Huete Jimenez 58*de0e0e4dSAntonio Huete Jimenez #ifdef __cplusplus 59*de0e0e4dSAntonio Huete Jimenez extern "C" { 60*de0e0e4dSAntonio Huete Jimenez #endif 61*de0e0e4dSAntonio Huete Jimenez 62*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) 63*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) 64*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) 65*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) 66*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTRL_HKDF_MODE (EVP_PKEY_ALG_CTRL + 7) 67*de0e0e4dSAntonio Huete Jimenez 68*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND 0 69*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 70*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 71*de0e0e4dSAntonio Huete Jimenez 72*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ 73*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ 74*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) 75*de0e0e4dSAntonio Huete Jimenez 76*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ 77*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ 78*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) 79*de0e0e4dSAntonio Huete Jimenez 80*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ 81*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ 82*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) 83*de0e0e4dSAntonio Huete Jimenez 84*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ 85*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ 86*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) 87*de0e0e4dSAntonio Huete Jimenez 88*de0e0e4dSAntonio Huete Jimenez # define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ 89*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ 90*de0e0e4dSAntonio Huete Jimenez EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) 91*de0e0e4dSAntonio Huete Jimenez 92*de0e0e4dSAntonio Huete Jimenez int ERR_load_KDF_strings(void); 93*de0e0e4dSAntonio Huete Jimenez 94*de0e0e4dSAntonio Huete Jimenez /* 95*de0e0e4dSAntonio Huete Jimenez * KDF function codes. 96*de0e0e4dSAntonio Huete Jimenez */ 97*de0e0e4dSAntonio Huete Jimenez # define KDF_F_PKEY_HKDF_CTRL_STR 103 98*de0e0e4dSAntonio Huete Jimenez # define KDF_F_PKEY_HKDF_DERIVE 102 99*de0e0e4dSAntonio Huete Jimenez # define KDF_F_PKEY_HKDF_INIT 108 100*de0e0e4dSAntonio Huete Jimenez 101*de0e0e4dSAntonio Huete Jimenez /* 102*de0e0e4dSAntonio Huete Jimenez * KDF reason codes. 103*de0e0e4dSAntonio Huete Jimenez */ 104*de0e0e4dSAntonio Huete Jimenez # define KDF_R_MISSING_KEY 104 105*de0e0e4dSAntonio Huete Jimenez # define KDF_R_MISSING_MESSAGE_DIGEST 105 106*de0e0e4dSAntonio Huete Jimenez # define KDF_R_UNKNOWN_PARAMETER_TYPE 103 107*de0e0e4dSAntonio Huete Jimenez 108*de0e0e4dSAntonio Huete Jimenez # ifdef __cplusplus 109*de0e0e4dSAntonio Huete Jimenez } 110*de0e0e4dSAntonio Huete Jimenez # endif 111*de0e0e4dSAntonio Huete Jimenez #endif 112