Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
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
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
63BEGIN_INIT_FUNCS("ssl", loadLib)
64
65// BN functions
66
67INIT_FUNC(BN_value_one);
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
81
83
86
89
92
95
98
102
105
106// BIO-related functions
107
110
114
116
119
123
126
135
136// SSL functions
137
141
145
155
156// options are unsigned long in openssl 1.1.1, and uint64 in 3.x.x
158
161
164
167
169
171
172// TLS functions
173
176
177// RAND functions
178
180
181END_INIT_FUNCS()
182
183//////////// Define
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);
static constexpr auto SHLIB_VERSION
INIT_FUNC(BN_CTX_get)
INIT_FUNC(SSL_CTX_new)
INIT_FUNC(SSL_up_ref)
INIT_FUNC(BIO_meth_set_ctrl)
INIT_FUNC(SSL_write)
INIT_FUNC(RAND_bytes)
INIT_FUNC(BIO_meth_set_read)
INIT_FUNC(BN_bin2bn)
INIT_FUNC(BIO_test_flags)
INIT_FUNC(BN_CTX_new)
INIT_FUNC(BIO_meth_set_write)
INIT_FUNC(BIO_meth_set_gets)
INIT_FUNC(SSL_accept)
INIT_FUNC(TLS_server_method)
INIT_FUNC(SSL_peek)
INIT_FUNC(BIO_clear_flags)
INIT_FUNC(ERR_error_string)
INIT_FUNC(BN_hex2bn)
INIT_FUNC(BIO_meth_set_create)
INIT_FUNC(BN_bn2dec)
INIT_FUNC(SSL_shutdown)
static std::unique_ptr< QLibrary > loadLib()
INIT_FUNC(SSL_CTX_use_PrivateKey_file)
INIT_FUNC(SSL_read)
INIT_FUNC(TLS_client_method)
INIT_FUNC(BN_CTX_end)
static char ErrorString[]
INIT_FUNC(BIO_read)
INIT_FUNC(BN_rand)
INIT_FUNC(BIO_meth_new)
INIT_FUNC(BIO_meth_free)
INIT_FUNC(SSL_ctrl)
INIT_FUNC(BIO_meth_set_destroy)
INIT_FUNC(BIO_s_mem)
INIT_FUNC(BN_copy)
INIT_FUNC(BIO_meth_set_puts)
INIT_FUNC(SSL_CTX_free)
INIT_FUNC(BN_dec2bn)
INIT_FUNC(SSL_connect)
INIT_FUNC(SSL_get_error)
INIT_FUNC(SSL_free)
INIT_FUNC(BIO_write)
INIT_FUNC(SSL_CTX_load_verify_locations)
INIT_FUNC(BIO_set_flags)
INIT_FUNC(SSL_new)
INIT_FUNC(BN_CTX_start)
INIT_FUNC(BN_bn2hex)
INIT_FUNC(BIO_meth_set_callback_ctrl)
INIT_FUNC(BIO_set_init)
INIT_FUNC(SSL_set_bio)
INIT_FUNC(BN_asc2bn)
INIT_FUNC(BN_num_bits_word)
INIT_FUNC(BN_mod_word)
INIT_FUNC(SSL_CTX_set_verify)
INIT_FUNC(SSL_CTX_use_PrivateKey)
INIT_FUNC(BIO_set_data)
INIT_FUNC(BN_num_bits)
INIT_FUNC(SSL_stateless)
INIT_FUNC(SSL_CTX_use_certificate_chain_file)
INIT_FUNC(BN_bn2bin)
INIT_FUNC(BN_mod_exp)
INIT_FUNC(BIO_get_data)
INIT_FUNC(SSL_CTX_set_options)
INIT_FUNC(ERR_get_error)
INIT_FUNC(SSL_CTX_up_ref)
INIT_FUNC(BIO_new)
INIT_FUNC(BIO_free)
INIT_FUNC(BN_CTX_free)
CHECK_VERSIONS("va-drm", VA_DRM_NEEDED_SOVERSION, VA_MAJOR_VERSION+1)
DEFINE_FUNC(pw_deinit, 0)