5#include <QtMultimedia/private/qsymbolsresolveutils_p.h>
7#include <qstringliteral.h>
9#include <openssl/bio.h>
10#include <openssl/bn.h>
11#include <openssl/err.h>
12#include <openssl/evp.h>
13#include <openssl/rand.h>
14#include <openssl/ssl.h>
15#include <openssl/params.h>
16#include <openssl/pem.h>
17#include <openssl/x509.h>
19using namespace Qt::StringLiterals;
22#if defined(OPENSSL_SHLIB_VERSION
)
23 OPENSSL_SHLIB_VERSION;
24#elif defined(SHLIB_VERSION_NUMBER)
29#if !defined(Q_OS_ANDROID)
35 auto lib = std::make_unique<QLibrary>();
37 auto tryLoad = [&](QString sslName,
auto version) {
38 lib->setFileNameAndVersion(sslName, version);
43#if defined(Q_OS_ANDROID)
45 auto suffix = qEnvironmentVariable(
"ANDROID_OPENSSL_SUFFIX");
46 if (suffix.isEmpty()) {
47#if (OPENSSL_VERSION_NUMBER >> 28
) < 3
49#elif OPENSSL_VERSION_MAJOR == 3
52 static_assert(
false,
"Unexpected openssl version");
56 if (tryLoad(
"ssl"_L1 + suffix, -1))
61 if (tryLoad(
"ssl"_L1, SSL_NEEDED_SOVERSION
""_L1))
68BEGIN_INIT_FUNCS(
"ssl", loadLib)
72INIT_FUNC(ASN1_INTEGER_set);
186INIT_FUNC(SSL_CTX_use_certificate)
187INIT_FUNC(SSL_CTX_use_certificate_chain_file);
258DEFINE_FUNC(ASN1_INTEGER_set, 2);
266DEFINE_FUNC(BN_mul_word, 2)
267DEFINE_FUNC(BN_add_word, 2)
268DEFINE_FUNC(BN_sub_word, 2)
269DEFINE_FUNC(BN_set_word, 2)
270DEFINE_FUNC(BN_new, 0)
271DEFINE_FUNC(BN_cmp, 2)
273DEFINE_FUNC(BN_free, 1);
341extern "C" [[maybe_unused]] EXPORT_FUNC EVP_PKEY *EVP_PKEY_Q_keygen(
342 OSSL_LIB_CTX *libctx,
347 const auto f =
reinterpret_cast<
decltype(::EVP_PKEY_Q_keygen)*>(
348 SymbolsResolverImpl::instance().EVP_PKEY_Q_keygen);
353 va_start(args, type);
354 auto cleanup = qScopeGuard([&] {
358 if (strcmp(type,
"RSA") == 0) {
359 return f(libctx, propq, type, va_arg(args, size_t));
360 }
else if (strcmp(type,
"EC") == 0) {
361 return f(libctx, propq, type, va_arg(args,
char *));
364 return f(libctx, propq, type);
static constexpr auto SHLIB_VERSION
INIT_FUNC(EVP_PKEY_Q_keygen)
INIT_FUNC(BIO_meth_set_ctrl)
INIT_FUNC(SSL_set_connect_state)
INIT_FUNC(X509_set_version)
INIT_FUNC(BIO_meth_set_read)
INIT_FUNC(SSL_set_ex_data)
INIT_FUNC(BIO_test_flags)
INIT_FUNC(BIO_meth_set_write)
INIT_FUNC(BIO_meth_set_gets)
INIT_FUNC(BIO_new_mem_buf)
INIT_FUNC(TLS_server_method)
INIT_FUNC(BIO_clear_flags)
INIT_FUNC(ERR_error_string_n)
INIT_FUNC(ERR_error_string)
INIT_FUNC(DTLS_client_method)
INIT_FUNC(X509_NAME_free)
INIT_FUNC(SSL_set_accept_state)
INIT_FUNC(SSL_set_options)
INIT_FUNC(SSL_CTX_set_info_callback)
INIT_FUNC(PEM_read_bio_PrivateKey)
INIT_FUNC(BIO_meth_set_create)
static std::unique_ptr< QLibrary > loadLib()
INIT_FUNC(SSL_CTX_use_PrivateKey_file)
INIT_FUNC(TLS_client_method)
INIT_FUNC(X509_gmtime_adj)
INIT_FUNC(SSL_get_ex_data)
static char ErrorString[]
INIT_FUNC(ERR_clear_error)
INIT_FUNC(EVP_PKEY_generate)
INIT_FUNC(DTLS_server_method)
INIT_FUNC(EVP_PKEY_CTX_new_from_name)
INIT_FUNC(X509_getm_notAfter)
INIT_FUNC(SSL_is_init_finished)
INIT_FUNC(BIO_meth_set_destroy)
INIT_FUNC(X509_set_subject_name)
INIT_FUNC(X509_get_serialNumber)
INIT_FUNC(X509_set_pubkey)
INIT_FUNC(X509_NAME_add_entry_by_txt)
INIT_FUNC(EVP_PKEY_keygen)
INIT_FUNC(SSL_CTX_set_tlsext_use_srtp)
INIT_FUNC(BIO_meth_set_puts)
INIT_FUNC(X509_set_issuer_name)
INIT_FUNC(SSL_CTX_load_verify_locations)
INIT_FUNC(EVP_PKEY_keygen_init)
INIT_FUNC(PEM_write_bio_PrivateKey)
INIT_FUNC(SSL_CTX_set_default_verify_paths)
INIT_FUNC(PEM_read_bio_X509)
INIT_FUNC(BIO_meth_set_callback_ctrl)
INIT_FUNC(SSL_set_hostflags)
INIT_FUNC(BN_num_bits_word)
INIT_FUNC(SSL_export_keying_material)
INIT_FUNC(SSL_CTX_set_verify)
INIT_FUNC(SSL_CTX_use_PrivateKey)
INIT_FUNC(EVP_PKEY_CTX_set_params)
INIT_FUNC(SSL_do_handshake)
INIT_FUNC(X509_getm_notBefore)
INIT_FUNC(DTLS_get_data_mtu)
INIT_FUNC(SSL_state_string_long)
INIT_FUNC(SSL_CTX_set_options)
INIT_FUNC(SSL_CTX_up_ref)
INIT_FUNC(SSL_state_string)
INIT_FUNC(EVP_PKEY_CTX_free)
INIT_FUNC(PEM_write_bio_X509)
CHECK_VERSIONS("va-drm", VA_DRM_NEEDED_SOVERSION, VA_MAJOR_VERSION+1)
DEFINE_FUNC(pw_deinit, 0)