Hide symbols in hkdf, evp, err, ecdsa and ec
authorbeck <beck@openbsd.org>
Fri, 7 Jul 2023 13:53:52 +0000 (13:53 +0000)
committerbeck <beck@openbsd.org>
Fri, 7 Jul 2023 13:53:52 +0000 (13:53 +0000)
ok jsing@

lib/libcrypto/hidden/openssl/ec.h [new file with mode: 0644]
lib/libcrypto/hidden/openssl/ecdsa.h [new file with mode: 0644]
lib/libcrypto/hidden/openssl/err.h [new file with mode: 0644]
lib/libcrypto/hidden/openssl/evp.h [new file with mode: 0644]
lib/libcrypto/hidden/openssl/hkdf.h [new file with mode: 0644]

diff --git a/lib/libcrypto/hidden/openssl/ec.h b/lib/libcrypto/hidden/openssl/ec.h
new file mode 100644 (file)
index 0000000..ea77d44
--- /dev/null
@@ -0,0 +1,155 @@
+/* $OpenBSD: ec.h,v 1.1 2023/07/07 13:53:52 beck Exp $ */
+/*
+ * Copyright (c) 2023 Bob Beck <beck@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _LIBCRYPTO_EC_H
+#define _LIBCRYPTO_EC_H
+
+#ifndef _MSC_VER
+#include_next <openssl/ec.h>
+#else
+#include "../include/openssl/ec.h"
+#endif
+#include "crypto_namespace.h"
+
+LCRYPTO_USED(EC_GFp_simple_method);
+LCRYPTO_USED(EC_GFp_mont_method);
+LCRYPTO_USED(EC_GROUP_new);
+LCRYPTO_USED(EC_GROUP_free);
+LCRYPTO_USED(EC_GROUP_clear_free);
+LCRYPTO_USED(EC_GROUP_copy);
+LCRYPTO_USED(EC_GROUP_dup);
+LCRYPTO_USED(EC_GROUP_method_of);
+LCRYPTO_USED(EC_METHOD_get_field_type);
+LCRYPTO_USED(EC_GROUP_set_generator);
+LCRYPTO_USED(EC_GROUP_get0_generator);
+LCRYPTO_USED(EC_GROUP_get_order);
+LCRYPTO_USED(EC_GROUP_order_bits);
+LCRYPTO_USED(EC_GROUP_get_cofactor);
+LCRYPTO_USED(EC_GROUP_set_curve_name);
+LCRYPTO_USED(EC_GROUP_get_curve_name);
+LCRYPTO_USED(EC_GROUP_set_asn1_flag);
+LCRYPTO_USED(EC_GROUP_get_asn1_flag);
+LCRYPTO_USED(EC_GROUP_set_point_conversion_form);
+LCRYPTO_USED(EC_GROUP_get_point_conversion_form);
+LCRYPTO_USED(EC_GROUP_get0_seed);
+LCRYPTO_USED(EC_GROUP_get_seed_len);
+LCRYPTO_USED(EC_GROUP_set_seed);
+LCRYPTO_USED(EC_GROUP_set_curve);
+LCRYPTO_USED(EC_GROUP_get_curve);
+LCRYPTO_USED(EC_GROUP_set_curve_GFp);
+LCRYPTO_USED(EC_GROUP_get_curve_GFp);
+LCRYPTO_USED(EC_GROUP_get_degree);
+LCRYPTO_USED(EC_GROUP_check);
+LCRYPTO_USED(EC_GROUP_check_discriminant);
+LCRYPTO_USED(EC_GROUP_cmp);
+LCRYPTO_USED(EC_GROUP_new_curve_GFp);
+LCRYPTO_USED(EC_GROUP_new_by_curve_name);
+LCRYPTO_USED(EC_get_builtin_curves);
+LCRYPTO_USED(EC_curve_nid2nist);
+LCRYPTO_USED(EC_curve_nist2nid);
+LCRYPTO_USED(EC_POINT_new);
+LCRYPTO_USED(EC_POINT_free);
+LCRYPTO_USED(EC_POINT_clear_free);
+LCRYPTO_USED(EC_POINT_copy);
+LCRYPTO_USED(EC_POINT_dup);
+LCRYPTO_USED(EC_POINT_method_of);
+LCRYPTO_USED(EC_POINT_set_to_infinity);
+LCRYPTO_USED(EC_POINT_set_affine_coordinates);
+LCRYPTO_USED(EC_POINT_get_affine_coordinates);
+LCRYPTO_USED(EC_POINT_set_compressed_coordinates);
+LCRYPTO_USED(EC_POINT_set_Jprojective_coordinates_GFp);
+LCRYPTO_USED(EC_POINT_get_Jprojective_coordinates_GFp);
+LCRYPTO_USED(EC_POINT_set_affine_coordinates_GFp);
+LCRYPTO_USED(EC_POINT_get_affine_coordinates_GFp);
+LCRYPTO_USED(EC_POINT_set_compressed_coordinates_GFp);
+LCRYPTO_USED(EC_POINT_point2oct);
+LCRYPTO_USED(EC_POINT_oct2point);
+LCRYPTO_USED(EC_POINT_point2bn);
+LCRYPTO_USED(EC_POINT_bn2point);
+LCRYPTO_USED(EC_POINT_point2hex);
+LCRYPTO_USED(EC_POINT_hex2point);
+LCRYPTO_USED(EC_POINT_add);
+LCRYPTO_USED(EC_POINT_dbl);
+LCRYPTO_USED(EC_POINT_invert);
+LCRYPTO_USED(EC_POINT_is_at_infinity);
+LCRYPTO_USED(EC_POINT_is_on_curve);
+LCRYPTO_USED(EC_POINT_cmp);
+LCRYPTO_USED(EC_POINT_make_affine);
+LCRYPTO_USED(EC_POINTs_make_affine);
+LCRYPTO_USED(EC_POINTs_mul);
+LCRYPTO_USED(EC_POINT_mul);
+LCRYPTO_USED(EC_GROUP_precompute_mult);
+LCRYPTO_USED(EC_GROUP_have_precompute_mult);
+LCRYPTO_USED(EC_GROUP_get_basis_type);
+LCRYPTO_USED(d2i_ECPKParameters);
+LCRYPTO_USED(i2d_ECPKParameters);
+LCRYPTO_USED(ECPKParameters_print);
+LCRYPTO_USED(ECPKParameters_print_fp);
+LCRYPTO_USED(EC_KEY_new);
+LCRYPTO_USED(EC_KEY_get_flags);
+LCRYPTO_USED(EC_KEY_set_flags);
+LCRYPTO_USED(EC_KEY_clear_flags);
+LCRYPTO_USED(EC_KEY_new_by_curve_name);
+LCRYPTO_USED(EC_KEY_free);
+LCRYPTO_USED(EC_KEY_copy);
+LCRYPTO_USED(EC_KEY_dup);
+LCRYPTO_USED(EC_KEY_up_ref);
+LCRYPTO_USED(EC_KEY_get0_group);
+LCRYPTO_USED(EC_KEY_set_group);
+LCRYPTO_USED(EC_KEY_get0_private_key);
+LCRYPTO_USED(EC_KEY_set_private_key);
+LCRYPTO_USED(EC_KEY_get0_public_key);
+LCRYPTO_USED(EC_KEY_set_public_key);
+LCRYPTO_USED(EC_KEY_get_enc_flags);
+LCRYPTO_USED(EC_KEY_set_enc_flags);
+LCRYPTO_USED(EC_KEY_get_conv_form);
+LCRYPTO_USED(EC_KEY_set_conv_form);
+LCRYPTO_USED(EC_KEY_set_asn1_flag);
+LCRYPTO_USED(EC_KEY_precompute_mult);
+LCRYPTO_USED(EC_KEY_generate_key);
+LCRYPTO_USED(EC_KEY_check_key);
+LCRYPTO_USED(EC_KEY_set_public_key_affine_coordinates);
+LCRYPTO_USED(d2i_ECPrivateKey);
+LCRYPTO_USED(i2d_ECPrivateKey);
+LCRYPTO_USED(d2i_ECParameters);
+LCRYPTO_USED(i2d_ECParameters);
+LCRYPTO_USED(o2i_ECPublicKey);
+LCRYPTO_USED(i2o_ECPublicKey);
+LCRYPTO_USED(ECParameters_print);
+LCRYPTO_USED(EC_KEY_print);
+LCRYPTO_USED(ECParameters_print_fp);
+LCRYPTO_USED(EC_KEY_print_fp);
+LCRYPTO_USED(EC_KEY_set_ex_data);
+LCRYPTO_USED(EC_KEY_get_ex_data);
+LCRYPTO_USED(EC_KEY_OpenSSL);
+LCRYPTO_USED(EC_KEY_get_default_method);
+LCRYPTO_USED(EC_KEY_set_default_method);
+LCRYPTO_USED(EC_KEY_get_method);
+LCRYPTO_USED(EC_KEY_set_method);
+LCRYPTO_USED(EC_KEY_new_method);
+LCRYPTO_USED(EC_KEY_METHOD_new);
+LCRYPTO_USED(EC_KEY_METHOD_free);
+LCRYPTO_USED(EC_KEY_METHOD_set_init);
+LCRYPTO_USED(EC_KEY_METHOD_set_keygen);
+LCRYPTO_USED(EC_KEY_METHOD_set_compute_key);
+LCRYPTO_USED(EC_KEY_METHOD_get_init);
+LCRYPTO_USED(EC_KEY_METHOD_get_keygen);
+LCRYPTO_USED(EC_KEY_METHOD_get_compute_key);
+LCRYPTO_USED(ECParameters_dup);
+LCRYPTO_USED(ERR_load_EC_strings);
+
+#endif /* _LIBCRYPTO_EC_H */
diff --git a/lib/libcrypto/hidden/openssl/ecdsa.h b/lib/libcrypto/hidden/openssl/ecdsa.h
new file mode 100644 (file)
index 0000000..25eb2b3
--- /dev/null
@@ -0,0 +1,57 @@
+/* $OpenBSD: ecdsa.h,v 1.1 2023/07/07 13:53:52 beck Exp $ */
+/*
+ * Copyright (c) 2023 Bob Beck <beck@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _LIBCRYPTO_ECDSA_H
+#define _LIBCRYPTO_ECDSA_H
+
+#ifndef _MSC_VER
+#include_next <openssl/ecdsa.h>
+#else
+#include "../include/openssl/ecdsa.h"
+#endif
+#include "crypto_namespace.h"
+
+LCRYPTO_USED(ECDSA_SIG_new);
+LCRYPTO_USED(ECDSA_SIG_free);
+LCRYPTO_USED(i2d_ECDSA_SIG);
+LCRYPTO_USED(d2i_ECDSA_SIG);
+LCRYPTO_USED(ECDSA_SIG_get0);
+LCRYPTO_USED(ECDSA_SIG_get0_r);
+LCRYPTO_USED(ECDSA_SIG_get0_s);
+LCRYPTO_USED(ECDSA_SIG_set0);
+LCRYPTO_USED(ECDSA_do_sign);
+LCRYPTO_USED(ECDSA_do_sign_ex);
+LCRYPTO_USED(ECDSA_do_verify);
+LCRYPTO_USED(ECDSA_OpenSSL);
+LCRYPTO_USED(ECDSA_set_default_method);
+LCRYPTO_USED(ECDSA_get_default_method);
+LCRYPTO_USED(ECDSA_set_method);
+LCRYPTO_USED(ECDSA_size);
+LCRYPTO_USED(ECDSA_sign_setup);
+LCRYPTO_USED(ECDSA_sign);
+LCRYPTO_USED(ECDSA_sign_ex);
+LCRYPTO_USED(ECDSA_verify);
+LCRYPTO_USED(ECDSA_get_ex_new_index);
+LCRYPTO_USED(ECDSA_set_ex_data);
+LCRYPTO_USED(ECDSA_get_ex_data);
+LCRYPTO_USED(EC_KEY_METHOD_set_sign);
+LCRYPTO_USED(EC_KEY_METHOD_set_verify);
+LCRYPTO_USED(EC_KEY_METHOD_get_sign);
+LCRYPTO_USED(EC_KEY_METHOD_get_verify);
+LCRYPTO_USED(ERR_load_ECDSA_strings);
+
+#endif /* _LIBCRYPTO_ECDSA_H */
diff --git a/lib/libcrypto/hidden/openssl/err.h b/lib/libcrypto/hidden/openssl/err.h
new file mode 100644 (file)
index 0000000..f43f5f0
--- /dev/null
@@ -0,0 +1,68 @@
+/* $OpenBSD: err.h,v 1.1 2023/07/07 13:53:52 beck Exp $ */
+/*
+ * Copyright (c) 2023 Bob Beck <beck@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _LIBCRYPTO_ERR_H
+#define _LIBCRYPTO_ERR_H
+
+#ifndef _MSC_VER
+#include_next <openssl/err.h>
+#else
+#include "../include/openssl/err.h"
+#endif
+#include "crypto_namespace.h"
+
+LCRYPTO_USED(ERR_put_error);
+LCRYPTO_USED(ERR_set_error_data);
+LCRYPTO_USED(ERR_get_error);
+LCRYPTO_USED(ERR_get_error_line);
+LCRYPTO_USED(ERR_get_error_line_data);
+LCRYPTO_USED(ERR_peek_error);
+LCRYPTO_USED(ERR_peek_error_line);
+LCRYPTO_USED(ERR_peek_error_line_data);
+LCRYPTO_USED(ERR_peek_last_error);
+LCRYPTO_USED(ERR_peek_last_error_line);
+LCRYPTO_USED(ERR_peek_last_error_line_data);
+LCRYPTO_USED(ERR_clear_error);
+LCRYPTO_USED(ERR_error_string);
+LCRYPTO_USED(ERR_error_string_n);
+LCRYPTO_USED(ERR_lib_error_string);
+LCRYPTO_USED(ERR_func_error_string);
+LCRYPTO_USED(ERR_reason_error_string);
+LCRYPTO_USED(ERR_print_errors_cb);
+LCRYPTO_USED(ERR_print_errors_fp);
+LCRYPTO_USED(ERR_print_errors);
+LCRYPTO_USED(ERR_asprintf_error_data);
+LCRYPTO_USED(ERR_add_error_data);
+LCRYPTO_USED(ERR_add_error_vdata);
+LCRYPTO_USED(ERR_load_strings);
+LCRYPTO_USED(ERR_unload_strings);
+LCRYPTO_USED(ERR_load_ERR_strings);
+LCRYPTO_USED(ERR_load_crypto_strings);
+LCRYPTO_USED(ERR_free_strings);
+LCRYPTO_USED(ERR_remove_thread_state);
+LCRYPTO_USED(ERR_remove_state);
+LCRYPTO_USED(ERR_get_state);
+LCRYPTO_USED(ERR_get_string_table);
+LCRYPTO_USED(ERR_get_err_state_table);
+LCRYPTO_USED(ERR_release_err_state_table);
+LCRYPTO_USED(ERR_get_next_error_library);
+LCRYPTO_USED(ERR_set_mark);
+LCRYPTO_USED(ERR_pop_to_mark);
+LCRYPTO_USED(ERR_get_implementation);
+LCRYPTO_USED(ERR_set_implementation);
+
+#endif /* _LIBCRYPTO_ERR_H */
diff --git a/lib/libcrypto/hidden/openssl/evp.h b/lib/libcrypto/hidden/openssl/evp.h
new file mode 100644 (file)
index 0000000..d4bcb27
--- /dev/null
@@ -0,0 +1,457 @@
+/* $OpenBSD: evp.h,v 1.1 2023/07/07 13:53:52 beck Exp $ */
+/*
+ * Copyright (c) 2023 Bob Beck <beck@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _LIBCRYPTO_EVP_H
+#define _LIBCRYPTO_EVP_H
+
+#ifndef _MSC_VER
+#include_next <openssl/evp.h>
+#else
+#include "../include/openssl/evp.h"
+#endif
+#include "crypto_namespace.h"
+
+LCRYPTO_USED(EVP_MD_type);
+LCRYPTO_USED(EVP_MD_pkey_type);
+LCRYPTO_USED(EVP_MD_size);
+LCRYPTO_USED(EVP_MD_block_size);
+LCRYPTO_USED(EVP_MD_flags);
+LCRYPTO_USED(EVP_MD_meth_new);
+LCRYPTO_USED(EVP_MD_meth_free);
+LCRYPTO_USED(EVP_MD_meth_dup);
+LCRYPTO_USED(EVP_MD_meth_set_input_blocksize);
+LCRYPTO_USED(EVP_MD_meth_set_result_size);
+LCRYPTO_USED(EVP_MD_meth_set_app_datasize);
+LCRYPTO_USED(EVP_MD_meth_set_flags);
+LCRYPTO_USED(EVP_MD_meth_set_init);
+LCRYPTO_USED(EVP_MD_meth_set_update);
+LCRYPTO_USED(EVP_MD_meth_set_final);
+LCRYPTO_USED(EVP_MD_meth_set_copy);
+LCRYPTO_USED(EVP_MD_meth_set_cleanup);
+LCRYPTO_USED(EVP_MD_meth_set_ctrl);
+LCRYPTO_USED(EVP_MD_CTX_md);
+LCRYPTO_USED(EVP_MD_CTX_md_data);
+LCRYPTO_USED(EVP_MD_CTX_pkey_ctx);
+LCRYPTO_USED(EVP_MD_CTX_set_pkey_ctx);
+LCRYPTO_USED(EVP_CIPHER_nid);
+LCRYPTO_USED(EVP_CIPHER_block_size);
+LCRYPTO_USED(EVP_CIPHER_key_length);
+LCRYPTO_USED(EVP_CIPHER_iv_length);
+LCRYPTO_USED(EVP_CIPHER_flags);
+LCRYPTO_USED(EVP_CIPHER_CTX_cipher);
+LCRYPTO_USED(EVP_CIPHER_CTX_encrypting);
+LCRYPTO_USED(EVP_CIPHER_CTX_nid);
+LCRYPTO_USED(EVP_CIPHER_CTX_block_size);
+LCRYPTO_USED(EVP_CIPHER_CTX_key_length);
+LCRYPTO_USED(EVP_CIPHER_CTX_iv_length);
+LCRYPTO_USED(EVP_CIPHER_CTX_get_iv);
+LCRYPTO_USED(EVP_CIPHER_CTX_set_iv);
+LCRYPTO_USED(EVP_CIPHER_CTX_copy);
+LCRYPTO_USED(EVP_CIPHER_CTX_get_app_data);
+LCRYPTO_USED(EVP_CIPHER_CTX_set_app_data);
+LCRYPTO_USED(EVP_CIPHER_CTX_get_cipher_data);
+LCRYPTO_USED(EVP_CIPHER_CTX_set_cipher_data);
+LCRYPTO_USED(EVP_CIPHER_CTX_buf_noconst);
+LCRYPTO_USED(EVP_CIPHER_CTX_flags);
+LCRYPTO_USED(EVP_CIPHER_meth_new);
+LCRYPTO_USED(EVP_CIPHER_meth_dup);
+LCRYPTO_USED(EVP_CIPHER_meth_free);
+LCRYPTO_USED(EVP_CIPHER_meth_set_iv_length);
+LCRYPTO_USED(EVP_CIPHER_meth_set_flags);
+LCRYPTO_USED(EVP_CIPHER_meth_set_impl_ctx_size);
+LCRYPTO_USED(EVP_CIPHER_meth_set_init);
+LCRYPTO_USED(EVP_CIPHER_meth_set_do_cipher);
+LCRYPTO_USED(EVP_CIPHER_meth_set_cleanup);
+LCRYPTO_USED(EVP_CIPHER_meth_set_set_asn1_params);
+LCRYPTO_USED(EVP_CIPHER_meth_set_get_asn1_params);
+LCRYPTO_USED(EVP_CIPHER_meth_set_ctrl);
+LCRYPTO_USED(EVP_PKEY_new_raw_private_key);
+LCRYPTO_USED(EVP_PKEY_new_raw_public_key);
+LCRYPTO_USED(EVP_PKEY_get_raw_private_key);
+LCRYPTO_USED(EVP_PKEY_get_raw_public_key);
+LCRYPTO_USED(EVP_Cipher);
+LCRYPTO_USED(EVP_MD_CTX_new);
+LCRYPTO_USED(EVP_MD_CTX_free);
+LCRYPTO_USED(EVP_MD_CTX_init);
+LCRYPTO_USED(EVP_MD_CTX_reset);
+LCRYPTO_USED(EVP_MD_CTX_create);
+LCRYPTO_USED(EVP_MD_CTX_destroy);
+LCRYPTO_USED(EVP_MD_CTX_cleanup);
+LCRYPTO_USED(EVP_MD_CTX_copy_ex);
+LCRYPTO_USED(EVP_MD_CTX_set_flags);
+LCRYPTO_USED(EVP_MD_CTX_clear_flags);
+LCRYPTO_USED(EVP_MD_CTX_ctrl);
+LCRYPTO_USED(EVP_MD_CTX_test_flags);
+LCRYPTO_USED(EVP_DigestInit_ex);
+LCRYPTO_USED(EVP_DigestUpdate);
+LCRYPTO_USED(EVP_DigestFinal_ex);
+LCRYPTO_USED(EVP_Digest);
+LCRYPTO_USED(EVP_MD_CTX_copy);
+LCRYPTO_USED(EVP_DigestInit);
+LCRYPTO_USED(EVP_DigestFinal);
+LCRYPTO_USED(EVP_read_pw_string);
+LCRYPTO_USED(EVP_read_pw_string_min);
+LCRYPTO_USED(EVP_set_pw_prompt);
+LCRYPTO_USED(EVP_get_pw_prompt);
+LCRYPTO_USED(EVP_BytesToKey);
+LCRYPTO_USED(EVP_CIPHER_CTX_set_flags);
+LCRYPTO_USED(EVP_CIPHER_CTX_clear_flags);
+LCRYPTO_USED(EVP_CIPHER_CTX_test_flags);
+LCRYPTO_USED(EVP_EncryptInit);
+LCRYPTO_USED(EVP_EncryptInit_ex);
+LCRYPTO_USED(EVP_EncryptUpdate);
+LCRYPTO_USED(EVP_EncryptFinal_ex);
+LCRYPTO_USED(EVP_EncryptFinal);
+LCRYPTO_USED(EVP_DecryptInit);
+LCRYPTO_USED(EVP_DecryptInit_ex);
+LCRYPTO_USED(EVP_DecryptUpdate);
+LCRYPTO_USED(EVP_DecryptFinal_ex);
+LCRYPTO_USED(EVP_DecryptFinal);
+LCRYPTO_USED(EVP_CipherInit);
+LCRYPTO_USED(EVP_CipherInit_ex);
+LCRYPTO_USED(EVP_CipherUpdate);
+LCRYPTO_USED(EVP_CipherFinal_ex);
+LCRYPTO_USED(EVP_CipherFinal);
+LCRYPTO_USED(EVP_SignFinal);
+LCRYPTO_USED(EVP_VerifyFinal);
+LCRYPTO_USED(EVP_DigestSignInit);
+LCRYPTO_USED(EVP_DigestSignFinal);
+LCRYPTO_USED(EVP_DigestSign);
+LCRYPTO_USED(EVP_DigestVerifyInit);
+LCRYPTO_USED(EVP_DigestVerifyFinal);
+LCRYPTO_USED(EVP_DigestVerify);
+LCRYPTO_USED(EVP_OpenInit);
+LCRYPTO_USED(EVP_OpenFinal);
+LCRYPTO_USED(EVP_SealInit);
+LCRYPTO_USED(EVP_SealFinal);
+LCRYPTO_USED(EVP_ENCODE_CTX_new);
+LCRYPTO_USED(EVP_ENCODE_CTX_free);
+LCRYPTO_USED(EVP_EncodeInit);
+LCRYPTO_USED(EVP_EncodeUpdate);
+LCRYPTO_USED(EVP_EncodeFinal);
+LCRYPTO_USED(EVP_EncodeBlock);
+LCRYPTO_USED(EVP_DecodeInit);
+LCRYPTO_USED(EVP_DecodeUpdate);
+LCRYPTO_USED(EVP_DecodeFinal);
+LCRYPTO_USED(EVP_DecodeBlock);
+LCRYPTO_USED(EVP_CIPHER_CTX_init);
+LCRYPTO_USED(EVP_CIPHER_CTX_cleanup);
+LCRYPTO_USED(EVP_CIPHER_CTX_new);
+LCRYPTO_USED(EVP_CIPHER_CTX_free);
+LCRYPTO_USED(EVP_CIPHER_CTX_reset);
+LCRYPTO_USED(EVP_CIPHER_CTX_set_key_length);
+LCRYPTO_USED(EVP_CIPHER_CTX_set_padding);
+LCRYPTO_USED(EVP_CIPHER_CTX_ctrl);
+LCRYPTO_USED(EVP_CIPHER_CTX_rand_key);
+LCRYPTO_USED(BIO_f_md);
+LCRYPTO_USED(BIO_f_base64);
+LCRYPTO_USED(BIO_f_cipher);
+LCRYPTO_USED(BIO_set_cipher);
+LCRYPTO_USED(EVP_md_null);
+LCRYPTO_USED(EVP_md4);
+LCRYPTO_USED(EVP_md5);
+LCRYPTO_USED(EVP_md5_sha1);
+LCRYPTO_USED(EVP_sha1);
+LCRYPTO_USED(EVP_sha224);
+LCRYPTO_USED(EVP_sha256);
+LCRYPTO_USED(EVP_sha384);
+LCRYPTO_USED(EVP_sha512);
+LCRYPTO_USED(EVP_sha512_224);
+LCRYPTO_USED(EVP_sha512_256);
+LCRYPTO_USED(EVP_sha3_224);
+LCRYPTO_USED(EVP_sha3_256);
+LCRYPTO_USED(EVP_sha3_384);
+LCRYPTO_USED(EVP_sha3_512);
+LCRYPTO_USED(EVP_sm3);
+LCRYPTO_USED(EVP_ripemd160);
+LCRYPTO_USED(EVP_whirlpool);
+LCRYPTO_USED(EVP_gostr341194);
+LCRYPTO_USED(EVP_gost2814789imit);
+LCRYPTO_USED(EVP_streebog256);
+LCRYPTO_USED(EVP_streebog512);
+LCRYPTO_USED(EVP_enc_null);
+LCRYPTO_USED(EVP_des_ecb);
+LCRYPTO_USED(EVP_des_ede);
+LCRYPTO_USED(EVP_des_ede3);
+LCRYPTO_USED(EVP_des_ede_ecb);
+LCRYPTO_USED(EVP_des_ede3_ecb);
+LCRYPTO_USED(EVP_des_cfb64);
+LCRYPTO_USED(EVP_des_cfb1);
+LCRYPTO_USED(EVP_des_cfb8);
+LCRYPTO_USED(EVP_des_ede_cfb64);
+LCRYPTO_USED(EVP_des_ede3_cfb64);
+LCRYPTO_USED(EVP_des_ede3_cfb1);
+LCRYPTO_USED(EVP_des_ede3_cfb8);
+LCRYPTO_USED(EVP_des_ofb);
+LCRYPTO_USED(EVP_des_ede_ofb);
+LCRYPTO_USED(EVP_des_ede3_ofb);
+LCRYPTO_USED(EVP_des_cbc);
+LCRYPTO_USED(EVP_des_ede_cbc);
+LCRYPTO_USED(EVP_des_ede3_cbc);
+LCRYPTO_USED(EVP_desx_cbc);
+LCRYPTO_USED(EVP_rc4);
+LCRYPTO_USED(EVP_rc4_40);
+LCRYPTO_USED(EVP_rc4_hmac_md5);
+LCRYPTO_USED(EVP_idea_ecb);
+LCRYPTO_USED(EVP_idea_cfb64);
+LCRYPTO_USED(EVP_idea_ofb);
+LCRYPTO_USED(EVP_idea_cbc);
+LCRYPTO_USED(EVP_rc2_ecb);
+LCRYPTO_USED(EVP_rc2_cbc);
+LCRYPTO_USED(EVP_rc2_40_cbc);
+LCRYPTO_USED(EVP_rc2_64_cbc);
+LCRYPTO_USED(EVP_rc2_cfb64);
+LCRYPTO_USED(EVP_rc2_ofb);
+LCRYPTO_USED(EVP_bf_ecb);
+LCRYPTO_USED(EVP_bf_cbc);
+LCRYPTO_USED(EVP_bf_cfb64);
+LCRYPTO_USED(EVP_bf_ofb);
+LCRYPTO_USED(EVP_cast5_ecb);
+LCRYPTO_USED(EVP_cast5_cbc);
+LCRYPTO_USED(EVP_cast5_cfb64);
+LCRYPTO_USED(EVP_cast5_ofb);
+LCRYPTO_USED(EVP_aes_128_ecb);
+LCRYPTO_USED(EVP_aes_128_cbc);
+LCRYPTO_USED(EVP_aes_128_cfb1);
+LCRYPTO_USED(EVP_aes_128_cfb8);
+LCRYPTO_USED(EVP_aes_128_cfb128);
+LCRYPTO_USED(EVP_aes_128_ofb);
+LCRYPTO_USED(EVP_aes_128_ctr);
+LCRYPTO_USED(EVP_aes_128_ccm);
+LCRYPTO_USED(EVP_aes_128_gcm);
+LCRYPTO_USED(EVP_aes_128_wrap);
+LCRYPTO_USED(EVP_aes_128_xts);
+LCRYPTO_USED(EVP_aes_192_ecb);
+LCRYPTO_USED(EVP_aes_192_cbc);
+LCRYPTO_USED(EVP_aes_192_cfb1);
+LCRYPTO_USED(EVP_aes_192_cfb8);
+LCRYPTO_USED(EVP_aes_192_cfb128);
+LCRYPTO_USED(EVP_aes_192_ofb);
+LCRYPTO_USED(EVP_aes_192_ctr);
+LCRYPTO_USED(EVP_aes_192_ccm);
+LCRYPTO_USED(EVP_aes_192_gcm);
+LCRYPTO_USED(EVP_aes_192_wrap);
+LCRYPTO_USED(EVP_aes_256_ecb);
+LCRYPTO_USED(EVP_aes_256_cbc);
+LCRYPTO_USED(EVP_aes_256_cfb1);
+LCRYPTO_USED(EVP_aes_256_cfb8);
+LCRYPTO_USED(EVP_aes_256_cfb128);
+LCRYPTO_USED(EVP_aes_256_ofb);
+LCRYPTO_USED(EVP_aes_256_ctr);
+LCRYPTO_USED(EVP_aes_256_ccm);
+LCRYPTO_USED(EVP_aes_256_gcm);
+LCRYPTO_USED(EVP_aes_256_wrap);
+LCRYPTO_USED(EVP_aes_256_xts);
+LCRYPTO_USED(EVP_chacha20_poly1305);
+LCRYPTO_USED(EVP_aes_128_cbc_hmac_sha1);
+LCRYPTO_USED(EVP_aes_256_cbc_hmac_sha1);
+LCRYPTO_USED(EVP_camellia_128_ecb);
+LCRYPTO_USED(EVP_camellia_128_cbc);
+LCRYPTO_USED(EVP_camellia_128_cfb1);
+LCRYPTO_USED(EVP_camellia_128_cfb8);
+LCRYPTO_USED(EVP_camellia_128_cfb128);
+LCRYPTO_USED(EVP_camellia_128_ofb);
+LCRYPTO_USED(EVP_camellia_192_ecb);
+LCRYPTO_USED(EVP_camellia_192_cbc);
+LCRYPTO_USED(EVP_camellia_192_cfb1);
+LCRYPTO_USED(EVP_camellia_192_cfb8);
+LCRYPTO_USED(EVP_camellia_192_cfb128);
+LCRYPTO_USED(EVP_camellia_192_ofb);
+LCRYPTO_USED(EVP_camellia_256_ecb);
+LCRYPTO_USED(EVP_camellia_256_cbc);
+LCRYPTO_USED(EVP_camellia_256_cfb1);
+LCRYPTO_USED(EVP_camellia_256_cfb8);
+LCRYPTO_USED(EVP_camellia_256_cfb128);
+LCRYPTO_USED(EVP_camellia_256_ofb);
+LCRYPTO_USED(EVP_chacha20);
+LCRYPTO_USED(EVP_gost2814789_ecb);
+LCRYPTO_USED(EVP_gost2814789_cfb64);
+LCRYPTO_USED(EVP_gost2814789_cnt);
+LCRYPTO_USED(EVP_sm4_ecb);
+LCRYPTO_USED(EVP_sm4_cbc);
+LCRYPTO_USED(EVP_sm4_cfb128);
+LCRYPTO_USED(EVP_sm4_ofb);
+LCRYPTO_USED(EVP_sm4_ctr);
+LCRYPTO_USED(OPENSSL_add_all_algorithms_noconf);
+LCRYPTO_USED(OPENSSL_add_all_algorithms_conf);
+LCRYPTO_USED(OpenSSL_add_all_ciphers);
+LCRYPTO_USED(OpenSSL_add_all_digests);
+LCRYPTO_USED(EVP_add_cipher);
+LCRYPTO_USED(EVP_add_digest);
+LCRYPTO_USED(EVP_get_cipherbyname);
+LCRYPTO_USED(EVP_get_digestbyname);
+LCRYPTO_USED(EVP_cleanup);
+LCRYPTO_USED(EVP_CIPHER_do_all);
+LCRYPTO_USED(EVP_CIPHER_do_all_sorted);
+LCRYPTO_USED(EVP_MD_do_all);
+LCRYPTO_USED(EVP_MD_do_all_sorted);
+LCRYPTO_USED(EVP_PKEY_decrypt_old);
+LCRYPTO_USED(EVP_PKEY_encrypt_old);
+LCRYPTO_USED(EVP_PKEY_type);
+LCRYPTO_USED(EVP_PKEY_id);
+LCRYPTO_USED(EVP_PKEY_base_id);
+LCRYPTO_USED(EVP_PKEY_bits);
+LCRYPTO_USED(EVP_PKEY_security_bits);
+LCRYPTO_USED(EVP_PKEY_size);
+LCRYPTO_USED(EVP_PKEY_set_type);
+LCRYPTO_USED(EVP_PKEY_set_type_str);
+LCRYPTO_USED(EVP_PKEY_assign);
+LCRYPTO_USED(EVP_PKEY_get0);
+LCRYPTO_USED(EVP_PKEY_get0_hmac);
+LCRYPTO_USED(EVP_PKEY_get0_RSA);
+LCRYPTO_USED(EVP_PKEY_get1_RSA);
+LCRYPTO_USED(EVP_PKEY_set1_RSA);
+LCRYPTO_USED(EVP_PKEY_get0_DSA);
+LCRYPTO_USED(EVP_PKEY_get1_DSA);
+LCRYPTO_USED(EVP_PKEY_set1_DSA);
+LCRYPTO_USED(EVP_PKEY_get0_DH);
+LCRYPTO_USED(EVP_PKEY_get1_DH);
+LCRYPTO_USED(EVP_PKEY_set1_DH);
+LCRYPTO_USED(EVP_PKEY_get0_EC_KEY);
+LCRYPTO_USED(EVP_PKEY_get1_EC_KEY);
+LCRYPTO_USED(EVP_PKEY_set1_EC_KEY);
+LCRYPTO_USED(EVP_PKEY_new);
+LCRYPTO_USED(EVP_PKEY_free);
+LCRYPTO_USED(EVP_PKEY_up_ref);
+LCRYPTO_USED(d2i_PublicKey);
+LCRYPTO_USED(i2d_PublicKey);
+LCRYPTO_USED(d2i_PrivateKey);
+LCRYPTO_USED(d2i_AutoPrivateKey);
+LCRYPTO_USED(i2d_PrivateKey);
+LCRYPTO_USED(EVP_PKEY_copy_parameters);
+LCRYPTO_USED(EVP_PKEY_missing_parameters);
+LCRYPTO_USED(EVP_PKEY_save_parameters);
+LCRYPTO_USED(EVP_PKEY_cmp_parameters);
+LCRYPTO_USED(EVP_PKEY_cmp);
+LCRYPTO_USED(EVP_PKEY_print_public);
+LCRYPTO_USED(EVP_PKEY_print_private);
+LCRYPTO_USED(EVP_PKEY_print_params);
+LCRYPTO_USED(EVP_PKEY_get_default_digest_nid);
+LCRYPTO_USED(EVP_CIPHER_type);
+LCRYPTO_USED(EVP_CIPHER_param_to_asn1);
+LCRYPTO_USED(EVP_CIPHER_asn1_to_param);
+LCRYPTO_USED(EVP_CIPHER_set_asn1_iv);
+LCRYPTO_USED(EVP_CIPHER_get_asn1_iv);
+LCRYPTO_USED(PKCS5_PBE_keyivgen);
+LCRYPTO_USED(PKCS5_PBKDF2_HMAC_SHA1);
+LCRYPTO_USED(PKCS5_PBKDF2_HMAC);
+LCRYPTO_USED(PKCS5_v2_PBE_keyivgen);
+LCRYPTO_USED(PKCS5_PBE_add);
+LCRYPTO_USED(EVP_PBE_CipherInit);
+LCRYPTO_USED(EVP_PBE_alg_add_type);
+LCRYPTO_USED(EVP_PBE_alg_add);
+LCRYPTO_USED(EVP_PBE_find);
+LCRYPTO_USED(EVP_PBE_cleanup);
+LCRYPTO_USED(EVP_PKEY_asn1_get_count);
+LCRYPTO_USED(EVP_PKEY_asn1_get0);
+LCRYPTO_USED(EVP_PKEY_asn1_find);
+LCRYPTO_USED(EVP_PKEY_asn1_find_str);
+LCRYPTO_USED(EVP_PKEY_asn1_add0);
+LCRYPTO_USED(EVP_PKEY_asn1_add_alias);
+LCRYPTO_USED(EVP_PKEY_asn1_get0_info);
+LCRYPTO_USED(EVP_PKEY_get0_asn1);
+LCRYPTO_USED(EVP_PKEY_asn1_new);
+LCRYPTO_USED(EVP_PKEY_asn1_copy);
+LCRYPTO_USED(EVP_PKEY_asn1_free);
+LCRYPTO_USED(EVP_PKEY_asn1_set_public);
+LCRYPTO_USED(EVP_PKEY_asn1_set_private);
+LCRYPTO_USED(EVP_PKEY_asn1_set_param);
+LCRYPTO_USED(EVP_PKEY_asn1_set_free);
+LCRYPTO_USED(EVP_PKEY_asn1_set_ctrl);
+LCRYPTO_USED(EVP_PKEY_asn1_set_security_bits);
+LCRYPTO_USED(EVP_PKEY_asn1_set_check);
+LCRYPTO_USED(EVP_PKEY_asn1_set_public_check);
+LCRYPTO_USED(EVP_PKEY_asn1_set_param_check);
+LCRYPTO_USED(EVP_PKEY_meth_find);
+LCRYPTO_USED(EVP_PKEY_meth_new);
+LCRYPTO_USED(EVP_PKEY_meth_get0_info);
+LCRYPTO_USED(EVP_PKEY_meth_copy);
+LCRYPTO_USED(EVP_PKEY_meth_free);
+LCRYPTO_USED(EVP_PKEY_meth_add0);
+LCRYPTO_USED(EVP_PKEY_CTX_new);
+LCRYPTO_USED(EVP_PKEY_CTX_new_id);
+LCRYPTO_USED(EVP_PKEY_CTX_dup);
+LCRYPTO_USED(EVP_PKEY_CTX_free);
+LCRYPTO_USED(EVP_PKEY_CTX_ctrl);
+LCRYPTO_USED(EVP_PKEY_CTX_ctrl_str);
+LCRYPTO_USED(EVP_PKEY_CTX_get_operation);
+LCRYPTO_USED(EVP_PKEY_CTX_set0_keygen_info);
+LCRYPTO_USED(EVP_PKEY_new_mac_key);
+LCRYPTO_USED(EVP_PKEY_new_CMAC_key);
+LCRYPTO_USED(EVP_PKEY_CTX_set_data);
+LCRYPTO_USED(EVP_PKEY_CTX_get_data);
+LCRYPTO_USED(EVP_PKEY_CTX_get0_pkey);
+LCRYPTO_USED(EVP_PKEY_CTX_get0_peerkey);
+LCRYPTO_USED(EVP_PKEY_CTX_set_app_data);
+LCRYPTO_USED(EVP_PKEY_CTX_get_app_data);
+LCRYPTO_USED(EVP_PKEY_sign_init);
+LCRYPTO_USED(EVP_PKEY_sign);
+LCRYPTO_USED(EVP_PKEY_verify_init);
+LCRYPTO_USED(EVP_PKEY_verify);
+LCRYPTO_USED(EVP_PKEY_verify_recover_init);
+LCRYPTO_USED(EVP_PKEY_verify_recover);
+LCRYPTO_USED(EVP_PKEY_encrypt_init);
+LCRYPTO_USED(EVP_PKEY_encrypt);
+LCRYPTO_USED(EVP_PKEY_decrypt_init);
+LCRYPTO_USED(EVP_PKEY_decrypt);
+LCRYPTO_USED(EVP_PKEY_derive_init);
+LCRYPTO_USED(EVP_PKEY_derive_set_peer);
+LCRYPTO_USED(EVP_PKEY_derive);
+LCRYPTO_USED(EVP_PKEY_paramgen_init);
+LCRYPTO_USED(EVP_PKEY_paramgen);
+LCRYPTO_USED(EVP_PKEY_keygen_init);
+LCRYPTO_USED(EVP_PKEY_keygen);
+LCRYPTO_USED(EVP_PKEY_check);
+LCRYPTO_USED(EVP_PKEY_public_check);
+LCRYPTO_USED(EVP_PKEY_param_check);
+LCRYPTO_USED(EVP_PKEY_CTX_set_cb);
+LCRYPTO_USED(EVP_PKEY_CTX_get_cb);
+LCRYPTO_USED(EVP_PKEY_CTX_get_keygen_info);
+LCRYPTO_USED(EVP_PKEY_meth_set_init);
+LCRYPTO_USED(EVP_PKEY_meth_set_copy);
+LCRYPTO_USED(EVP_PKEY_meth_set_cleanup);
+LCRYPTO_USED(EVP_PKEY_meth_set_paramgen);
+LCRYPTO_USED(EVP_PKEY_meth_set_keygen);
+LCRYPTO_USED(EVP_PKEY_meth_set_sign);
+LCRYPTO_USED(EVP_PKEY_meth_set_verify);
+LCRYPTO_USED(EVP_PKEY_meth_set_verify_recover);
+LCRYPTO_USED(EVP_PKEY_meth_set_signctx);
+LCRYPTO_USED(EVP_PKEY_meth_set_verifyctx);
+LCRYPTO_USED(EVP_PKEY_meth_set_encrypt);
+LCRYPTO_USED(EVP_PKEY_meth_set_decrypt);
+LCRYPTO_USED(EVP_PKEY_meth_set_derive);
+LCRYPTO_USED(EVP_PKEY_meth_set_ctrl);
+LCRYPTO_USED(EVP_PKEY_meth_set_check);
+LCRYPTO_USED(EVP_PKEY_meth_set_public_check);
+LCRYPTO_USED(EVP_PKEY_meth_set_param_check);
+LCRYPTO_USED(EVP_aead_aes_128_gcm);
+LCRYPTO_USED(EVP_aead_aes_256_gcm);
+LCRYPTO_USED(EVP_aead_chacha20_poly1305);
+LCRYPTO_USED(EVP_aead_xchacha20_poly1305);
+LCRYPTO_USED(EVP_AEAD_key_length);
+LCRYPTO_USED(EVP_AEAD_nonce_length);
+LCRYPTO_USED(EVP_AEAD_max_overhead);
+LCRYPTO_USED(EVP_AEAD_max_tag_len);
+LCRYPTO_USED(EVP_AEAD_CTX_new);
+LCRYPTO_USED(EVP_AEAD_CTX_free);
+LCRYPTO_USED(EVP_AEAD_CTX_init);
+LCRYPTO_USED(EVP_AEAD_CTX_cleanup);
+LCRYPTO_USED(EVP_AEAD_CTX_seal);
+LCRYPTO_USED(EVP_AEAD_CTX_open);
+LCRYPTO_USED(ERR_load_EVP_strings);
+
+#endif /* _LIBCRYPTO_EVP_H */
diff --git a/lib/libcrypto/hidden/openssl/hkdf.h b/lib/libcrypto/hidden/openssl/hkdf.h
new file mode 100644 (file)
index 0000000..abb1241
--- /dev/null
@@ -0,0 +1,32 @@
+/* $OpenBSD: hkdf.h,v 1.1 2023/07/07 13:53:52 beck Exp $ */
+/*
+ * Copyright (c) 2023 Bob Beck <beck@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _LIBCRYPTO_HKDF_H
+#define _LIBCRYPTO_HKDF_H
+
+#ifndef _MSC_VER
+#include_next <openssl/hkdf.h>
+#else
+#include "../include/openssl/hkdf.h"
+#endif
+#include "crypto_namespace.h"
+
+LCRYPTO_USED(HKDF);
+LCRYPTO_USED(HKDF_extract);
+LCRYPTO_USED(HKDF_expand);
+
+#endif /* _LIBCRYPTO_HKDF_H */