Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qffmpegopensslsymbols.cpp
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include <QtCore/qlibrary.h>
5
7
8#include <QtCore/qglobal.h>
9#include <qstringliteral.h>
10
11#include <openssl/bio.h>
12#include <openssl/ssl.h>
13#include <openssl/bn.h>
14#include <openssl/err.h>
15#include <openssl/rand.h>
16
18
19using namespace Qt::StringLiterals;
20
21static Libs loadLibs()
22{
23 Libs libs(2);
24 libs[0] = std::make_unique<QLibrary>();
25 libs[1] = std::make_unique<QLibrary>();
26
27 const auto majorVersion = OPENSSL_VERSION_NUMBER >> 28;
28
29 auto tryLoad = [&](QString sslName, QString cryptoName, auto version) {
30 libs[0]->setFileNameAndVersion(sslName, version);
31 libs[1]->setFileNameAndVersion(cryptoName, version);
32 return LibSymbolsResolver::tryLoad(libs);
33 };
34
35// Due to binary compatibility issues between 1.x.x openssl version, let's try taking exact version
36#if defined(SHLIB_VERSION_NUMBER)
37 if (majorVersion <= 1 && tryLoad("ssl"_L1, "crypto"_L1, SHLIB_VERSION_NUMBER ""_L1))
38 return libs;
39#endif
40
41// openssl on Android has specific suffixes
42#if defined(Q_OS_ANDROID)
43 {
44 auto suffix = qEnvironmentVariable("ANDROID_OPENSSL_SUFFIX");
45 if (suffix.isEmpty())
46 suffix = QString("_"_L1) + QString::number(majorVersion);
47
48 if (tryLoad("ssl"_L1 + suffix, "crypto"_L1 + suffix, -1))
49 return libs;
50 }
51#endif
52
53 if (tryLoad("ssl"_L1, "crypto"_L1, majorVersion))
54 return libs;
55
56 return {};
57};
58
59Q_GLOBAL_STATIC(LibSymbolsResolver, resolver, "OpenSsl", 75, loadLibs);
60
62{
63 resolver()->resolve();
64}
65
67
69
70// BN functions
71
72DEFINE_FUNC(BN_value_one, 0);
73DEFINE_FUNC(BN_mod_word, 2);
74
75DEFINE_FUNC(BN_div_word, 2)
76DEFINE_FUNC(BN_mul_word, 2)
77DEFINE_FUNC(BN_add_word, 2)
78DEFINE_FUNC(BN_sub_word, 2)
79DEFINE_FUNC(BN_set_word, 2)
80DEFINE_FUNC(BN_new, 0)
81DEFINE_FUNC(BN_cmp, 2)
82
83DEFINE_FUNC(BN_free, 1);
84
85DEFINE_FUNC(BN_copy, 2);
86
87DEFINE_FUNC(BN_CTX_new, 0);
88
89DEFINE_FUNC(BN_CTX_free, 1);
90DEFINE_FUNC(BN_CTX_start, 1);
91
92DEFINE_FUNC(BN_CTX_get, 1);
93DEFINE_FUNC(BN_CTX_end, 1);
94
95DEFINE_FUNC(BN_rand, 4);
96DEFINE_FUNC(BN_mod_exp, 5);
97
98DEFINE_FUNC(BN_num_bits, 1);
99DEFINE_FUNC(BN_num_bits_word, 1);
100
101DEFINE_FUNC(BN_bn2hex, 1);
102DEFINE_FUNC(BN_bn2dec, 1);
103
104DEFINE_FUNC(BN_hex2bn, 2);
105DEFINE_FUNC(BN_dec2bn, 2);
106DEFINE_FUNC(BN_asc2bn, 2);
107
108DEFINE_FUNC(BN_bn2bin, 2);
109DEFINE_FUNC(BN_bin2bn, 3);
110
111// BIO-related functions
112
113DEFINE_FUNC(BIO_new, 1);
114DEFINE_FUNC(BIO_free, 1);
115
116DEFINE_FUNC(BIO_read, 3, -1);
117DEFINE_FUNC(BIO_write, 3, -1);
118DEFINE_FUNC(BIO_s_mem, 0);
119
120DEFINE_FUNC(BIO_set_data, 2);
121
122DEFINE_FUNC(BIO_get_data, 1);
123DEFINE_FUNC(BIO_set_init, 2);
124
125DEFINE_FUNC(BIO_set_flags, 2);
126DEFINE_FUNC(BIO_test_flags, 2);
127DEFINE_FUNC(BIO_clear_flags, 2);
128
129DEFINE_FUNC(BIO_meth_new, 2);
130DEFINE_FUNC(BIO_meth_free, 1);
131
132DEFINE_FUNC(BIO_meth_set_write, 2);
133DEFINE_FUNC(BIO_meth_set_read, 2);
134DEFINE_FUNC(BIO_meth_set_puts, 2);
135DEFINE_FUNC(BIO_meth_set_gets, 2);
136DEFINE_FUNC(BIO_meth_set_ctrl, 2);
137DEFINE_FUNC(BIO_meth_set_create, 2);
138DEFINE_FUNC(BIO_meth_set_destroy, 2);
139DEFINE_FUNC(BIO_meth_set_callback_ctrl, 2);
140
141// SSL functions
142
143DEFINE_FUNC(SSL_CTX_new, 1);
144DEFINE_FUNC(SSL_CTX_up_ref, 1);
145DEFINE_FUNC(SSL_CTX_free, 1);
146
147DEFINE_FUNC(SSL_new, 1);
148DEFINE_FUNC(SSL_up_ref, 1);
149DEFINE_FUNC(SSL_free, 1);
150
151DEFINE_FUNC(SSL_accept, 1);
152DEFINE_FUNC(SSL_stateless, 1);
153DEFINE_FUNC(SSL_connect, 1);
154DEFINE_FUNC(SSL_read, 3, -1);
155DEFINE_FUNC(SSL_peek, 3);
156DEFINE_FUNC(SSL_write, 3, -1);
157DEFINE_FUNC(SSL_ctrl, 4);
158DEFINE_FUNC(SSL_shutdown, 1);
159DEFINE_FUNC(SSL_set_bio, 3);
160
161// options are unsigned long in openssl 1.1.1, and uint64 in 3.x.x
162DEFINE_FUNC(SSL_CTX_set_options, 2);
163
164DEFINE_FUNC(SSL_get_error, 2);
165DEFINE_FUNC(SSL_CTX_load_verify_locations, 3, -1);
166
167DEFINE_FUNC(SSL_CTX_set_verify, 3);
168DEFINE_FUNC(SSL_CTX_use_PrivateKey, 2);
169
170DEFINE_FUNC(SSL_CTX_use_PrivateKey_file, 3);
171DEFINE_FUNC(SSL_CTX_use_certificate_chain_file, 2);
172
173DEFINE_FUNC(ERR_get_error, 0);
174
175static char ErrorString[] = "Ssl not found";
176DEFINE_FUNC(ERR_error_string, 2, ErrorString);
177
178// TLS functions
179
180DEFINE_FUNC(TLS_client_method, 0);
181DEFINE_FUNC(TLS_server_method, 0);
182
183// RAND functions
184
185DEFINE_FUNC(RAND_bytes, 2);
static bool tryLoad(const Libs &libs)
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:8084
Combined button and popup list for selecting options.
static char ErrorString[]
static Libs loadLibs()
void resolveOpenSsl()
#define DEFINE_FUNC(F, ArgsCount,...)
std::vector< std::unique_ptr< QLibrary > > Libs
#define Q_GLOBAL_STATIC(TYPE, NAME,...)
QString qEnvironmentVariable(const char *varName, const QString &defaultValue)