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
qffmpegsymbols-ssl.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 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 <QtMultimedia/private/qsymbolsresolveutils_p.h>
5
6#include <qstringliteral.h>
7
8#include <openssl/bio.h>
9#include <openssl/ssl.h>
10#include <openssl/bn.h>
11#include <openssl/err.h>
12#include <openssl/rand.h>
13
14using namespace Qt::StringLiterals;
15
16[[maybe_unused]] static constexpr auto SHLIB_VERSION =
17#if defined(OPENSSL_SHLIB_VERSION)
18 OPENSSL_SHLIB_VERSION;
19#elif defined(SHLIB_VERSION_NUMBER)
20 SHLIB_VERSION_NUMBER;
21#endif
22
23
24#if !defined(Q_OS_ANDROID)
25CHECK_VERSIONS("ssl", SSL_NEEDED_SOVERSION, SHLIB_VERSION);
26#endif
27
28static std::unique_ptr<QLibrary> loadLib()
29{
30 auto lib = std::make_unique<QLibrary>();
31
32 auto tryLoad = [&](QString sslName, auto version) {
33 lib->setFileNameAndVersion(sslName, version);
34 return lib->load();
35 };
36
37// openssl on Android has specific suffixes
38#if defined(Q_OS_ANDROID)
39 {
40 auto suffix = qEnvironmentVariable("ANDROID_OPENSSL_SUFFIX");
41 if (suffix.isEmpty()) {
42#if (OPENSSL_VERSION_NUMBER >> 28) < 3 // major version < 3
43 suffix = "_1_1"_L1;
44#elif OPENSSL_VERSION_MAJOR == 3
45 suffix = "_3"_L1;
46#else
47 static_assert(false, "Unexpected openssl version");
48#endif
49 }
50
51 if (tryLoad("ssl"_L1 + suffix, -1))
52 return lib;
53 }
54#endif
55
56 if (tryLoad("ssl"_L1, SSL_NEEDED_SOVERSION ""_L1))
57 return lib;
58
59 return {};
60};
61
62
64
65// BN functions
66
67INIT_FUNC(BN_value_one);
68INIT_FUNC(BN_mod_word);
69
70INIT_FUNC(BN_div_word)
71INIT_FUNC(BN_mul_word)
72INIT_FUNC(BN_add_word)
73INIT_FUNC(BN_sub_word)
74INIT_FUNC(BN_set_word)
75INIT_FUNC(BN_new)
76INIT_FUNC(BN_cmp)
77
78INIT_FUNC(BN_free);
79
80INIT_FUNC(BN_copy);
81
82INIT_FUNC(BN_CTX_new);
83
84INIT_FUNC(BN_CTX_free);
85INIT_FUNC(BN_CTX_start);
86
87INIT_FUNC(BN_CTX_get);
88INIT_FUNC(BN_CTX_end);
89
90INIT_FUNC(BN_rand);
91INIT_FUNC(BN_mod_exp);
92
93INIT_FUNC(BN_num_bits);
94INIT_FUNC(BN_num_bits_word);
95
96INIT_FUNC(BN_bn2hex);
97INIT_FUNC(BN_bn2dec);
98
99INIT_FUNC(BN_hex2bn);
100INIT_FUNC(BN_dec2bn);
101INIT_FUNC(BN_asc2bn);
102
103INIT_FUNC(BN_bn2bin);
104INIT_FUNC(BN_bin2bn);
105
106// BIO-related functions
107
108INIT_FUNC(BIO_new);
109INIT_FUNC(BIO_free);
110
111INIT_FUNC(BIO_read);
112INIT_FUNC(BIO_write);
113INIT_FUNC(BIO_s_mem);
114
115INIT_FUNC(BIO_set_data);
116
117INIT_FUNC(BIO_get_data);
118INIT_FUNC(BIO_set_init);
119
120INIT_FUNC(BIO_set_flags);
121INIT_FUNC(BIO_test_flags);
122INIT_FUNC(BIO_clear_flags);
123
124INIT_FUNC(BIO_meth_new);
125INIT_FUNC(BIO_meth_free);
126
127INIT_FUNC(BIO_meth_set_write);
128INIT_FUNC(BIO_meth_set_read);
129INIT_FUNC(BIO_meth_set_puts);
130INIT_FUNC(BIO_meth_set_gets);
131INIT_FUNC(BIO_meth_set_ctrl);
132INIT_FUNC(BIO_meth_set_create);
133INIT_FUNC(BIO_meth_set_destroy);
134INIT_FUNC(BIO_meth_set_callback_ctrl);
135
136// SSL functions
137
138INIT_FUNC(SSL_CTX_new);
139INIT_FUNC(SSL_CTX_up_ref);
140INIT_FUNC(SSL_CTX_free);
141
142INIT_FUNC(SSL_new);
143INIT_FUNC(SSL_up_ref);
144INIT_FUNC(SSL_free);
145
146INIT_FUNC(SSL_accept);
147INIT_FUNC(SSL_stateless);
148INIT_FUNC(SSL_connect);
149INIT_FUNC(SSL_read);
150INIT_FUNC(SSL_peek);
151INIT_FUNC(SSL_write);
152INIT_FUNC(SSL_ctrl);
153INIT_FUNC(SSL_shutdown);
154INIT_FUNC(SSL_set_bio);
155
156// options are unsigned long in openssl 1.1.1, and uint64 in 3.x.x
157INIT_FUNC(SSL_CTX_set_options);
158
159INIT_FUNC(SSL_get_error);
160INIT_FUNC(SSL_CTX_load_verify_locations);
161
162INIT_FUNC(SSL_CTX_set_verify);
163INIT_FUNC(SSL_CTX_use_PrivateKey);
164
165INIT_FUNC(SSL_CTX_use_PrivateKey_file);
166INIT_FUNC(SSL_CTX_use_certificate_chain_file);
167
168INIT_FUNC(ERR_get_error);
169
170INIT_FUNC(ERR_error_string);
171
172// TLS functions
173
174INIT_FUNC(TLS_client_method);
175INIT_FUNC(TLS_server_method);
176
177// RAND functions
178
179INIT_FUNC(RAND_bytes);
180
182
184
185// BN functions
186
187DEFINE_FUNC(BN_value_one, 0);
188DEFINE_FUNC(BN_mod_word, 2);
189
190DEFINE_FUNC(BN_div_word, 2)
191DEFINE_FUNC(BN_mul_word, 2)
192DEFINE_FUNC(BN_add_word, 2)
193DEFINE_FUNC(BN_sub_word, 2)
194DEFINE_FUNC(BN_set_word, 2)
195DEFINE_FUNC(BN_new, 0)
196DEFINE_FUNC(BN_cmp, 2)
197
198DEFINE_FUNC(BN_free, 1);
199
200DEFINE_FUNC(BN_copy, 2);
201
202DEFINE_FUNC(BN_CTX_new, 0);
203
204DEFINE_FUNC(BN_CTX_free, 1);
205DEFINE_FUNC(BN_CTX_start, 1);
206
207DEFINE_FUNC(BN_CTX_get, 1);
208DEFINE_FUNC(BN_CTX_end, 1);
209
210DEFINE_FUNC(BN_rand, 4);
211DEFINE_FUNC(BN_mod_exp, 5);
212
213DEFINE_FUNC(BN_num_bits, 1);
214DEFINE_FUNC(BN_num_bits_word, 1);
215
216DEFINE_FUNC(BN_bn2hex, 1);
217DEFINE_FUNC(BN_bn2dec, 1);
218
219DEFINE_FUNC(BN_hex2bn, 2);
220DEFINE_FUNC(BN_dec2bn, 2);
221DEFINE_FUNC(BN_asc2bn, 2);
222
223DEFINE_FUNC(BN_bn2bin, 2);
224DEFINE_FUNC(BN_bin2bn, 3);
225
226// BIO-related functions
227
228DEFINE_FUNC(BIO_new, 1);
229DEFINE_FUNC(BIO_free, 1);
230
231DEFINE_FUNC(BIO_read, 3, -1);
232DEFINE_FUNC(BIO_write, 3, -1);
233DEFINE_FUNC(BIO_s_mem, 0);
234
235DEFINE_FUNC(BIO_set_data, 2);
236
237DEFINE_FUNC(BIO_get_data, 1);
238DEFINE_FUNC(BIO_set_init, 2);
239
240DEFINE_FUNC(BIO_set_flags, 2);
241DEFINE_FUNC(BIO_test_flags, 2);
242DEFINE_FUNC(BIO_clear_flags, 2);
243
244DEFINE_FUNC(BIO_meth_new, 2);
245DEFINE_FUNC(BIO_meth_free, 1);
246
247DEFINE_FUNC(BIO_meth_set_write, 2);
248DEFINE_FUNC(BIO_meth_set_read, 2);
249DEFINE_FUNC(BIO_meth_set_puts, 2);
250DEFINE_FUNC(BIO_meth_set_gets, 2);
251DEFINE_FUNC(BIO_meth_set_ctrl, 2);
252DEFINE_FUNC(BIO_meth_set_create, 2);
253DEFINE_FUNC(BIO_meth_set_destroy, 2);
254DEFINE_FUNC(BIO_meth_set_callback_ctrl, 2);
255
256// SSL functions
257
258DEFINE_FUNC(SSL_CTX_new, 1);
259DEFINE_FUNC(SSL_CTX_up_ref, 1);
260DEFINE_FUNC(SSL_CTX_free, 1);
261
262DEFINE_FUNC(SSL_new, 1);
263DEFINE_FUNC(SSL_up_ref, 1);
264DEFINE_FUNC(SSL_free, 1);
265
266DEFINE_FUNC(SSL_accept, 1);
267DEFINE_FUNC(SSL_stateless, 1);
268DEFINE_FUNC(SSL_connect, 1);
269DEFINE_FUNC(SSL_read, 3, -1);
270DEFINE_FUNC(SSL_peek, 3);
271DEFINE_FUNC(SSL_write, 3, -1);
272DEFINE_FUNC(SSL_ctrl, 4);
273DEFINE_FUNC(SSL_shutdown, 1);
274DEFINE_FUNC(SSL_set_bio, 3);
275
276// options are unsigned long in openssl 1.1.1, and uint64 in 3.x.x
277DEFINE_FUNC(SSL_CTX_set_options, 2);
278
279DEFINE_FUNC(SSL_get_error, 2);
280DEFINE_FUNC(SSL_CTX_load_verify_locations, 3, -1);
281
282DEFINE_FUNC(SSL_CTX_set_verify, 3);
283DEFINE_FUNC(SSL_CTX_use_PrivateKey, 2);
284
285DEFINE_FUNC(SSL_CTX_use_PrivateKey_file, 3);
286DEFINE_FUNC(SSL_CTX_use_certificate_chain_file, 2);
287
288DEFINE_FUNC(ERR_get_error, 0);
289
290static char ErrorString[] = "Ssl not found";
291DEFINE_FUNC(ERR_error_string, 2, ErrorString);
292
293// TLS functions
294
295DEFINE_FUNC(TLS_client_method, 0);
296DEFINE_FUNC(TLS_server_method, 0);
297
298// RAND functions
299
300DEFINE_FUNC(RAND_bytes, 2);
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
static char ErrorString[]
static std::unique_ptr< QLibrary > loadLib()
static constexpr auto SHLIB_VERSION
#define BEGIN_INIT_FUNCS(...)
#define DEFINE_FUNC(F, ArgsCount,...)
#define END_INIT_FUNCS()
#define INIT_FUNC(F)
#define CHECK_VERSIONS(Name, NeededSoversion, DetectedVersion)
QString qEnvironmentVariable(const char *varName, const QString &defaultValue)