Path: blob/master/runtime/compiler/net/LoadSSLLibs.cpp
6000 views
/*******************************************************************************1* Copyright (c) 2019, 2021 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/2122#include "LoadSSLLibs.hpp"2324#include <dlfcn.h>25#include <string.h>2627#include "control/Options.hpp"28#include "env/VerboseLog.hpp"2930#define OPENSSL_VERSION_1_0 "OpenSSL 1.0."31#define OPENSSL_VERSION_1_1 "OpenSSL 1.1."3233OOpenSSL_version_t * OOpenSSL_version = NULL;3435OSSL_load_error_strings_t * OSSL_load_error_strings = NULL;36OSSL_library_init_t * OSSL_library_init = NULL;37OOPENSSL_init_ssl_t * OOPENSSL_init_ssl = NULL;3839OSSLv23_server_method_t * OSSLv23_server_method = NULL;40OSSLv23_client_method_t * OSSLv23_client_method = NULL;4142OSSL_CTX_set_ecdh_auto_t * OSSL_CTX_set_ecdh_auto = NULL;43OSSL_CTX_ctrl_t * OSSL_CTX_ctrl = NULL;4445OBIO_ctrl_t * OBIO_ctrl = NULL;4647OSSL_CIPHER_get_name_t * OSSL_CIPHER_get_name = NULL;48OSSL_get_current_cipher_t * OSSL_get_current_cipher = NULL;49OSSL_get_cipher_t * OSSL_get_cipher = NULL;5051OEVP_cleanup_t * OEVP_cleanup = NULL;5253Osk_num_t * Osk_num = NULL;54Osk_value_t * Osk_value = NULL;55Osk_pop_free_t * Osk_pop_free = NULL;5657Osk_X509_INFO_num_t * Osk_X509_INFO_num = NULL;58Osk_X509_INFO_value_t * Osk_X509_INFO_value = NULL;59Osk_X509_INFO_pop_free_t * Osk_X509_INFO_pop_free = NULL;6061OSSL_new_t * OSSL_new = NULL;62OSSL_free_t * OSSL_free = NULL;63OSSL_set_connect_state_t * OSSL_set_connect_state = NULL;64OSSL_set_accept_state_t * OSSL_set_accept_state = NULL;65OSSL_set_fd_t * OSSL_set_fd = NULL;66OSSL_get_version_t * OSSL_get_version = NULL;67OSSL_accept_t * OSSL_accept = NULL;68OSSL_connect_t * OSSL_connect = NULL;69OSSL_get_peer_certificate_t * OSSL_get_peer_certificate = NULL;70OSSL_get_verify_result_t * OSSL_get_verify_result = NULL;7172OSSL_CTX_new_t * OSSL_CTX_new = NULL;73OSSL_CTX_set_session_id_context_t * OSSL_CTX_set_session_id_context = NULL;74OSSL_CTX_use_PrivateKey_t * OSSL_CTX_use_PrivateKey = NULL;75OSSL_CTX_use_certificate_t * OSSL_CTX_use_certificate = NULL;76OSSL_CTX_check_private_key_t * OSSL_CTX_check_private_key = NULL;77OSSL_CTX_set_verify_t * OSSL_CTX_set_verify = NULL;78OSSL_CTX_free_t * OSSL_CTX_free = NULL;79OSSL_CTX_get_cert_store_t * OSSL_CTX_get_cert_store = NULL;8081OBIO_new_mem_buf_t * OBIO_new_mem_buf = NULL;82OBIO_free_all_t * OBIO_free_all = NULL;83OBIO_new_ssl_t * OBIO_new_ssl = NULL;84OBIO_write_t * OBIO_write = NULL;85OBIO_read_t * OBIO_read = NULL;8687OPEM_read_bio_PrivateKey_t * OPEM_read_bio_PrivateKey = NULL;88OPEM_read_bio_X509_t * OPEM_read_bio_X509 = NULL;89OPEM_X509_INFO_read_bio_t * OPEM_X509_INFO_read_bio = NULL;9091OX509_INFO_free_t * OX509_INFO_free = NULL;92OX509_STORE_add_cert_t * OX509_STORE_add_cert = NULL;93OX509_STORE_add_crl_t * OX509_STORE_add_crl = NULL;94OX509_free_t * OX509_free = NULL;9596OEVP_MD_CTX_new_t * OEVP_MD_CTX_new = NULL;97OEVP_MD_CTX_free_t * OEVP_MD_CTX_free = NULL;98OEVP_DigestInit_ex_t * OEVP_DigestInit_ex = NULL;99OEVP_DigestUpdate_t * OEVP_DigestUpdate = NULL;100OEVP_DigestFinal_ex_t * OEVP_DigestFinal_ex = NULL;101OEVP_sha256_t * OEVP_sha256 = NULL;102103OERR_print_errors_fp_t * OERR_print_errors_fp = NULL;104105int OSSL102_OOPENSSL_init_ssl(uint64_t opts, const void * settings)106{107// Does not exist in 1.0.2. Should not be called directly outside this file108return 0;109}110111void OSSL110_load_error_strings(void)112{113// Do nothing here:114// SSL_load_error_strings() is deprecated in OpenSSL 1.1.0 by OPENSSL_init_ssl().115// CommunicationStream::initSSL() will call SSL_library_init. In 1.1.0 SSL_library_init116// is a macro of OPENSSL_init_ssl.117}118119int OSSL110_library_init(void)120{121return (*OOPENSSL_init_ssl)(0, NULL);122}123124#define OPENSSL102_SSL_CTRL_SET_ECDH_AUTO 94125long OSSL102_CTX_set_ecdh_auto(SSL_CTX *ctx, int onoff)126{127return (*OSSL_CTX_ctrl)(ctx, OPENSSL102_SSL_CTRL_SET_ECDH_AUTO, onoff, NULL);128}129130long OSSL110_CTX_set_ecdh_auto(SSL_CTX *ctx, int onoff)131{132return ((onoff) != 0);133}134135const char * handle_SSL_get_cipher(const SSL *ssl)136{137return (*OSSL_CIPHER_get_name)((*OSSL_get_current_cipher)(ssl));138}139140void OEVP110_cleanup(void)141{142// In versions prior to 1.1.0 EVP_cleanup() removed all ciphers143// and digests from the table. It no longer has any effect in OpenSSL 1.1.0144}145146# define OPENSSL102_CHECKED_STACK_OF(type, p) \147((_STACK*) (1 ? p : (STACK_OF(type)*)0))148149# define OPENSSL102_CHECKED_SK_FREE_FUNC(type, p) \150((void (*)(void *)) ((1 ? p : (void (*)(type *))0)))151152typedef void (*OPENSSL110_sk_freefunc)(void *);153154int Osk102_X509_INFO_num(const STACK_OF(X509_INFO) *st)155{156//# define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st))157//# define SKM_sk_num(type, st) \158// sk_num(CHECKED_STACK_OF(type, st))159return (*Osk_num)(OPENSSL102_CHECKED_STACK_OF(X509_INFO, st));160}161162int Osk110_X509_INFO_num(const STACK_OF(X509_INFO) *st)163{164// static ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \165// { \166// return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \167// }168return (*Osk_num)((const _STACK *)st);169}170171X509_INFO * Osk102_X509_INFO_value(const STACK_OF(X509_INFO) *st, int i)172{173//# define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i))174//# define SKM_sk_value(type, st,i) \175// ((type *)sk_value(CHECKED_STACK_OF(type, st), i))176return (X509_INFO *)(*Osk_value)(OPENSSL102_CHECKED_STACK_OF(X509_INFO, st), i);177}178179X509_INFO * Osk110_X509_INFO_value(const STACK_OF(X509_INFO) *st, int i)180{181// static ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \182// { \183// return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \184// }185return (X509_INFO *)(*Osk_value)((const _STACK *)st, i);186}187188void Osk102_X509_INFO_pop_free(STACK_OF(X509_INFO) *st, OX509_INFO_free_t *X509InfoFreeFunc)189{190//# define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func))191//# define SKM_sk_pop_free(type, st, free_func) \192// sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func))193(*Osk_pop_free)(OPENSSL102_CHECKED_STACK_OF(X509_INFO, st), OPENSSL102_CHECKED_SK_FREE_FUNC(X509_INFO, X509InfoFreeFunc));194}195196void Osk110_X509_INFO_pop_free(STACK_OF(X509_INFO) *st, OX509_INFO_free_t *X509InfoFreeFunc)197{198// static ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \199// { \200// OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \201// }202(*Osk_pop_free)((_STACK *)st, (OPENSSL110_sk_freefunc)X509InfoFreeFunc);203}204205namespace JITServer206{207void *loadLibssl()208{209void *result = NULL;210211// Library names for OpenSSL 1.1.1, 1.1.0, 1.0.2 and symbolic links212static const char * const libNames[] =213{214"libssl.so.1.1", // 1.1.x library name215"libssl.so.1.0.0", // 1.0.x library name216"libssl.so.10", // 1.0.x library name on RHEL217"libssl.so" // general symlink library name218};219220int numOfLibraries = sizeof(libNames) / sizeof(libNames[0]);221222for (int i = 0; i < numOfLibraries; ++i)223{224result = dlopen(libNames[i], RTLD_NOW);225226if (result)227{228return result;229}230}231return result;232}233234void unloadLibssl(void *handle)235{236(void)dlclose(handle);237}238239void * findLibsslSymbol(void *handle, const char *symName)240{241return dlsym(handle, symName);242}243244int findLibsslVersion(void *handle)245{246const char * openssl_version = NULL;247int ossl_ver = -1;248249OOpenSSL_version = (OOpenSSL_version_t*)findLibsslSymbol(handle, "OpenSSL_version");250251if (OOpenSSL_version)252{253openssl_version = (*OOpenSSL_version)(0);254if (0 == strncmp(openssl_version, OPENSSL_VERSION_1_1, strlen(OPENSSL_VERSION_1_1)))255{256ossl_ver = 1;257}258}259else260{261OOpenSSL_version = (OOpenSSL_version_t*)findLibsslSymbol(handle, "SSLeay_version");262263if (OOpenSSL_version)264{265openssl_version = (*OOpenSSL_version)(0);266if (0 == strncmp(openssl_version, OPENSSL_VERSION_1_0, strlen(OPENSSL_VERSION_1_0)))267{268ossl_ver = 0;269}270}271}272273return ossl_ver;274}275276#if defined(DEBUG)277void dbgPrintSymbols()278{279printf("=============================================================\n");280281printf(" OpenSSL_version %p\n", OOpenSSL_version);282283printf(" SSL_load_error_strings %p\n", OSSL_load_error_strings);284printf(" SSL_library_init %p\n", OSSL_library_init);285printf(" OPENSSL_init_ssl %p\n", OOPENSSL_init_ssl);286287printf(" SSLv23_server_method %p\n", OSSLv23_server_method);288printf(" SSLv23_client_method %p\n", OSSLv23_client_method);289290printf(" SSL_CTX_set_ecdh_auto %p\n", OSSL_CTX_set_ecdh_auto);291printf(" SSL_CTX_ctrl %p\n", OSSL_CTX_ctrl);292293printf(" BIO_ctrl %p\n", OBIO_ctrl);294295printf(" SSL_CIPHER_get_name %p\n", OSSL_CIPHER_get_name);296printf(" SSL_get_current_cipher %p\n", OSSL_get_current_cipher);297298printf(" EVP_cleanup %p\n", OEVP_cleanup);299300printf(" sk_num %p\n", Osk_num);301printf(" sk_value %p\n", Osk_value);302printf(" sk_pop_free %p\n", Osk_pop_free);303304printf(" X509_INFO_free %p\n", OX509_INFO_free);305printf(" sk_X509_INFO_num %p\n", Osk_X509_INFO_num);306printf(" sk_X509_INFO_value %p\n", Osk_X509_INFO_value);307printf(" sk_X509_INFO_pop_free %p\n", Osk_X509_INFO_pop_free);308309printf(" SSL_new %p\n", OSSL_new);310printf(" SSL_free %p\n", OSSL_free);311printf(" SSL_set_connect_state %p\n", OSSL_set_connect_state);312printf(" SSL_set_accept_state %p\n", OSSL_set_accept_state);313printf(" SSL_set_fd %p\n", OSSL_set_fd);314printf(" SSL_get_version %p\n", OSSL_get_version);315printf(" SSL_accept %p\n", OSSL_accept);316printf(" SSL_connect %p\n", OSSL_connect);317printf(" SSL_get_peer_certificate %p\n", OSSL_get_peer_certificate);318printf(" SSL_get_verify_result %p\n", OSSL_get_verify_result);319320printf(" SSL_CTX_new %p\n", OSSL_CTX_new);321printf(" SSL_CTX_set_session_id_context %p\n", OSSL_CTX_set_session_id_context);322printf(" SSL_CTX_use_PrivateKey %p\n", OSSL_CTX_use_PrivateKey);323printf(" SSL_CTX_use_certificate %p\n", OSSL_CTX_use_certificate);324printf(" SSL_CTX_check_private_key %p\n", OSSL_CTX_check_private_key);325printf(" SSL_CTX_set_verify %p\n", OSSL_CTX_set_verify);326printf(" SSL_CTX_free %p\n", OSSL_CTX_free);327printf(" SSL_CTX_get_cert_store %p\n", OSSL_CTX_get_cert_store);328329printf(" BIO_new_mem_buf %p\n", OBIO_new_mem_buf);330printf(" BIO_free_all %p\n", OBIO_free_all);331printf(" BIO_new_ssl %p\n", OBIO_new_ssl);332printf(" BIO_write %p\n", OBIO_write);333printf(" BIO_read %p\n", OBIO_read);334335printf(" PEM_read_bio_PrivateKey %p\n", OPEM_read_bio_PrivateKey);336printf(" PEM_read_bio_X509 %p\n", OPEM_read_bio_X509);337printf(" PEM_X509_INFO_read_bio %p\n", OPEM_X509_INFO_read_bio);338339printf(" X509_STORE_add_cert %p\n", OX509_STORE_add_cert);340printf(" X509_STORE_add_crl %p\n", OX509_STORE_add_crl);341printf(" X509_free %p\n", OX509_free);342343printf(" EVP_MD_CTX_new %p\n", OEVP_MD_CTX_new);344printf(" EVP_MD_CTX_free %p\n", OEVP_MD_CTX_free);345printf(" EVP_DigestInit_ex %p\n", OEVP_DigestInit_ex);346printf(" EVP_DigestUpdate %p\n", OEVP_DigestUpdate);347printf(" EVP_DigestFinal_ex %p\n", OEVP_DigestFinal_ex);348printf(" EVP_sha256 %p\n", OEVP_sha256);349350printf(" ERR_print_errors_fp %p\n", OERR_print_errors_fp);351352printf("=============================================================\n\n");353}354#endif /* defined(DEBUG) */355356bool loadLibsslAndFindSymbols()357{358void *handle = NULL;359360handle = loadLibssl();361if (!handle)362{363printf("#JITServer: Failed to load libssl\n");364return false;365}366367int ossl_ver = findLibsslVersion(handle);368if (-1 == ossl_ver)369{370printf("#JITServer: Failed to find a correct version of libssl\n");371unloadLibssl(handle);372return false;373}374375376if (0 == ossl_ver)377{378OOPENSSL_init_ssl = &OSSL102_OOPENSSL_init_ssl;379380OSSL_load_error_strings = (OSSL_load_error_strings_t *)findLibsslSymbol(handle, "SSL_load_error_strings");381OSSL_library_init = (OSSL_library_init_t *)findLibsslSymbol(handle, "SSL_library_init");382383OSSLv23_server_method = (OSSLv23_server_method_t *)findLibsslSymbol(handle, "SSLv23_server_method");384OSSLv23_client_method = (OSSLv23_client_method_t *)findLibsslSymbol(handle, "SSLv23_client_method");385386OSSL_CTX_set_ecdh_auto = &OSSL102_CTX_set_ecdh_auto;387388OEVP_cleanup = (OEVP_cleanup_t *)findLibsslSymbol(handle, "EVP_cleanup");389390Osk_num = (Osk_num_t *)findLibsslSymbol(handle, "sk_num");391Osk_value = (Osk_value_t *)findLibsslSymbol(handle, "sk_value");392Osk_pop_free = (Osk_pop_free_t *)findLibsslSymbol(handle, "sk_pop_free");393394Osk_X509_INFO_num = &Osk102_X509_INFO_num;395Osk_X509_INFO_value = &Osk102_X509_INFO_value;396Osk_X509_INFO_pop_free = &Osk102_X509_INFO_pop_free;397}398else399{400OOPENSSL_init_ssl = (OOPENSSL_init_ssl_t *)findLibsslSymbol(handle, "OPENSSL_init_ssl");401402OSSL_load_error_strings = &OSSL110_load_error_strings;403OSSL_library_init = &OSSL110_library_init;404405OSSLv23_server_method = (OSSLv23_server_method_t *)findLibsslSymbol(handle, "TLS_server_method");406OSSLv23_client_method = (OSSLv23_client_method_t *)findLibsslSymbol(handle, "TLS_client_method");407408OSSL_CTX_set_ecdh_auto = &OSSL110_CTX_set_ecdh_auto;409410OEVP_cleanup = &OEVP110_cleanup;411412Osk_num = (Osk_num_t *)findLibsslSymbol(handle, "OPENSSL_sk_num");413Osk_value = (Osk_value_t *)findLibsslSymbol(handle, "OPENSSL_sk_value");414Osk_pop_free = (Osk_pop_free_t *)findLibsslSymbol(handle, "OPENSSL_sk_pop_free");415416Osk_X509_INFO_num = &Osk110_X509_INFO_num;417Osk_X509_INFO_value = &Osk110_X509_INFO_value;418Osk_X509_INFO_pop_free = &Osk110_X509_INFO_pop_free;419}420421OSSL_CTX_ctrl = (OSSL_CTX_ctrl_t *)findLibsslSymbol(handle, "SSL_CTX_ctrl");422OBIO_ctrl = (OBIO_ctrl_t *)findLibsslSymbol(handle, "BIO_ctrl");423424OSSL_CIPHER_get_name = (OSSL_CIPHER_get_name_t *)findLibsslSymbol(handle, "SSL_CIPHER_get_name");425OSSL_get_current_cipher = (OSSL_get_current_cipher_t *)findLibsslSymbol(handle, "SSL_get_current_cipher");426OSSL_get_cipher = &handle_SSL_get_cipher;427428429OSSL_new = (OSSL_new_t *)findLibsslSymbol(handle, "SSL_new");430OSSL_free = (OSSL_free_t *)findLibsslSymbol(handle, "SSL_free");431OSSL_set_connect_state = (OSSL_set_connect_state_t *)findLibsslSymbol(handle, "SSL_set_connect_state");432OSSL_set_accept_state = (OSSL_set_accept_state_t *)findLibsslSymbol(handle, "SSL_set_accept_state");433OSSL_set_fd = (OSSL_set_fd_t *)findLibsslSymbol(handle, "SSL_set_fd");434OSSL_get_version = (OSSL_get_version_t *)findLibsslSymbol(handle, "SSL_get_version");435OSSL_accept = (OSSL_accept_t *)findLibsslSymbol(handle, "SSL_accept");436OSSL_connect = (OSSL_connect_t *)findLibsslSymbol(handle, "SSL_connect");437OSSL_get_peer_certificate = (OSSL_get_peer_certificate_t *)findLibsslSymbol(handle, "SSL_get_peer_certificate");438OSSL_get_verify_result = (OSSL_get_verify_result_t *)findLibsslSymbol(handle, "SSL_get_verify_result");439440OSSL_CTX_new = (OSSL_CTX_new_t *)findLibsslSymbol(handle, "SSL_CTX_new");441OSSL_CTX_set_session_id_context = (OSSL_CTX_set_session_id_context_t *)findLibsslSymbol(handle, "SSL_CTX_set_session_id_context");442OSSL_CTX_use_PrivateKey = (OSSL_CTX_use_PrivateKey_t *)findLibsslSymbol(handle, "SSL_CTX_use_PrivateKey");443OSSL_CTX_use_certificate = (OSSL_CTX_use_certificate_t *)findLibsslSymbol(handle, "SSL_CTX_use_certificate");444OSSL_CTX_check_private_key = (OSSL_CTX_check_private_key_t *)findLibsslSymbol(handle, "SSL_CTX_check_private_key");445OSSL_CTX_set_verify = (OSSL_CTX_set_verify_t *)findLibsslSymbol(handle, "SSL_CTX_set_verify");446OSSL_CTX_free = (OSSL_CTX_free_t *)findLibsslSymbol(handle, "SSL_CTX_free");447OSSL_CTX_get_cert_store = (OSSL_CTX_get_cert_store_t *)findLibsslSymbol(handle, "SSL_CTX_get_cert_store");448449OBIO_new_mem_buf = (OBIO_new_mem_buf_t *)findLibsslSymbol(handle, "BIO_new_mem_buf");450OBIO_free_all = (OBIO_free_all_t *)findLibsslSymbol(handle, "BIO_free_all");451OBIO_new_ssl = (OBIO_new_ssl_t *)findLibsslSymbol(handle, "BIO_new_ssl");452OBIO_write = (OBIO_write_t *)findLibsslSymbol(handle, "BIO_write");453OBIO_read = (OBIO_read_t *)findLibsslSymbol(handle, "BIO_read");454455OPEM_read_bio_PrivateKey = (OPEM_read_bio_PrivateKey_t *)findLibsslSymbol(handle, "PEM_read_bio_PrivateKey");456OPEM_read_bio_X509 = (OPEM_read_bio_X509_t *)findLibsslSymbol(handle, "PEM_read_bio_X509");457OPEM_X509_INFO_read_bio = (OPEM_X509_INFO_read_bio_t *)findLibsslSymbol(handle, "PEM_X509_INFO_read_bio");458459OX509_INFO_free = (OX509_INFO_free_t *)findLibsslSymbol(handle, "X509_INFO_free");460OX509_STORE_add_cert = (OX509_STORE_add_cert_t *)findLibsslSymbol(handle, "X509_STORE_add_cert");461OX509_STORE_add_crl = (OX509_STORE_add_crl_t *)findLibsslSymbol(handle, "X509_STORE_add_crl");462OX509_free = (OX509_free_t *)findLibsslSymbol(handle, "X509_free");463464OEVP_MD_CTX_new = (OEVP_MD_CTX_new_t *)findLibsslSymbol(handle, (ossl_ver == 0) ? "EVP_MD_CTX_create"465: "EVP_MD_CTX_new");466OEVP_MD_CTX_free = (OEVP_MD_CTX_free_t *)findLibsslSymbol(handle, (ossl_ver == 0) ? "EVP_MD_CTX_destroy"467: "EVP_MD_CTX_free");468OEVP_DigestInit_ex = (OEVP_DigestInit_ex_t *)findLibsslSymbol(handle, "EVP_DigestInit_ex");469OEVP_DigestUpdate = (OEVP_DigestUpdate_t *)findLibsslSymbol(handle, "EVP_DigestUpdate");470OEVP_DigestFinal_ex = (OEVP_DigestFinal_ex_t *)findLibsslSymbol(handle, "EVP_DigestFinal_ex");471OEVP_sha256 = (OEVP_sha256_t *)findLibsslSymbol(handle, "EVP_sha256");472473OERR_print_errors_fp = (OERR_print_errors_fp_t *)findLibsslSymbol(handle, "ERR_print_errors_fp");474475if (476(OOpenSSL_version == NULL) ||477478(OSSL_load_error_strings == NULL) ||479(OSSL_library_init == NULL) ||480(OOPENSSL_init_ssl == NULL) ||481482(OSSLv23_server_method == NULL) ||483(OSSLv23_client_method == NULL) ||484485(OEVP_cleanup == NULL) ||486487(OSSL_CTX_ctrl == NULL) ||488(OBIO_ctrl == NULL) ||489490(Osk_num == NULL) ||491(Osk_value == NULL) ||492(Osk_pop_free == NULL) ||493494(OSSL_CIPHER_get_name == NULL) ||495(OSSL_get_current_cipher == NULL) ||496497(OSSL_new == NULL) ||498(OSSL_free == NULL) ||499(OSSL_set_connect_state == NULL) ||500(OSSL_set_accept_state == NULL) ||501(OSSL_set_fd == NULL) ||502(OSSL_get_version == NULL) ||503(OSSL_accept == NULL) ||504(OSSL_connect == NULL) ||505(OSSL_get_peer_certificate == NULL) ||506(OSSL_get_verify_result == NULL) ||507508(OSSL_CTX_new == NULL) ||509(OSSL_CTX_set_session_id_context == NULL) ||510(OSSL_CTX_use_PrivateKey == NULL) ||511(OSSL_CTX_use_certificate == NULL) ||512(OSSL_CTX_check_private_key == NULL) ||513(OSSL_CTX_set_verify == NULL) ||514(OSSL_CTX_free == NULL) ||515(OSSL_CTX_get_cert_store == NULL) ||516517(OBIO_new_mem_buf == NULL) ||518(OBIO_free_all == NULL) ||519(OBIO_new_ssl == NULL) ||520(OBIO_write == NULL) ||521(OBIO_read == NULL) ||522523(OPEM_read_bio_PrivateKey == NULL) ||524(OPEM_read_bio_X509 == NULL) ||525(OPEM_X509_INFO_read_bio == NULL) ||526527(OX509_INFO_free == NULL) ||528(OX509_STORE_add_cert == NULL) ||529(OX509_STORE_add_crl == NULL) ||530(OX509_free == NULL) ||531532(OEVP_MD_CTX_new == NULL) ||533(OEVP_MD_CTX_free == NULL) ||534(OEVP_DigestInit_ex == NULL) ||535(OEVP_DigestUpdate == NULL) ||536(OEVP_DigestFinal_ex == NULL) ||537(OEVP_sha256 == NULL) ||538539(OERR_print_errors_fp == NULL)540)541{542printf("#JITServer: Failed to load all the required OpenSSL symbols\n");543#if defined(DEBUG)544dbgPrintSymbols();545#endif /* defined(DEBUG) */546unloadLibssl(handle);547return false;548}549550if (TR::Options::getVerboseOption(TR_VerboseJITServer))551TR_VerboseLog::writeLineLocked(TR_Vlog_JITServer, "Built against (%s); Loaded with (%s)\n",552OPENSSL_VERSION_TEXT, (*OOpenSSL_version)(0));553554return true;555}556557}; // JITServer558559560