TLS backend OpenSSL: Use function-static variable for symbol loading

Replace a combination of a mutex, atomic variable, and another variable
by a function-local variable initialized by lambda.

C++17 standard guarantees that the lambda is called only once and
that any other callers will waiting for initialization to complete.

Task-number: QTBUG-103559
Change-Id: If9af8584e648ddb9ec518498ce035105e52413a2
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
Ievgenii Meshcheriakov 2022-08-30 16:29:55 +02:00
parent aed7b5f370
commit 1c217ba6f7

View File

@ -28,7 +28,6 @@
#elif QT_CONFIG(library) #elif QT_CONFIG(library)
# include <QtCore/qlibrary.h> # include <QtCore/qlibrary.h>
#endif #endif
#include <QtCore/qmutex.h>
#include <QtCore/qdatetime.h> #include <QtCore/qdatetime.h>
#if defined(Q_OS_UNIX) #if defined(Q_OS_UNIX)
#include <QtCore/qdir.h> #include <QtCore/qdir.h>
@ -832,412 +831,401 @@ static LoadedOpenSsl loadOpenSsl()
} }
#endif #endif
Q_CONSTINIT static QBasicMutex symbolResolveMutex;
Q_CONSTINIT static QBasicAtomicInt symbolsResolved = Q_BASIC_ATOMIC_INITIALIZER(false);
Q_CONSTINIT static bool triedToResolveSymbols = false;
bool q_resolveOpenSslSymbols() bool q_resolveOpenSslSymbols()
{ {
if (symbolsResolved.loadAcquire()) static bool symbolsResolved = []() {
return true; LoadedOpenSsl libs = loadOpenSsl();
QMutexLocker locker(&symbolResolveMutex); if (!libs.ssl || !libs.crypto) {
if (symbolsResolved.loadRelaxed()) qCWarning(lcTlsBackend, "Failed to load libssl/libcrypto.");
return true; return false;
if (triedToResolveSymbols) }
return false;
triedToResolveSymbols = true;
LoadedOpenSsl libs = loadOpenSsl(); RESOLVEFUNC(OPENSSL_init_ssl)
if (!libs.ssl || !libs.crypto) { RESOLVEFUNC(OPENSSL_init_crypto)
qCWarning(lcTlsBackend, "Failed to load libssl/libcrypto."); RESOLVEFUNC(ASN1_STRING_get0_data)
return false; RESOLVEFUNC(EVP_CIPHER_CTX_reset)
} RESOLVEFUNC(AUTHORITY_INFO_ACCESS_free)
RESOLVEFUNC(EVP_PKEY_up_ref)
RESOLVEFUNC(OPENSSL_init_ssl) RESOLVEFUNC(EVP_PKEY_CTX_new)
RESOLVEFUNC(OPENSSL_init_crypto) RESOLVEFUNC(EVP_PKEY_param_check)
RESOLVEFUNC(ASN1_STRING_get0_data) RESOLVEFUNC(EVP_PKEY_CTX_free)
RESOLVEFUNC(EVP_CIPHER_CTX_reset) RESOLVEFUNC(OPENSSL_sk_new_null)
RESOLVEFUNC(AUTHORITY_INFO_ACCESS_free) RESOLVEFUNC(OPENSSL_sk_push)
RESOLVEFUNC(EVP_PKEY_up_ref) RESOLVEFUNC(OPENSSL_sk_free)
RESOLVEFUNC(EVP_PKEY_CTX_new) RESOLVEFUNC(OPENSSL_sk_num)
RESOLVEFUNC(EVP_PKEY_param_check) RESOLVEFUNC(OPENSSL_sk_pop_free)
RESOLVEFUNC(EVP_PKEY_CTX_free) RESOLVEFUNC(OPENSSL_sk_value)
RESOLVEFUNC(OPENSSL_sk_new_null) RESOLVEFUNC(DH_get0_pqg)
RESOLVEFUNC(OPENSSL_sk_push) RESOLVEFUNC(SSL_CTX_set_options)
RESOLVEFUNC(OPENSSL_sk_free) RESOLVEFUNC(SSL_set_info_callback)
RESOLVEFUNC(OPENSSL_sk_num) RESOLVEFUNC(SSL_alert_type_string)
RESOLVEFUNC(OPENSSL_sk_pop_free) RESOLVEFUNC(SSL_alert_desc_string_long)
RESOLVEFUNC(OPENSSL_sk_value) RESOLVEFUNC(SSL_CTX_get_security_level)
RESOLVEFUNC(DH_get0_pqg) RESOLVEFUNC(SSL_CTX_set_security_level)
RESOLVEFUNC(SSL_CTX_set_options)
RESOLVEFUNC(SSL_set_info_callback)
RESOLVEFUNC(SSL_alert_type_string)
RESOLVEFUNC(SSL_alert_desc_string_long)
RESOLVEFUNC(SSL_CTX_get_security_level)
RESOLVEFUNC(SSL_CTX_set_security_level)
#ifdef TLS1_3_VERSION #ifdef TLS1_3_VERSION
RESOLVEFUNC(SSL_CTX_set_ciphersuites) RESOLVEFUNC(SSL_CTX_set_ciphersuites)
RESOLVEFUNC(SSL_set_psk_use_session_callback) RESOLVEFUNC(SSL_set_psk_use_session_callback)
RESOLVEFUNC(SSL_CTX_sess_set_new_cb) RESOLVEFUNC(SSL_CTX_sess_set_new_cb)
RESOLVEFUNC(SSL_SESSION_is_resumable) RESOLVEFUNC(SSL_SESSION_is_resumable)
#endif // TLS 1.3 or OpenSSL > 1.1.1 #endif // TLS 1.3 or OpenSSL > 1.1.1
RESOLVEFUNC(SSL_get_client_random) RESOLVEFUNC(SSL_get_client_random)
RESOLVEFUNC(SSL_SESSION_get_master_key) RESOLVEFUNC(SSL_SESSION_get_master_key)
RESOLVEFUNC(SSL_session_reused) RESOLVEFUNC(SSL_session_reused)
RESOLVEFUNC(SSL_get_session) RESOLVEFUNC(SSL_get_session)
RESOLVEFUNC(SSL_set_options) RESOLVEFUNC(SSL_set_options)
RESOLVEFUNC(CRYPTO_get_ex_new_index) RESOLVEFUNC(CRYPTO_get_ex_new_index)
RESOLVEFUNC(TLS_method) RESOLVEFUNC(TLS_method)
RESOLVEFUNC(TLS_client_method) RESOLVEFUNC(TLS_client_method)
RESOLVEFUNC(TLS_server_method) RESOLVEFUNC(TLS_server_method)
RESOLVEFUNC(X509_up_ref) RESOLVEFUNC(X509_up_ref)
RESOLVEFUNC(X509_STORE_CTX_get0_chain) RESOLVEFUNC(X509_STORE_CTX_get0_chain)
RESOLVEFUNC(X509_getm_notBefore) RESOLVEFUNC(X509_getm_notBefore)
RESOLVEFUNC(X509_getm_notAfter) RESOLVEFUNC(X509_getm_notAfter)
RESOLVEFUNC(ASN1_item_free) RESOLVEFUNC(ASN1_item_free)
RESOLVEFUNC(X509V3_conf_free) RESOLVEFUNC(X509V3_conf_free)
RESOLVEFUNC(X509_get_version) RESOLVEFUNC(X509_get_version)
RESOLVEFUNC(X509_get_pubkey) RESOLVEFUNC(X509_get_pubkey)
RESOLVEFUNC(X509_STORE_set_verify_cb) RESOLVEFUNC(X509_STORE_set_verify_cb)
RESOLVEFUNC(X509_STORE_set_ex_data) RESOLVEFUNC(X509_STORE_set_ex_data)
RESOLVEFUNC(X509_STORE_get_ex_data) RESOLVEFUNC(X509_STORE_get_ex_data)
RESOLVEFUNC(CRYPTO_free) RESOLVEFUNC(CRYPTO_free)
RESOLVEFUNC(OpenSSL_version_num) RESOLVEFUNC(OpenSSL_version_num)
RESOLVEFUNC(OpenSSL_version) RESOLVEFUNC(OpenSSL_version)
if (!_q_OpenSSL_version || !_q_OpenSSL_version_num) { if (!_q_OpenSSL_version || !_q_OpenSSL_version_num) {
// Apparently, we were built with OpenSSL 1.1 enabled but are now using // Apparently, we were built with OpenSSL 1.1 enabled but are now using
// a wrong library. // a wrong library.
qCWarning(lcTlsBackend, "Incompatible version of OpenSSL"); qCWarning(lcTlsBackend, "Incompatible version of OpenSSL");
return false; return false;
} }
#if OPENSSL_VERSION_NUMBER >= 0x30000000 #if OPENSSL_VERSION_NUMBER >= 0x30000000
if (q_OpenSSL_version_num() < 0x30000000) { if (q_OpenSSL_version_num() < 0x30000000) {
qCWarning(lcTlsBackend, "Incompatible version of OpenSSL (built with OpenSSL >= 3.x, runtime version is < 3.x)"); qCWarning(lcTlsBackend, "Incompatible version of OpenSSL (built with OpenSSL >= 3.x, runtime version is < 3.x)");
return false; return false;
} }
#else #else
if (q_OpenSSL_version_num() >= 0x30000000) { if (q_OpenSSL_version_num() >= 0x30000000) {
qCWarning(lcTlsBackend, "Incompatible version of OpenSSL (built with OpenSSL 1.x, runtime version is >= 3.x)"); qCWarning(lcTlsBackend, "Incompatible version of OpenSSL (built with OpenSSL 1.x, runtime version is >= 3.x)");
return false; return false;
} }
#endif // OPENSSL_VERSION_NUMBER #endif // OPENSSL_VERSION_NUMBER
RESOLVEFUNC(SSL_SESSION_get_ticket_lifetime_hint) RESOLVEFUNC(SSL_SESSION_get_ticket_lifetime_hint)
#if QT_CONFIG(dtls) #if QT_CONFIG(dtls)
RESOLVEFUNC(DTLSv1_listen) RESOLVEFUNC(DTLSv1_listen)
RESOLVEFUNC(BIO_ADDR_new) RESOLVEFUNC(BIO_ADDR_new)
RESOLVEFUNC(BIO_ADDR_free) RESOLVEFUNC(BIO_ADDR_free)
RESOLVEFUNC(BIO_meth_new) RESOLVEFUNC(BIO_meth_new)
RESOLVEFUNC(BIO_meth_free) RESOLVEFUNC(BIO_meth_free)
RESOLVEFUNC(BIO_meth_set_write) RESOLVEFUNC(BIO_meth_set_write)
RESOLVEFUNC(BIO_meth_set_read) RESOLVEFUNC(BIO_meth_set_read)
RESOLVEFUNC(BIO_meth_set_puts) RESOLVEFUNC(BIO_meth_set_puts)
RESOLVEFUNC(BIO_meth_set_ctrl) RESOLVEFUNC(BIO_meth_set_ctrl)
RESOLVEFUNC(BIO_meth_set_create) RESOLVEFUNC(BIO_meth_set_create)
RESOLVEFUNC(BIO_meth_set_destroy) RESOLVEFUNC(BIO_meth_set_destroy)
#endif // dtls #endif // dtls
#if QT_CONFIG(ocsp) #if QT_CONFIG(ocsp)
RESOLVEFUNC(OCSP_SINGLERESP_get0_id) RESOLVEFUNC(OCSP_SINGLERESP_get0_id)
RESOLVEFUNC(d2i_OCSP_RESPONSE) RESOLVEFUNC(d2i_OCSP_RESPONSE)
RESOLVEFUNC(OCSP_RESPONSE_free) RESOLVEFUNC(OCSP_RESPONSE_free)
RESOLVEFUNC(OCSP_response_status) RESOLVEFUNC(OCSP_response_status)
RESOLVEFUNC(OCSP_response_get1_basic) RESOLVEFUNC(OCSP_response_get1_basic)
RESOLVEFUNC(OCSP_BASICRESP_free) RESOLVEFUNC(OCSP_BASICRESP_free)
RESOLVEFUNC(OCSP_basic_verify) RESOLVEFUNC(OCSP_basic_verify)
RESOLVEFUNC(OCSP_resp_count) RESOLVEFUNC(OCSP_resp_count)
RESOLVEFUNC(OCSP_resp_get0) RESOLVEFUNC(OCSP_resp_get0)
RESOLVEFUNC(OCSP_single_get0_status) RESOLVEFUNC(OCSP_single_get0_status)
RESOLVEFUNC(OCSP_check_validity) RESOLVEFUNC(OCSP_check_validity)
RESOLVEFUNC(OCSP_cert_to_id) RESOLVEFUNC(OCSP_cert_to_id)
RESOLVEFUNC(OCSP_id_get0_info) RESOLVEFUNC(OCSP_id_get0_info)
RESOLVEFUNC(OCSP_resp_get0_certs) RESOLVEFUNC(OCSP_resp_get0_certs)
RESOLVEFUNC(OCSP_basic_sign) RESOLVEFUNC(OCSP_basic_sign)
RESOLVEFUNC(OCSP_response_create) RESOLVEFUNC(OCSP_response_create)
RESOLVEFUNC(i2d_OCSP_RESPONSE) RESOLVEFUNC(i2d_OCSP_RESPONSE)
RESOLVEFUNC(OCSP_basic_add1_status) RESOLVEFUNC(OCSP_basic_add1_status)
RESOLVEFUNC(OCSP_BASICRESP_new) RESOLVEFUNC(OCSP_BASICRESP_new)
RESOLVEFUNC(OCSP_CERTID_free) RESOLVEFUNC(OCSP_CERTID_free)
RESOLVEFUNC(OCSP_cert_to_id) RESOLVEFUNC(OCSP_cert_to_id)
RESOLVEFUNC(OCSP_id_cmp) RESOLVEFUNC(OCSP_id_cmp)
#endif // ocsp #endif // ocsp
RESOLVEFUNC(BIO_set_data) RESOLVEFUNC(BIO_set_data)
RESOLVEFUNC(BIO_get_data) RESOLVEFUNC(BIO_get_data)
RESOLVEFUNC(BIO_set_init) RESOLVEFUNC(BIO_set_init)
RESOLVEFUNC(BIO_get_shutdown) RESOLVEFUNC(BIO_get_shutdown)
RESOLVEFUNC(BIO_set_shutdown) RESOLVEFUNC(BIO_set_shutdown)
RESOLVEFUNC(ASN1_INTEGER_get) RESOLVEFUNC(ASN1_INTEGER_get)
RESOLVEFUNC(ASN1_INTEGER_cmp) RESOLVEFUNC(ASN1_INTEGER_cmp)
RESOLVEFUNC(ASN1_STRING_length) RESOLVEFUNC(ASN1_STRING_length)
RESOLVEFUNC(ASN1_STRING_to_UTF8) RESOLVEFUNC(ASN1_STRING_to_UTF8)
RESOLVEFUNC(ASN1_TIME_to_tm) RESOLVEFUNC(ASN1_TIME_to_tm)
RESOLVEFUNC(BIO_ctrl) RESOLVEFUNC(BIO_ctrl)
RESOLVEFUNC(BIO_free) RESOLVEFUNC(BIO_free)
RESOLVEFUNC(BIO_new) RESOLVEFUNC(BIO_new)
RESOLVEFUNC(BIO_new_mem_buf) RESOLVEFUNC(BIO_new_mem_buf)
RESOLVEFUNC(BIO_read) RESOLVEFUNC(BIO_read)
RESOLVEFUNC(BIO_s_mem) RESOLVEFUNC(BIO_s_mem)
RESOLVEFUNC(BIO_write) RESOLVEFUNC(BIO_write)
RESOLVEFUNC(BIO_set_flags) RESOLVEFUNC(BIO_set_flags)
RESOLVEFUNC(BIO_clear_flags) RESOLVEFUNC(BIO_clear_flags)
RESOLVEFUNC(BIO_set_ex_data) RESOLVEFUNC(BIO_set_ex_data)
RESOLVEFUNC(BIO_get_ex_data) RESOLVEFUNC(BIO_get_ex_data)
RESOLVEFUNC(BN_num_bits) RESOLVEFUNC(BN_num_bits)
RESOLVEFUNC(BN_is_word) RESOLVEFUNC(BN_is_word)
RESOLVEFUNC(BN_mod_word) RESOLVEFUNC(BN_mod_word)
RESOLVEFUNC(ERR_error_string) RESOLVEFUNC(ERR_error_string)
RESOLVEFUNC(ERR_error_string_n) RESOLVEFUNC(ERR_error_string_n)
RESOLVEFUNC(ERR_get_error) RESOLVEFUNC(ERR_get_error)
RESOLVEFUNC(EVP_CIPHER_CTX_new) RESOLVEFUNC(EVP_CIPHER_CTX_new)
RESOLVEFUNC(EVP_CIPHER_CTX_free) RESOLVEFUNC(EVP_CIPHER_CTX_free)
RESOLVEFUNC(EVP_CIPHER_CTX_ctrl) RESOLVEFUNC(EVP_CIPHER_CTX_ctrl)
RESOLVEFUNC(EVP_CIPHER_CTX_set_key_length) RESOLVEFUNC(EVP_CIPHER_CTX_set_key_length)
RESOLVEFUNC(EVP_CipherInit) RESOLVEFUNC(EVP_CipherInit)
RESOLVEFUNC(EVP_CipherInit_ex) RESOLVEFUNC(EVP_CipherInit_ex)
RESOLVEFUNC(EVP_CipherUpdate) RESOLVEFUNC(EVP_CipherUpdate)
RESOLVEFUNC(EVP_CipherFinal) RESOLVEFUNC(EVP_CipherFinal)
RESOLVEFUNC(EVP_get_digestbyname) RESOLVEFUNC(EVP_get_digestbyname)
#ifndef OPENSSL_NO_DES #ifndef OPENSSL_NO_DES
RESOLVEFUNC(EVP_des_cbc) RESOLVEFUNC(EVP_des_cbc)
RESOLVEFUNC(EVP_des_ede3_cbc) RESOLVEFUNC(EVP_des_ede3_cbc)
#endif #endif
#ifndef OPENSSL_NO_RC2 #ifndef OPENSSL_NO_RC2
RESOLVEFUNC(EVP_rc2_cbc) RESOLVEFUNC(EVP_rc2_cbc)
#endif #endif
#ifndef OPENSSL_NO_AES #ifndef OPENSSL_NO_AES
RESOLVEFUNC(EVP_aes_128_cbc) RESOLVEFUNC(EVP_aes_128_cbc)
RESOLVEFUNC(EVP_aes_192_cbc) RESOLVEFUNC(EVP_aes_192_cbc)
RESOLVEFUNC(EVP_aes_256_cbc) RESOLVEFUNC(EVP_aes_256_cbc)
#endif #endif
RESOLVEFUNC(EVP_sha1) RESOLVEFUNC(EVP_sha1)
RESOLVEFUNC(EVP_PKEY_free) RESOLVEFUNC(EVP_PKEY_free)
RESOLVEFUNC(EVP_PKEY_new) RESOLVEFUNC(EVP_PKEY_new)
RESOLVEFUNC(EVP_PKEY_type) RESOLVEFUNC(EVP_PKEY_type)
RESOLVEFUNC(OBJ_nid2sn) RESOLVEFUNC(OBJ_nid2sn)
RESOLVEFUNC(OBJ_nid2ln) RESOLVEFUNC(OBJ_nid2ln)
RESOLVEFUNC(OBJ_sn2nid) RESOLVEFUNC(OBJ_sn2nid)
RESOLVEFUNC(OBJ_ln2nid) RESOLVEFUNC(OBJ_ln2nid)
RESOLVEFUNC(i2t_ASN1_OBJECT) RESOLVEFUNC(i2t_ASN1_OBJECT)
RESOLVEFUNC(OBJ_obj2txt) RESOLVEFUNC(OBJ_obj2txt)
RESOLVEFUNC(OBJ_obj2nid) RESOLVEFUNC(OBJ_obj2nid)
RESOLVEFUNC(PEM_read_bio_PrivateKey) RESOLVEFUNC(PEM_read_bio_PrivateKey)
RESOLVEFUNC(PEM_read_bio_DHparams) RESOLVEFUNC(PEM_read_bio_DHparams)
RESOLVEFUNC(PEM_write_bio_PrivateKey) RESOLVEFUNC(PEM_write_bio_PrivateKey)
RESOLVEFUNC(PEM_write_bio_PrivateKey_traditional) RESOLVEFUNC(PEM_write_bio_PrivateKey_traditional)
RESOLVEFUNC(PEM_read_bio_PUBKEY) RESOLVEFUNC(PEM_read_bio_PUBKEY)
RESOLVEFUNC(PEM_write_bio_PUBKEY) RESOLVEFUNC(PEM_write_bio_PUBKEY)
RESOLVEFUNC(RAND_seed) RESOLVEFUNC(RAND_seed)
RESOLVEFUNC(RAND_status) RESOLVEFUNC(RAND_status)
RESOLVEFUNC(RAND_bytes) RESOLVEFUNC(RAND_bytes)
RESOLVEFUNC(SSL_CIPHER_description) RESOLVEFUNC(SSL_CIPHER_description)
RESOLVEFUNC(SSL_CIPHER_get_bits) RESOLVEFUNC(SSL_CIPHER_get_bits)
RESOLVEFUNC(SSL_get_rbio) RESOLVEFUNC(SSL_get_rbio)
RESOLVEFUNC(SSL_CTX_check_private_key) RESOLVEFUNC(SSL_CTX_check_private_key)
RESOLVEFUNC(SSL_CTX_ctrl) RESOLVEFUNC(SSL_CTX_ctrl)
RESOLVEFUNC(SSL_CTX_free) RESOLVEFUNC(SSL_CTX_free)
RESOLVEFUNC(SSL_CTX_new) RESOLVEFUNC(SSL_CTX_new)
RESOLVEFUNC(SSL_CTX_set_cipher_list) RESOLVEFUNC(SSL_CTX_set_cipher_list)
RESOLVEFUNC(SSL_CTX_callback_ctrl) RESOLVEFUNC(SSL_CTX_callback_ctrl)
RESOLVEFUNC(SSL_CTX_set_default_verify_paths) RESOLVEFUNC(SSL_CTX_set_default_verify_paths)
RESOLVEFUNC(SSL_CTX_set_verify) RESOLVEFUNC(SSL_CTX_set_verify)
RESOLVEFUNC(SSL_CTX_set_verify_depth) RESOLVEFUNC(SSL_CTX_set_verify_depth)
RESOLVEFUNC(SSL_CTX_use_certificate) RESOLVEFUNC(SSL_CTX_use_certificate)
RESOLVEFUNC(SSL_CTX_use_certificate_file) RESOLVEFUNC(SSL_CTX_use_certificate_file)
RESOLVEFUNC(SSL_CTX_use_PrivateKey) RESOLVEFUNC(SSL_CTX_use_PrivateKey)
RESOLVEFUNC(SSL_CTX_use_PrivateKey_file) RESOLVEFUNC(SSL_CTX_use_PrivateKey_file)
RESOLVEFUNC(SSL_CTX_get_cert_store); RESOLVEFUNC(SSL_CTX_get_cert_store);
RESOLVEFUNC(SSL_CONF_CTX_new); RESOLVEFUNC(SSL_CONF_CTX_new);
RESOLVEFUNC(SSL_CONF_CTX_free); RESOLVEFUNC(SSL_CONF_CTX_free);
RESOLVEFUNC(SSL_CONF_CTX_set_ssl_ctx); RESOLVEFUNC(SSL_CONF_CTX_set_ssl_ctx);
RESOLVEFUNC(SSL_CONF_CTX_set_flags); RESOLVEFUNC(SSL_CONF_CTX_set_flags);
RESOLVEFUNC(SSL_CONF_CTX_finish); RESOLVEFUNC(SSL_CONF_CTX_finish);
RESOLVEFUNC(SSL_CONF_cmd); RESOLVEFUNC(SSL_CONF_cmd);
RESOLVEFUNC(SSL_accept) RESOLVEFUNC(SSL_accept)
RESOLVEFUNC(SSL_clear) RESOLVEFUNC(SSL_clear)
RESOLVEFUNC(SSL_connect) RESOLVEFUNC(SSL_connect)
RESOLVEFUNC(SSL_free) RESOLVEFUNC(SSL_free)
RESOLVEFUNC(SSL_get_ciphers) RESOLVEFUNC(SSL_get_ciphers)
RESOLVEFUNC(SSL_get_current_cipher) RESOLVEFUNC(SSL_get_current_cipher)
RESOLVEFUNC(SSL_version) RESOLVEFUNC(SSL_version)
RESOLVEFUNC(SSL_get_error) RESOLVEFUNC(SSL_get_error)
RESOLVEFUNC(SSL_get_peer_cert_chain) RESOLVEFUNC(SSL_get_peer_cert_chain)
#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3 #if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
RESOLVEFUNC(SSL_get1_peer_certificate) RESOLVEFUNC(SSL_get1_peer_certificate)
RESOLVEFUNC(EVP_PKEY_get_bits) RESOLVEFUNC(EVP_PKEY_get_bits)
RESOLVEFUNC(EVP_PKEY_get_base_id) RESOLVEFUNC(EVP_PKEY_get_base_id)
#else #else
RESOLVEFUNC(SSL_get_peer_certificate) RESOLVEFUNC(SSL_get_peer_certificate)
RESOLVEFUNC(EVP_PKEY_base_id) RESOLVEFUNC(EVP_PKEY_base_id)
#endif // OPENSSL_VERSION_MAJOR >= 3 #endif // OPENSSL_VERSION_MAJOR >= 3
#ifndef OPENSSL_NO_DEPRECATED_3_0 #ifndef OPENSSL_NO_DEPRECATED_3_0
RESOLVEFUNC(EVP_PKEY_assign) RESOLVEFUNC(EVP_PKEY_assign)
RESOLVEFUNC(EVP_PKEY_cmp) RESOLVEFUNC(EVP_PKEY_cmp)
RESOLVEFUNC(EVP_PKEY_set1_RSA) RESOLVEFUNC(EVP_PKEY_set1_RSA)
RESOLVEFUNC(EVP_PKEY_set1_DSA) RESOLVEFUNC(EVP_PKEY_set1_DSA)
RESOLVEFUNC(EVP_PKEY_set1_DH) RESOLVEFUNC(EVP_PKEY_set1_DH)
RESOLVEFUNC(EVP_PKEY_get1_DSA) RESOLVEFUNC(EVP_PKEY_get1_DSA)
RESOLVEFUNC(EVP_PKEY_get1_RSA) RESOLVEFUNC(EVP_PKEY_get1_RSA)
RESOLVEFUNC(EVP_PKEY_get1_DH) RESOLVEFUNC(EVP_PKEY_get1_DH)
RESOLVEFUNC(PEM_read_bio_DSA_PUBKEY) RESOLVEFUNC(PEM_read_bio_DSA_PUBKEY)
RESOLVEFUNC(PEM_read_bio_RSA_PUBKEY) RESOLVEFUNC(PEM_read_bio_RSA_PUBKEY)
RESOLVEFUNC(PEM_read_bio_DSAPrivateKey) RESOLVEFUNC(PEM_read_bio_DSAPrivateKey)
RESOLVEFUNC(PEM_read_bio_RSAPrivateKey) RESOLVEFUNC(PEM_read_bio_RSAPrivateKey)
RESOLVEFUNC(PEM_write_bio_DSA_PUBKEY) RESOLVEFUNC(PEM_write_bio_DSA_PUBKEY)
RESOLVEFUNC(PEM_write_bio_RSA_PUBKEY) RESOLVEFUNC(PEM_write_bio_RSA_PUBKEY)
RESOLVEFUNC(PEM_write_bio_DSAPrivateKey) RESOLVEFUNC(PEM_write_bio_DSAPrivateKey)
RESOLVEFUNC(PEM_write_bio_RSAPrivateKey) RESOLVEFUNC(PEM_write_bio_RSAPrivateKey)
RESOLVEFUNC(SSL_CTX_use_RSAPrivateKey) RESOLVEFUNC(SSL_CTX_use_RSAPrivateKey)
RESOLVEFUNC(DSA_new) RESOLVEFUNC(DSA_new)
RESOLVEFUNC(DSA_free) RESOLVEFUNC(DSA_free)
RESOLVEFUNC(RSA_new) RESOLVEFUNC(RSA_new)
RESOLVEFUNC(RSA_free) RESOLVEFUNC(RSA_free)
RESOLVEFUNC(DH_bits) RESOLVEFUNC(DH_bits)
RESOLVEFUNC(DSA_bits) RESOLVEFUNC(DSA_bits)
RESOLVEFUNC(RSA_bits) RESOLVEFUNC(RSA_bits)
#ifndef OPENSSL_NO_EC #ifndef OPENSSL_NO_EC
RESOLVEFUNC(EVP_PKEY_set1_EC_KEY) RESOLVEFUNC(EVP_PKEY_set1_EC_KEY)
RESOLVEFUNC(EVP_PKEY_get1_EC_KEY) RESOLVEFUNC(EVP_PKEY_get1_EC_KEY)
RESOLVEFUNC(PEM_read_bio_EC_PUBKEY) RESOLVEFUNC(PEM_read_bio_EC_PUBKEY)
RESOLVEFUNC(PEM_read_bio_ECPrivateKey) RESOLVEFUNC(PEM_read_bio_ECPrivateKey)
RESOLVEFUNC(PEM_write_bio_EC_PUBKEY) RESOLVEFUNC(PEM_write_bio_EC_PUBKEY)
RESOLVEFUNC(PEM_write_bio_ECPrivateKey) RESOLVEFUNC(PEM_write_bio_ECPrivateKey)
RESOLVEFUNC(EC_KEY_get0_group) RESOLVEFUNC(EC_KEY_get0_group)
RESOLVEFUNC(EC_GROUP_get_degree) RESOLVEFUNC(EC_GROUP_get_degree)
RESOLVEFUNC(EC_KEY_dup) RESOLVEFUNC(EC_KEY_dup)
RESOLVEFUNC(EC_KEY_new_by_curve_name) RESOLVEFUNC(EC_KEY_new_by_curve_name)
RESOLVEFUNC(EC_KEY_free) RESOLVEFUNC(EC_KEY_free)
#endif // OPENSSL_NO_EC #endif // OPENSSL_NO_EC
#endif // OPENSSL_NO_DEPRECATED_3_0 #endif // OPENSSL_NO_DEPRECATED_3_0
RESOLVEFUNC(SSL_get_verify_result) RESOLVEFUNC(SSL_get_verify_result)
RESOLVEFUNC(SSL_new) RESOLVEFUNC(SSL_new)
RESOLVEFUNC(SSL_get_SSL_CTX) RESOLVEFUNC(SSL_get_SSL_CTX)
RESOLVEFUNC(SSL_ctrl) RESOLVEFUNC(SSL_ctrl)
RESOLVEFUNC(SSL_read) RESOLVEFUNC(SSL_read)
RESOLVEFUNC(SSL_set_accept_state) RESOLVEFUNC(SSL_set_accept_state)
RESOLVEFUNC(SSL_set_bio) RESOLVEFUNC(SSL_set_bio)
RESOLVEFUNC(SSL_set_connect_state) RESOLVEFUNC(SSL_set_connect_state)
RESOLVEFUNC(SSL_shutdown) RESOLVEFUNC(SSL_shutdown)
RESOLVEFUNC(SSL_in_init) RESOLVEFUNC(SSL_in_init)
RESOLVEFUNC(SSL_get_shutdown) RESOLVEFUNC(SSL_get_shutdown)
RESOLVEFUNC(SSL_set_session) RESOLVEFUNC(SSL_set_session)
RESOLVEFUNC(SSL_SESSION_free) RESOLVEFUNC(SSL_SESSION_free)
RESOLVEFUNC(SSL_get1_session) RESOLVEFUNC(SSL_get1_session)
RESOLVEFUNC(SSL_get_session) RESOLVEFUNC(SSL_get_session)
RESOLVEFUNC(SSL_set_ex_data) RESOLVEFUNC(SSL_set_ex_data)
RESOLVEFUNC(SSL_get_ex_data) RESOLVEFUNC(SSL_get_ex_data)
RESOLVEFUNC(SSL_get_ex_data_X509_STORE_CTX_idx) RESOLVEFUNC(SSL_get_ex_data_X509_STORE_CTX_idx)
#ifndef OPENSSL_NO_PSK #ifndef OPENSSL_NO_PSK
RESOLVEFUNC(SSL_set_psk_client_callback) RESOLVEFUNC(SSL_set_psk_client_callback)
RESOLVEFUNC(SSL_set_psk_server_callback) RESOLVEFUNC(SSL_set_psk_server_callback)
RESOLVEFUNC(SSL_CTX_use_psk_identity_hint) RESOLVEFUNC(SSL_CTX_use_psk_identity_hint)
#endif // !OPENSSL_NO_PSK #endif // !OPENSSL_NO_PSK
RESOLVEFUNC(SSL_write) RESOLVEFUNC(SSL_write)
RESOLVEFUNC(X509_NAME_entry_count) RESOLVEFUNC(X509_NAME_entry_count)
RESOLVEFUNC(X509_NAME_get_entry) RESOLVEFUNC(X509_NAME_get_entry)
RESOLVEFUNC(X509_NAME_ENTRY_get_data) RESOLVEFUNC(X509_NAME_ENTRY_get_data)
RESOLVEFUNC(X509_NAME_ENTRY_get_object) RESOLVEFUNC(X509_NAME_ENTRY_get_object)
RESOLVEFUNC(X509_PUBKEY_get) RESOLVEFUNC(X509_PUBKEY_get)
RESOLVEFUNC(X509_STORE_free) RESOLVEFUNC(X509_STORE_free)
RESOLVEFUNC(X509_STORE_new) RESOLVEFUNC(X509_STORE_new)
RESOLVEFUNC(X509_STORE_add_cert) RESOLVEFUNC(X509_STORE_add_cert)
RESOLVEFUNC(X509_STORE_CTX_free) RESOLVEFUNC(X509_STORE_CTX_free)
RESOLVEFUNC(X509_STORE_CTX_init) RESOLVEFUNC(X509_STORE_CTX_init)
RESOLVEFUNC(X509_STORE_CTX_new) RESOLVEFUNC(X509_STORE_CTX_new)
RESOLVEFUNC(X509_STORE_CTX_set_purpose) RESOLVEFUNC(X509_STORE_CTX_set_purpose)
RESOLVEFUNC(X509_STORE_CTX_get_error) RESOLVEFUNC(X509_STORE_CTX_get_error)
RESOLVEFUNC(X509_STORE_CTX_get_error_depth) RESOLVEFUNC(X509_STORE_CTX_get_error_depth)
RESOLVEFUNC(X509_STORE_CTX_get_current_cert) RESOLVEFUNC(X509_STORE_CTX_get_current_cert)
RESOLVEFUNC(X509_STORE_CTX_get0_store) RESOLVEFUNC(X509_STORE_CTX_get0_store)
RESOLVEFUNC(X509_cmp) RESOLVEFUNC(X509_cmp)
RESOLVEFUNC(X509_STORE_CTX_get_ex_data) RESOLVEFUNC(X509_STORE_CTX_get_ex_data)
RESOLVEFUNC(X509_dup) RESOLVEFUNC(X509_dup)
RESOLVEFUNC(X509_print) RESOLVEFUNC(X509_print)
RESOLVEFUNC(X509_digest) RESOLVEFUNC(X509_digest)
RESOLVEFUNC(X509_EXTENSION_get_object) RESOLVEFUNC(X509_EXTENSION_get_object)
RESOLVEFUNC(X509_free) RESOLVEFUNC(X509_free)
RESOLVEFUNC(X509_gmtime_adj) RESOLVEFUNC(X509_gmtime_adj)
RESOLVEFUNC(ASN1_TIME_free) RESOLVEFUNC(ASN1_TIME_free)
RESOLVEFUNC(X509_get_ext) RESOLVEFUNC(X509_get_ext)
RESOLVEFUNC(X509_get_ext_count) RESOLVEFUNC(X509_get_ext_count)
RESOLVEFUNC(X509_get_ext_d2i) RESOLVEFUNC(X509_get_ext_d2i)
RESOLVEFUNC(X509V3_EXT_get) RESOLVEFUNC(X509V3_EXT_get)
RESOLVEFUNC(X509V3_EXT_d2i) RESOLVEFUNC(X509V3_EXT_d2i)
RESOLVEFUNC(X509_EXTENSION_get_critical) RESOLVEFUNC(X509_EXTENSION_get_critical)
RESOLVEFUNC(X509_EXTENSION_get_data) RESOLVEFUNC(X509_EXTENSION_get_data)
RESOLVEFUNC(BASIC_CONSTRAINTS_free) RESOLVEFUNC(BASIC_CONSTRAINTS_free)
RESOLVEFUNC(AUTHORITY_KEYID_free) RESOLVEFUNC(AUTHORITY_KEYID_free)
RESOLVEFUNC(GENERAL_NAME_free) RESOLVEFUNC(GENERAL_NAME_free)
RESOLVEFUNC(ASN1_STRING_print) RESOLVEFUNC(ASN1_STRING_print)
RESOLVEFUNC(X509_check_issued) RESOLVEFUNC(X509_check_issued)
RESOLVEFUNC(X509_get_issuer_name) RESOLVEFUNC(X509_get_issuer_name)
RESOLVEFUNC(X509_get_subject_name) RESOLVEFUNC(X509_get_subject_name)
RESOLVEFUNC(X509_get_serialNumber) RESOLVEFUNC(X509_get_serialNumber)
RESOLVEFUNC(X509_verify_cert) RESOLVEFUNC(X509_verify_cert)
RESOLVEFUNC(d2i_X509) RESOLVEFUNC(d2i_X509)
RESOLVEFUNC(i2d_X509) RESOLVEFUNC(i2d_X509)
#if OPENSSL_VERSION_MAJOR < 3 #if OPENSSL_VERSION_MAJOR < 3
RESOLVEFUNC(SSL_CTX_load_verify_locations) RESOLVEFUNC(SSL_CTX_load_verify_locations)
#else #else
RESOLVEFUNC(SSL_CTX_load_verify_dir) RESOLVEFUNC(SSL_CTX_load_verify_dir)
#endif // OPENSSL_VERSION_MAJOR #endif // OPENSSL_VERSION_MAJOR
RESOLVEFUNC(i2d_SSL_SESSION) RESOLVEFUNC(i2d_SSL_SESSION)
RESOLVEFUNC(d2i_SSL_SESSION) RESOLVEFUNC(d2i_SSL_SESSION)
#ifndef OPENSSL_NO_NEXTPROTONEG #ifndef OPENSSL_NO_NEXTPROTONEG
RESOLVEFUNC(SSL_select_next_proto) RESOLVEFUNC(SSL_select_next_proto)
RESOLVEFUNC(SSL_CTX_set_next_proto_select_cb) RESOLVEFUNC(SSL_CTX_set_next_proto_select_cb)
RESOLVEFUNC(SSL_get0_next_proto_negotiated) RESOLVEFUNC(SSL_get0_next_proto_negotiated)
RESOLVEFUNC(SSL_set_alpn_protos) RESOLVEFUNC(SSL_set_alpn_protos)
RESOLVEFUNC(SSL_CTX_set_alpn_select_cb) RESOLVEFUNC(SSL_CTX_set_alpn_select_cb)
RESOLVEFUNC(SSL_get0_alpn_selected) RESOLVEFUNC(SSL_get0_alpn_selected)
#endif // !OPENSSL_NO_NEXTPROTONEG #endif // !OPENSSL_NO_NEXTPROTONEG
#if QT_CONFIG(dtls) #if QT_CONFIG(dtls)
RESOLVEFUNC(SSL_CTX_set_cookie_generate_cb) RESOLVEFUNC(SSL_CTX_set_cookie_generate_cb)
RESOLVEFUNC(SSL_CTX_set_cookie_verify_cb) RESOLVEFUNC(SSL_CTX_set_cookie_verify_cb)
RESOLVEFUNC(DTLS_server_method) RESOLVEFUNC(DTLS_server_method)
RESOLVEFUNC(DTLS_client_method) RESOLVEFUNC(DTLS_client_method)
#endif // dtls #endif // dtls
RESOLVEFUNC(CRYPTO_malloc) RESOLVEFUNC(CRYPTO_malloc)
RESOLVEFUNC(DH_new) RESOLVEFUNC(DH_new)
RESOLVEFUNC(DH_free) RESOLVEFUNC(DH_free)
RESOLVEFUNC(d2i_DHparams) RESOLVEFUNC(d2i_DHparams)
RESOLVEFUNC(i2d_DHparams) RESOLVEFUNC(i2d_DHparams)
RESOLVEFUNC(DH_check) RESOLVEFUNC(DH_check)
RESOLVEFUNC(BN_bin2bn) RESOLVEFUNC(BN_bin2bn)
#ifndef OPENSSL_NO_EC #ifndef OPENSSL_NO_EC
RESOLVEFUNC(EC_get_builtin_curves) RESOLVEFUNC(EC_get_builtin_curves)
#endif // OPENSSL_NO_EC #endif // OPENSSL_NO_EC
RESOLVEFUNC(PKCS12_parse) RESOLVEFUNC(PKCS12_parse)
RESOLVEFUNC(d2i_PKCS12_bio) RESOLVEFUNC(d2i_PKCS12_bio)
RESOLVEFUNC(PKCS12_free) RESOLVEFUNC(PKCS12_free)
return true;
}();
symbolsResolved.storeRelease(true); return symbolsResolved;
return true;
} }
#endif // QT_CONFIG(library) #endif // QT_CONFIG(library)