8
9
10
11
12
13
14
15
16
17
18
19
20
25#include <QtNetwork/private/qssl_p.h>
28# include <QtCore/private/qsystemlibrary_p.h>
29#elif QT_CONFIG(library)
30# include <QtCore/qlibrary.h>
32#include <QtCore/qdatetime.h>
34#include <QtCore/qdir.h>
35#include <QtCore/qdirlisting.h>
37#include <QtCore/private/qduplicatetracker_p.h>
38#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
42#include <QtCore/private/qcore_mac_p.h>
49using namespace Qt::StringLiterals;
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
90#ifndef QT_LINKED_OPENSSL
93void qsslSocketUnresolvedSymbolWarning(
const char *functionName)
95 qCWarning(lcTlsBackend,
"QSslSocket: cannot call unresolved function %s", functionName);
99void qsslSocketCannotResolveSymbolWarning(
const char *functionName)
101 qCWarning(lcTlsBackend,
"QSslSocket: cannot resolve %s", functionName);
109DEFINEFUNC(
const unsigned char *, ASN1_STRING_get0_data,
const ASN1_STRING *a, a,
return nullptr,
return)
110DEFINEFUNC2(
int, OPENSSL_init_ssl, uint64_t opts, opts,
const OPENSSL_INIT_SETTINGS *settings, settings,
return 0,
return)
111DEFINEFUNC2(
int, OPENSSL_init_crypto, uint64_t opts, opts,
const OPENSSL_INIT_SETTINGS *settings, settings,
return 0,
return)
112DEFINEFUNC(BIO *, BIO_new,
const BIO_METHOD *a, a,
return nullptr,
return)
114DEFINEFUNC2(
int, BN_is_word, BIGNUM *a, a, BN_ULONG w, w,
return 0,
return)
115DEFINEFUNC(
int, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX *c, c,
return 0,
return)
116DEFINEFUNC(
int, EVP_PKEY_up_ref, EVP_PKEY *a, a,
return 0,
return)
117DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new, EVP_PKEY *pkey, pkey, ENGINE *e, e,
return nullptr,
return)
118DEFINEFUNC(
int, EVP_PKEY_param_check, EVP_PKEY_CTX *ctx, ctx,
return 0,
return)
119DEFINEFUNC(
void, EVP_PKEY_CTX_free, EVP_PKEY_CTX *ctx, ctx,
return,
return)
120DEFINEFUNC(
int, OPENSSL_sk_num, OPENSSL_STACK *a, a,
return -1,
return)
125DEFINEFUNC2(
void *, OPENSSL_sk_value, OPENSSL_STACK *a, a,
int b, b,
return nullptr,
return)
126DEFINEFUNC(
int, SSL_session_reused, SSL *a, a,
return 0,
return)
127DEFINEFUNC2(qssloptions, SSL_CTX_set_options, SSL_CTX *ctx, ctx, qssloptions op, op,
return 0,
return)
128using info_callback =
void (*) (
const SSL *ssl,
int type,
int val);
129DEFINEFUNC2(
void, SSL_set_info_callback, SSL *ssl, ssl, info_callback cb, cb,
return,
return)
130DEFINEFUNC(
const char *, SSL_alert_type_string,
int value, value,
return nullptr,
return)
131DEFINEFUNC(
const char *, SSL_alert_desc_string_long,
int value, value,
return nullptr,
return)
132DEFINEFUNC(
int, SSL_CTX_get_security_level,
const SSL_CTX *ctx, ctx,
return -1,
return)
133DEFINEFUNC2(
void, SSL_CTX_set_security_level, SSL_CTX *ctx, ctx,
int level, level,
return,
return)
135DEFINEFUNC2(
int, SSL_CTX_set_ciphersuites, SSL_CTX *ctx, ctx,
const char *str, str,
return 0,
return)
137DEFINEFUNC2(
void, SSL_CTX_sess_set_new_cb, SSL_CTX *ctx, ctx, NewSessionCallback cb, cb,
return,
return)
138DEFINEFUNC(
int, SSL_SESSION_is_resumable,
const SSL_SESSION *s, s,
return 0,
return)
140DEFINEFUNC3(
size_t, SSL_get_client_random, SSL *a, a,
unsigned char *out, out, size_t outlen, outlen,
return 0,
return)
141DEFINEFUNC3(
size_t, SSL_SESSION_get_master_key,
const SSL_SESSION *ses, ses,
unsigned char *out, out, size_t outlen, outlen,
return 0,
return)
142DEFINEFUNC6(
int, CRYPTO_get_ex_new_index,
int class_index, class_index,
long argl, argl,
void *argp, argp, CRYPTO_EX_new *new_func, new_func, CRYPTO_EX_dup *dup_func, dup_func, CRYPTO_EX_free *free_func, free_func,
return -1,
return)
143DEFINEFUNC2(
unsigned long, SSL_set_options, SSL *ssl, ssl,
unsigned long op, op,
return 0,
return)
149DEFINEFUNC(ASN1_TIME *, X509_getm_notBefore, X509 *a, a,
return nullptr,
return)
150DEFINEFUNC(ASN1_TIME *, X509_getm_notAfter, X509 *a, a,
return nullptr,
return)
151DEFINEFUNC2(
void, ASN1_item_free, ASN1_VALUE *val, val,
const ASN1_ITEM *it, it,
return,
return)
152DEFINEFUNC(
void, X509V3_conf_free, CONF_VALUE *val, val,
return,
return)
153DEFINEFUNC(
long, X509_get_version, X509 *a, a,
return -1,
return)
154DEFINEFUNC(EVP_PKEY *, X509_get_pubkey, X509 *a, a,
return nullptr,
return)
155DEFINEFUNC2(
void, X509_STORE_set_verify_cb, X509_STORE *a, a, X509_STORE_CTX_verify_cb verify_cb, verify_cb,
return,
DUMMYARG)
156DEFINEFUNC3(
int, X509_STORE_set_ex_data, X509_STORE *a, a,
int idx, idx,
void *data, data,
return 0,
return)
157DEFINEFUNC2(
void *, X509_STORE_get_ex_data, X509_STORE *r, r,
int idx, idx,
return nullptr,
return)
158DEFINEFUNC(STACK_OF(X509) *, X509_STORE_CTX_get0_chain, X509_STORE_CTX *a, a,
return nullptr,
return)
159DEFINEFUNC3(
void, CRYPTO_free,
void *str, str,
const char *file, file,
int line, line,
return,
DUMMYARG)
160DEFINEFUNC3(
int, CRYPTO_memcmp,
const void * in_a, in_a,
const void * in_b, in_b, size_t len, len,
return 1,
return);
162DEFINEFUNC(
const char *, OpenSSL_version,
int a, a,
return nullptr,
return)
163DEFINEFUNC(
unsigned long, SSL_SESSION_get_ticket_lifetime_hint,
const SSL_SESSION *session, session,
return 0,
return)
166DEFINEFUNC2(
int, DTLSv1_listen, SSL *s, s, BIO_ADDR *c, c,
return -1,
return)
167DEFINEFUNC(BIO_ADDR *, BIO_ADDR_new, DUMMYARG, DUMMYARG,
return nullptr,
return)
168DEFINEFUNC(
void, BIO_ADDR_free, BIO_ADDR *ap, ap,
return, DUMMYARG)
169DEFINEFUNC2(BIO_METHOD *, BIO_meth_new,
int type, type,
const char *name, name,
return nullptr,
return)
170DEFINEFUNC(
void, BIO_meth_free, BIO_METHOD *biom, biom,
return, DUMMYARG)
171DEFINEFUNC2(
int, BIO_meth_set_write, BIO_METHOD *biom, biom, DgramWriteCallback write, write,
return 0,
return)
172DEFINEFUNC2(
int, BIO_meth_set_read, BIO_METHOD *biom, biom, DgramReadCallback read, read,
return 0,
return)
173DEFINEFUNC2(
int, BIO_meth_set_puts, BIO_METHOD *biom, biom, DgramPutsCallback puts, puts,
return 0,
return)
174DEFINEFUNC2(
int, BIO_meth_set_ctrl, BIO_METHOD *biom, biom, DgramCtrlCallback ctrl, ctrl,
return 0,
return)
175DEFINEFUNC2(
int, BIO_meth_set_create, BIO_METHOD *biom, biom, DgramCreateCallback crt, crt,
return 0,
return)
176DEFINEFUNC2(
int, BIO_meth_set_destroy, BIO_METHOD *biom, biom, DgramDestroyCallback dtr, dtr,
return 0,
return)
180DEFINEFUNC(
const OCSP_CERTID *, OCSP_SINGLERESP_get0_id,
const OCSP_SINGLERESP *x, x,
return nullptr,
return)
181DEFINEFUNC3(OCSP_RESPONSE *, d2i_OCSP_RESPONSE, OCSP_RESPONSE **a, a,
const unsigned char **in, in,
long len, len,
return nullptr,
return)
182DEFINEFUNC(
void, OCSP_RESPONSE_free, OCSP_RESPONSE *rs, rs,
return, DUMMYARG)
183DEFINEFUNC(OCSP_BASICRESP *, OCSP_response_get1_basic, OCSP_RESPONSE *resp, resp,
return nullptr,
return)
184DEFINEFUNC(
void, OCSP_BASICRESP_free, OCSP_BASICRESP *bs, bs,
return, DUMMYARG)
185DEFINEFUNC(
int, OCSP_response_status, OCSP_RESPONSE *resp, resp,
return OCSP_RESPONSE_STATUS_INTERNALERROR,
return)
186DEFINEFUNC4(
int, OCSP_basic_verify, OCSP_BASICRESP *bs, bs, STACK_OF(X509) *certs, certs, X509_STORE *st, st,
unsigned long flags, flags,
return -1,
return)
187DEFINEFUNC(
int, OCSP_resp_count, OCSP_BASICRESP *bs, bs,
return 0,
return)
188DEFINEFUNC2(OCSP_SINGLERESP *, OCSP_resp_get0, OCSP_BASICRESP *bs, bs,
int idx, idx,
return nullptr,
return)
189DEFINEFUNC5(
int, OCSP_single_get0_status, OCSP_SINGLERESP *single, single,
int *reason, reason, ASN1_GENERALIZEDTIME **revtime, revtime,
190 ASN1_GENERALIZEDTIME **thisupd, thisupd, ASN1_GENERALIZEDTIME **nextupd, nextupd,
return -1,
return)
191DEFINEFUNC4(
int, OCSP_check_validity, ASN1_GENERALIZEDTIME *thisupd, thisupd, ASN1_GENERALIZEDTIME *nextupd, nextupd,
long nsec, nsec,
long maxsec, maxsec,
return 0,
return)
192DEFINEFUNC3(OCSP_CERTID *, OCSP_cert_to_id,
const EVP_MD *dgst, dgst, X509 *subject, subject, X509 *issuer, issuer,
return nullptr,
return)
193DEFINEFUNC(
void, OCSP_CERTID_free, OCSP_CERTID *cid, cid,
return, DUMMYARG)
194DEFINEFUNC5(
int, OCSP_id_get0_info, ASN1_OCTET_STRING **piNameHash, piNameHash, ASN1_OBJECT **pmd, pmd,
195 ASN1_OCTET_STRING **piKeyHash, piKeyHash, ASN1_INTEGER **pserial, pserial, OCSP_CERTID *cid, cid,
197DEFINEFUNC2(OCSP_RESPONSE *, OCSP_response_create,
int status, status, OCSP_BASICRESP *bs, bs,
return nullptr,
return)
198DEFINEFUNC(
const STACK_OF(X509) *, OCSP_resp_get0_certs,
const OCSP_BASICRESP *bs, bs,
return nullptr,
return)
199DEFINEFUNC2(
int, OCSP_id_cmp, OCSP_CERTID *a, a, OCSP_CERTID *b, b,
return -1,
return)
200DEFINEFUNC7(OCSP_SINGLERESP *, OCSP_basic_add1_status, OCSP_BASICRESP *r, r, OCSP_CERTID *c, c,
int s, s,
201 int re, re, ASN1_TIME *rt, rt, ASN1_TIME *t, t, ASN1_TIME *n, n,
return nullptr,
return)
202DEFINEFUNC(OCSP_BASICRESP *, OCSP_BASICRESP_new, DUMMYARG, DUMMYARG,
return nullptr,
return)
203DEFINEFUNC2(
int, i2d_OCSP_RESPONSE, OCSP_RESPONSE *r, r,
unsigned char **ppout, ppout,
return 0,
return)
204DEFINEFUNC6(
int, OCSP_basic_sign, OCSP_BASICRESP *br, br, X509 *signer, signer, EVP_PKEY *key, key,
205 const EVP_MD *dg, dg, STACK_OF(X509) *cs, cs,
unsigned long flags, flags,
return 0,
return)
208DEFINEFUNC(
void, AUTHORITY_INFO_ACCESS_free, AUTHORITY_INFO_ACCESS *p, p,
return,
return)
210DEFINEFUNC(
void *, BIO_get_data, BIO *a, a,
return nullptr,
return)
212DEFINEFUNC(
int, BIO_get_shutdown, BIO *a, a,
return -1,
return)
215DEFINEFUNC(
long, ASN1_INTEGER_get, ASN1_INTEGER *a, a,
return 0,
return)
216DEFINEFUNC2(
int, ASN1_INTEGER_cmp,
const ASN1_INTEGER *a, a,
const ASN1_INTEGER *b, b,
return 1,
return)
217DEFINEFUNC(
int, ASN1_STRING_length, ASN1_STRING *a, a,
return 0,
return)
218DEFINEFUNC2(
int, ASN1_STRING_to_UTF8,
unsigned char **a, a, ASN1_STRING *b, b,
return 0,
return)
219DEFINEFUNC2(
int, ASN1_TIME_to_tm,
const ASN1_TIME *s, s,
struct tm *tm, tm,
return 0,
return)
220DEFINEFUNC4(
long, BIO_ctrl, BIO *a, a,
int b, b,
long c, c,
void *d, d,
return -1,
return)
221DEFINEFUNC(
int, BIO_free, BIO *a, a,
return 0,
return)
222DEFINEFUNC2(BIO *, BIO_new_mem_buf,
void *a, a,
int b, b,
return nullptr,
return)
223DEFINEFUNC3(
int, BIO_read, BIO *a, a,
void *b, b,
int c, c,
return -1,
return)
225DEFINEFUNC3(
int, BIO_write, BIO *a, a,
const void *b, b,
int c, c,
return -1,
return)
226DEFINEFUNC(
int, BN_num_bits,
const BIGNUM *a, a,
return 0,
return)
227DEFINEFUNC2(BN_ULONG, BN_mod_word,
const BIGNUM *a, a, BN_ULONG w, w,
return static_cast<BN_ULONG>(-1),
return)
228DEFINEFUNC3(X509 *, d2i_X509, X509 **a, a,
const unsigned char **b, b,
long c, c,
return nullptr,
return)
229DEFINEFUNC2(
char *, ERR_error_string,
unsigned long a, a,
char *b, b,
return nullptr,
return)
230DEFINEFUNC3(
void, ERR_error_string_n,
unsigned long e, e,
char *b, b, size_t len, len,
return,
DUMMYARG)
232DEFINEFUNC(EVP_CIPHER_CTX *, EVP_CIPHER_CTX_new,
void,
DUMMYARG,
return nullptr,
return)
234DEFINEFUNC4(
int, EVP_CIPHER_CTX_ctrl, EVP_CIPHER_CTX *ctx, ctx,
int type, type,
int arg, arg,
void *ptr, ptr,
return 0,
return)
235DEFINEFUNC2(
int, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX *ctx, ctx,
int keylen, keylen,
return 0,
return)
236DEFINEFUNC5(
int, EVP_CipherInit, EVP_CIPHER_CTX *ctx, ctx,
const EVP_CIPHER *type, type,
const unsigned char *key, key,
const unsigned char *iv, iv,
int enc, enc,
return 0,
return)
237DEFINEFUNC6(
int, EVP_CipherInit_ex, EVP_CIPHER_CTX *ctx, ctx,
const EVP_CIPHER *cipher, cipher, ENGINE *impl, impl,
const unsigned char *key, key,
const unsigned char *iv, iv,
int enc, enc,
return 0,
return)
238DEFINEFUNC5(
int, EVP_CipherUpdate, EVP_CIPHER_CTX *ctx, ctx,
unsigned char *out, out,
int *outl, outl,
const unsigned char *in, in,
int inl, inl,
return 0,
return)
239DEFINEFUNC3(
int, EVP_CipherFinal, EVP_CIPHER_CTX *ctx, ctx,
unsigned char *out, out,
int *outl, outl,
return 0,
return)
240DEFINEFUNC(
const EVP_MD *, EVP_get_digestbyname,
const char *name, name,
return nullptr,
return)
241#ifndef OPENSSL_NO_DES
245#ifndef OPENSSL_NO_RC2
248#ifndef OPENSSL_NO_AES
256DEFINEFUNC(
int, EVP_PKEY_type,
int a, a,
return NID_undef,
return)
257DEFINEFUNC2(
int, i2d_X509, X509 *a, a,
unsigned char **b, b,
return -1,
return)
258DEFINEFUNC(
const char *, OBJ_nid2sn,
int a, a,
return nullptr,
return)
259DEFINEFUNC(
const char *, OBJ_nid2ln,
int a, a,
return nullptr,
return)
260DEFINEFUNC(
int, OBJ_sn2nid,
const char *s, s,
return 0,
return)
261DEFINEFUNC(
int, OBJ_ln2nid,
const char *s, s,
return 0,
return)
262DEFINEFUNC3(
int, i2t_ASN1_OBJECT,
char *a, a,
int b, b, ASN1_OBJECT *c, c,
return -1,
return)
263DEFINEFUNC4(
int, OBJ_obj2txt,
char *a, a,
int b, b, ASN1_OBJECT *c, c,
int d, d,
return -1,
return)
264DEFINEFUNC(
int, OBJ_obj2nid,
const ASN1_OBJECT *a, a,
return NID_undef,
return)
265DEFINEFUNC4(EVP_PKEY *, PEM_read_bio_PrivateKey, BIO *a, a, EVP_PKEY **b, b, pem_password_cb *c, c,
void *d, d,
return nullptr,
return)
267DEFINEFUNC7(
int, PEM_write_bio_PrivateKey, BIO *a, a, EVP_PKEY *b, b,
const EVP_CIPHER *c, c,
unsigned char *d, d,
int e, e, pem_password_cb *f, f,
void *g, g,
return 0,
return)
268DEFINEFUNC7(
int, PEM_write_bio_PrivateKey_traditional, BIO *a, a, EVP_PKEY *b, b,
const EVP_CIPHER *c, c,
unsigned char *d, d,
int e, e, pem_password_cb *f, f,
void *g, g,
return 0,
return)
269DEFINEFUNC4(EVP_PKEY *, PEM_read_bio_PUBKEY, BIO *a, a, EVP_PKEY **b, b, pem_password_cb *c, c,
void *d, d,
return nullptr,
return)
270DEFINEFUNC2(
int, PEM_write_bio_PUBKEY, BIO *a, a, EVP_PKEY *b, b,
return 0,
return)
273DEFINEFUNC2(
int, RAND_bytes,
unsigned char *b, b,
int n, n,
return 0,
return)
274DEFINEFUNC(
int, SSL_accept, SSL *a, a,
return -1,
return)
275DEFINEFUNC(
int, SSL_clear, SSL *a, a,
return -1,
return)
276DEFINEFUNC3(
char *, SSL_CIPHER_description,
const SSL_CIPHER *a, a,
char *b, b,
int c, c,
return nullptr,
return)
277DEFINEFUNC2(
int, SSL_CIPHER_get_bits,
const SSL_CIPHER *a, a,
int *b, b,
return 0,
return)
278DEFINEFUNC(BIO *, SSL_get_rbio,
const SSL *s, s,
return nullptr,
return)
279DEFINEFUNC(
int, SSL_connect, SSL *a, a,
return -1,
return)
280DEFINEFUNC(
int, SSL_CTX_check_private_key,
const SSL_CTX *a, a,
return -1,
return)
281DEFINEFUNC4(
long, SSL_CTX_ctrl, SSL_CTX *a, a,
int b, b,
long c, c,
void *d, d,
return -1,
return)
283DEFINEFUNC(SSL_CTX *, SSL_CTX_new,
const SSL_METHOD *a, a,
return nullptr,
return)
284DEFINEFUNC2(
int, SSL_CTX_set_cipher_list, SSL_CTX *a, a,
const char *b, b,
return -1,
return)
286DEFINEFUNC(
int, SSL_CTX_set_default_verify_paths, SSL_CTX *a, a,
return -1,
return)
287DEFINEFUNC3(
void, SSL_CTX_set_verify, SSL_CTX *a, a,
int b, b,
int (*c)(
int, X509_STORE_CTX *), c,
return,
DUMMYARG)
289DEFINEFUNC2(
int, SSL_CTX_use_certificate, SSL_CTX *a, a, X509 *b, b,
return -1,
return)
290DEFINEFUNC3(
int, SSL_CTX_use_certificate_file, SSL_CTX *a, a,
const char *b, b,
int c, c,
return -1,
return)
291DEFINEFUNC2(
int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b,
return -1,
return)
292DEFINEFUNC3(
int, SSL_CTX_use_PrivateKey_file, SSL_CTX *a, a,
const char *b, b,
int c, c,
return -1,
return)
293DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store,
const SSL_CTX *a, a,
return nullptr,
return)
295DEFINEFUNC(
void, SSL_CONF_CTX_free, SSL_CONF_CTX *a, a,
return ,
return);
296DEFINEFUNC2(
void, SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX *a, a, SSL_CTX *b, b,
return,
return);
297DEFINEFUNC2(
unsigned int, SSL_CONF_CTX_set_flags, SSL_CONF_CTX *a, a,
unsigned int b, b,
return 0,
return);
298DEFINEFUNC(
int, SSL_CONF_CTX_finish, SSL_CONF_CTX *a, a,
return 0,
return);
299DEFINEFUNC3(
int, SSL_CONF_cmd, SSL_CONF_CTX *a, a,
const char *b, b,
const char *c, c,
return 0,
return);
301DEFINEFUNC(STACK_OF(SSL_CIPHER) *, SSL_get_ciphers,
const SSL *a, a,
return nullptr,
return)
302DEFINEFUNC(
const SSL_CIPHER *, SSL_get_current_cipher, SSL *a, a,
return nullptr,
return)
303DEFINEFUNC(
int, SSL_version,
const SSL *a, a,
return 0,
return)
304DEFINEFUNC2(
int, SSL_get_error, SSL *a, a,
int b, b,
return -1,
return)
305DEFINEFUNC(STACK_OF(X509) *, SSL_get_peer_cert_chain, SSL *a, a,
return nullptr,
return)
307#if defined(OPENSSL_VERSION_MAJOR
) && OPENSSL_VERSION_MAJOR
>= 3
308DEFINEFUNC(X509 *, SSL_get1_peer_certificate, SSL *a, a,
return nullptr,
return)
309DEFINEFUNC(
int, EVP_PKEY_get_bits,
const EVP_PKEY *pkey, pkey,
return -1,
return)
310DEFINEFUNC(
int, EVP_PKEY_get_security_bits,
const EVP_PKEY *pkey, pkey,
return -1,
return)
311DEFINEFUNC(
int, EVP_PKEY_get_base_id,
const EVP_PKEY *pkey, pkey,
return -1,
return)
312DEFINEFUNC(
const char *, EVP_PKEY_get0_type_name,
const EVP_PKEY *pkey, pkey,
return nullptr,
return)
314DEFINEFUNC(X509 *, SSL_get_peer_certificate, SSL *a, a,
return nullptr,
return)
315DEFINEFUNC(
int, EVP_PKEY_base_id, EVP_PKEY *a, a,
return NID_undef,
return)
318DEFINEFUNC(
long, SSL_get_verify_result,
const SSL *a, a,
return -1,
return)
319DEFINEFUNC(SSL *, SSL_new, SSL_CTX *a, a,
return nullptr,
return)
320DEFINEFUNC(SSL_CTX *, SSL_get_SSL_CTX, SSL *a, a,
return nullptr,
return)
321DEFINEFUNC4(
long, SSL_ctrl, SSL *a, a,
int cmd, cmd,
long larg, larg,
void *parg, parg,
return -1,
return)
322DEFINEFUNC3(
int, SSL_read, SSL *a, a,
void *b, b,
int c, c,
return -1,
return)
326DEFINEFUNC(
int, SSL_shutdown, SSL *a, a,
return -1,
return)
327DEFINEFUNC(
int, SSL_in_init,
const SSL *a, a,
return 0,
return)
328DEFINEFUNC(
int, SSL_get_shutdown,
const SSL *ssl, ssl,
return 0,
return)
329DEFINEFUNC2(
int, SSL_set_session, SSL* to, to, SSL_SESSION *session, session,
return -1,
return)
331DEFINEFUNC(SSL_SESSION*, SSL_get1_session, SSL *ssl, ssl,
return nullptr,
return)
332DEFINEFUNC(SSL_SESSION*, SSL_get_session,
const SSL *ssl, ssl,
return nullptr,
return)
333DEFINEFUNC3(
int, SSL_set_ex_data, SSL *ssl, ssl,
int idx, idx,
void *arg, arg,
return 0,
return)
334DEFINEFUNC2(
void *, SSL_get_ex_data,
const SSL *ssl, ssl,
int idx, idx,
return nullptr,
return)
336#ifndef OPENSSL_NO_PSK
339DEFINEFUNC2(
int, SSL_CTX_use_psk_identity_hint, SSL_CTX* ctx, ctx,
const char *hint, hint,
return 0,
return)
342DEFINEFUNC3(
int, SSL_write, SSL *a, a,
const void *b, b,
int c, c,
return -1,
return)
343DEFINEFUNC2(
int, X509_cmp, X509 *a, a, X509 *b, b,
return -1,
return)
344DEFINEFUNC4(
int, X509_digest,
const X509 *x509, x509,
const EVP_MD *type, type,
unsigned char *md, md,
unsigned int *len, len,
return -1,
return)
345DEFINEFUNC(X509 *, X509_dup, X509 *a, a,
return nullptr,
return)
347DEFINEFUNC(ASN1_OBJECT *, X509_EXTENSION_get_object, X509_EXTENSION *a, a,
return nullptr,
return)
350DEFINEFUNC2(ASN1_TIME *, X509_gmtime_adj, ASN1_TIME *s, s,
long adj, adj,
return nullptr,
return)
352DEFINEFUNC2(X509_EXTENSION *, X509_get_ext, X509 *a, a,
int b, b,
return nullptr,
return)
353DEFINEFUNC(
int, X509_get_ext_count, X509 *a, a,
return 0,
return)
354DEFINEFUNC4(
void *, X509_get_ext_d2i, X509 *a, a,
int b, b,
int *c, c,
int *d, d,
return nullptr,
return)
355DEFINEFUNC(
const X509V3_EXT_METHOD *, X509V3_EXT_get, X509_EXTENSION *a, a,
return nullptr,
return)
356DEFINEFUNC(
void *, X509V3_EXT_d2i, X509_EXTENSION *a, a,
return nullptr,
return)
357DEFINEFUNC(
int, X509_EXTENSION_get_critical, X509_EXTENSION *a, a,
return 0,
return)
358DEFINEFUNC(ASN1_OCTET_STRING *, X509_EXTENSION_get_data, X509_EXTENSION *a, a,
return nullptr,
return)
362DEFINEFUNC2(
int, ASN1_STRING_print, BIO *a, a,
const ASN1_STRING *b, b,
return 0,
return)
363DEFINEFUNC2(
int, X509_check_issued, X509 *a, a, X509 *b, b,
return -1,
return)
364DEFINEFUNC(X509_NAME *, X509_get_issuer_name, X509 *a, a,
return nullptr,
return)
365DEFINEFUNC(X509_NAME *, X509_get_subject_name, X509 *a, a,
return nullptr,
return)
366DEFINEFUNC(ASN1_INTEGER *, X509_get_serialNumber, X509 *a, a,
return nullptr,
return)
367DEFINEFUNC(
int, X509_verify_cert, X509_STORE_CTX *a, a,
return -1,
return)
368DEFINEFUNC(
int, X509_NAME_entry_count, X509_NAME *a, a,
return 0,
return)
369DEFINEFUNC2(X509_NAME_ENTRY *, X509_NAME_get_entry, X509_NAME *a, a,
int b, b,
return nullptr,
return)
370DEFINEFUNC(ASN1_STRING *, X509_NAME_ENTRY_get_data, X509_NAME_ENTRY *a, a,
return nullptr,
return)
371DEFINEFUNC(ASN1_OBJECT *, X509_NAME_ENTRY_get_object, X509_NAME_ENTRY *a, a,
return nullptr,
return)
372DEFINEFUNC(EVP_PKEY *, X509_PUBKEY_get, X509_PUBKEY *a, a,
return nullptr,
return)
375DEFINEFUNC2(
int, X509_STORE_add_cert, X509_STORE *a, a, X509 *b, b,
return 0,
return)
377DEFINEFUNC4(
int, X509_STORE_CTX_init, X509_STORE_CTX *a, a, X509_STORE *b, b, X509 *c, c, STACK_OF(X509) *d, d,
return -1,
return)
378DEFINEFUNC2(
int, X509_STORE_CTX_set_purpose, X509_STORE_CTX *a, a,
int b, b,
return -1,
return)
379DEFINEFUNC(
int, X509_STORE_CTX_get_error, X509_STORE_CTX *a, a,
return -1,
return)
380DEFINEFUNC(
int, X509_STORE_CTX_get_error_depth, X509_STORE_CTX *a, a,
return -1,
return)
381DEFINEFUNC(X509 *, X509_STORE_CTX_get_current_cert, X509_STORE_CTX *a, a,
return nullptr,
return)
382DEFINEFUNC(X509_STORE *, X509_STORE_CTX_get0_store, X509_STORE_CTX *ctx, ctx,
return nullptr,
return)
384DEFINEFUNC2(
void *, X509_STORE_CTX_get_ex_data, X509_STORE_CTX *ctx, ctx,
int idx, idx,
return nullptr,
return)
387#if OPENSSL_VERSION_MAJOR
< 3
388DEFINEFUNC3(
int, SSL_CTX_load_verify_locations, SSL_CTX *ctx, ctx,
const char *CAfile, CAfile,
const char *CApath, CApath,
return 0,
return)
390DEFINEFUNC2(
int, SSL_CTX_load_verify_dir, SSL_CTX *ctx, ctx,
const char *CApath, CApath,
return 0,
return)
393DEFINEFUNC2(
int, i2d_SSL_SESSION, SSL_SESSION *in, in,
unsigned char **pp, pp,
return 0,
return)
394DEFINEFUNC3(SSL_SESSION *, d2i_SSL_SESSION, SSL_SESSION **a, a,
const unsigned char **pp, pp,
long length, length,
return nullptr,
return)
396#ifndef OPENSSL_NO_NEXTPROTONEG
397DEFINEFUNC6(
int, SSL_select_next_proto,
unsigned char **out, out,
unsigned char *outlen, outlen,
398 const unsigned char *in, in,
unsigned int inlen, inlen,
399 const unsigned char *client, client,
unsigned int client_len, client_len,
402 int (*
cb) (SSL *ssl,
unsigned char **out,
403 unsigned char *outlen,
404 const unsigned char *in,
405 unsigned int inlen,
void *arg),
cb,
408 const unsigned char **data, data,
unsigned *len, len,
return,
DUMMYARG)
412 int (*cb) (SSL *ssl,
const unsigned char **out,
413 unsigned char *outlen,
414 const unsigned char *in,
415 unsigned int inlen,
void *arg), cb,
423DEFINEFUNC2(
void, SSL_CTX_set_cookie_generate_cb, SSL_CTX *ctx, ctx, CookieGenerateCallback cb, cb,
return, DUMMYARG)
424DEFINEFUNC2(
void, SSL_CTX_set_cookie_verify_cb, SSL_CTX *ctx, ctx, CookieVerifyCallback cb, cb,
return, DUMMYARG)
425DEFINEFUNC(
const SSL_METHOD *, DTLS_server_method, DUMMYARG, DUMMYARG,
return nullptr,
return)
426DEFINEFUNC(
const SSL_METHOD *, DTLS_client_method, DUMMYARG, DUMMYARG,
return nullptr,
return)
430DEFINEFUNC2(
void *, BIO_get_ex_data, BIO *b, b,
int idx, idx,
return nullptr,
return)
431DEFINEFUNC3(
int, BIO_set_ex_data, BIO *b, b,
int idx, idx,
void *data, data,
return -1,
return)
433DEFINEFUNC3(
void *, CRYPTO_malloc, size_t num, num,
const char *file, file,
int line, line,
return nullptr,
return)
435#ifndef OPENSSL_NO_DEPRECATED_3_0
438DEFINEFUNC2(
int, DH_check, DH *dh, dh,
int *codes, codes,
return 0,
return)
439DEFINEFUNC4(
void, DH_get0_pqg,
const DH *dh, dh,
const BIGNUM **p, p,
const BIGNUM **q, q,
const BIGNUM **g, g,
return,
DUMMYARG)
441DEFINEFUNC3(DH *, d2i_DHparams, DH**a, a,
const unsigned char **pp, pp,
long length, length,
return nullptr,
return)
442DEFINEFUNC2(
int, i2d_DHparams, DH *a, a,
unsigned char **p, p,
return -1,
return)
444DEFINEFUNC4(DH *, PEM_read_bio_DHparams, BIO *a, a, DH **b, b, pem_password_cb *c, c,
void *d, d,
return nullptr,
return)
446DEFINEFUNC3(BIGNUM *, BN_bin2bn,
const unsigned char *s, s,
int len, len, BIGNUM *ret, ret,
return nullptr,
return)
450DEFINEFUNC2(
size_t, EC_get_builtin_curves, EC_builtin_curve * r, r, size_t nitems, nitems,
return 0,
return)
451DEFINEFUNC(
int, EC_curve_nist2nid,
const char *name, name,
return 0,
return)
454DEFINEFUNC5(
int, PKCS12_parse, PKCS12 *p12, p12,
const char *pass, pass, EVP_PKEY **pkey, pkey,
455 X509 **cert, cert, STACK_OF(X509) **ca, ca,
return 1,
return);
456DEFINEFUNC2(PKCS12 *, d2i_PKCS12_bio, BIO *bio, bio, PKCS12 **pkcs12, pkcs12,
return nullptr,
return);
459#ifndef OPENSSL_NO_DEPRECATED_3_0
461DEFINEFUNC4(DSA *, PEM_read_bio_DSA_PUBKEY, BIO *a, a, DSA **b, b, pem_password_cb *c, c,
void *d, d,
return nullptr,
return)
462DEFINEFUNC4(RSA *, PEM_read_bio_RSA_PUBKEY, BIO *a, a, RSA **b, b, pem_password_cb *c, c,
void *d, d,
return nullptr,
return)
463DEFINEFUNC4(DSA *, PEM_read_bio_DSAPrivateKey, BIO *a, a, DSA **b, b, pem_password_cb *c, c,
void *d, d,
return nullptr,
return)
464DEFINEFUNC4(RSA *, PEM_read_bio_RSAPrivateKey, BIO *a, a, RSA **b, b, pem_password_cb *c, c,
void *d, d,
return nullptr,
return)
466DEFINEFUNC2(
int, PEM_write_bio_DSA_PUBKEY, BIO *a, a, DSA *b, b,
return 0,
return)
467DEFINEFUNC2(
int, PEM_write_bio_RSA_PUBKEY, BIO *a, a, RSA *b, b,
return 0,
return)
468DEFINEFUNC7(
int, PEM_write_bio_DSAPrivateKey, BIO *a, a, DSA *b, b,
const EVP_CIPHER *c, c,
unsigned char *d, d,
int e, e, pem_password_cb *f, f,
void *g, g,
return 0,
return)
469DEFINEFUNC7(
int, PEM_write_bio_RSAPrivateKey, BIO *a, a, RSA *b, b,
const EVP_CIPHER *c, c,
unsigned char *d, d,
int e, e, pem_password_cb *f, f,
void *g, g,
return 0,
return)
471DEFINEFUNC2(
int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *a, a, RSA *b, b,
return -1,
return)
479DEFINEFUNC(
int, RSA_bits, RSA *a, a,
return 0,
return)
480DEFINEFUNC(
int, DSA_bits, DSA *a, a,
return 0,
return)
481DEFINEFUNC(
int, DH_bits, DH *dh, dh,
return 0,
return)
483DEFINEFUNC(DSA *, EVP_PKEY_get1_DSA, EVP_PKEY *a, a,
return nullptr,
return)
484DEFINEFUNC(RSA *, EVP_PKEY_get1_RSA, EVP_PKEY *a, a,
return nullptr,
return)
485DEFINEFUNC(DH *, EVP_PKEY_get1_DH, EVP_PKEY *a, a,
return nullptr,
return)
487DEFINEFUNC2(
int, EVP_PKEY_cmp,
const EVP_PKEY *a, a,
const EVP_PKEY *b, b,
return -1,
return)
488DEFINEFUNC3(
int, EVP_PKEY_assign, EVP_PKEY *a, a,
int b, b,
void *r, r,
return -1,
return)
490DEFINEFUNC2(
int, EVP_PKEY_set1_RSA, EVP_PKEY *a, a, RSA *b, b,
return -1,
return)
491DEFINEFUNC2(
int, EVP_PKEY_set1_DSA, EVP_PKEY *a, a, DSA *b, b,
return -1,
return)
492DEFINEFUNC2(
int, EVP_PKEY_set1_DH, EVP_PKEY *a, a, DH *b, b,
return -1,
return)
496DEFINEFUNC4(EC_KEY *, PEM_read_bio_EC_PUBKEY, BIO *a, a, EC_KEY **b, b, pem_password_cb *c, c,
void *d, d,
return nullptr,
return)
497DEFINEFUNC4(EC_KEY *, PEM_read_bio_ECPrivateKey, BIO *a, a, EC_KEY **b, b, pem_password_cb *c, c,
void *d, d,
return nullptr,
return)
499DEFINEFUNC2(
int, PEM_write_bio_EC_PUBKEY, BIO *a, a, EC_KEY *b, b,
return 0,
return)
500DEFINEFUNC7(
int, PEM_write_bio_ECPrivateKey, BIO *a, a, EC_KEY *b, b,
const EVP_CIPHER *c, c,
unsigned char *d, d,
int e, e, pem_password_cb *f, f,
void *g, g,
return 0,
return)
502DEFINEFUNC(
const EC_GROUP*, EC_KEY_get0_group,
const EC_KEY* k, k,
return nullptr,
return)
503DEFINEFUNC(
int, EC_GROUP_get_degree,
const EC_GROUP* g, g,
return 0,
return)
505DEFINEFUNC2(
int, EVP_PKEY_set1_EC_KEY, EVP_PKEY *a, a, EC_KEY *b, b,
return -1,
return)
506DEFINEFUNC(EC_KEY *, EVP_PKEY_get1_EC_KEY, EVP_PKEY *a, a,
return nullptr,
return)
508DEFINEFUNC(EC_KEY *, EC_KEY_dup,
const EC_KEY *ec, ec,
return nullptr,
return)
509DEFINEFUNC(EC_KEY *, EC_KEY_new_by_curve_name,
int nid, nid,
return nullptr,
return)
518#define RESOLVEFUNC(func)
519 if (!(_q_##func = _q_PTR_##func(libs.ssl->resolve(#func)))
520 && !(_q_##func = _q_PTR_##func(libs.crypto->resolve(#func))))
521 qsslSocketCannotResolveSymbolWarning(#func);
523#if !defined QT_LINKED_OPENSSL
525#if !QT_CONFIG(library)
526bool q_resolveOpenSslSymbols()
528 qCWarning(lcTlsBackend,
"QSslSocket: unable to resolve symbols. Qt is configured without the "
529 "'library' feature, which means runtime resolving of libraries won't work.");
530 qCWarning(lcTlsBackend,
"Either compile Qt statically or with support for runtime resolving "
537struct NumericallyLess
539 typedef bool result_type;
540 result_type operator()(QStringView lhs, QStringView rhs)
const
544 int a = lhs.toInt(&ok);
559 typedef bool result_type;
560 result_type operator()(QStringView lhs, QStringView rhs)
const
562 const auto lhsparts = lhs.split(u'.');
563 const auto rhsparts = rhs.split(u'.');
564 Q_ASSERT(lhsparts.size() > 1 && rhsparts.size() > 1);
567 return std::lexicographical_compare(rhsparts.begin() + 1, rhsparts.end(),
568 lhsparts.begin() + 1, lhsparts.end(),
573#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
574static int dlIterateCallback(
struct dl_phdr_info *info, size_t size,
void *data)
576 if (size <
sizeof (info->dlpi_addr) +
sizeof (info->dlpi_name))
578 QDuplicateTracker<QString> *paths = (QDuplicateTracker<QString> *)data;
579 QString path = QString::fromLocal8Bit(info->dlpi_name);
580 if (!path.isEmpty()) {
582 path = fi.absolutePath();
584 (
void)paths->hasSeen(std::move(path));
590static QStringList libraryPathList()
594 paths = QString::fromLatin1(qgetenv(
"DYLD_LIBRARY_PATH")).split(u':', Qt::SkipEmptyParts);
598 CFBundleGetPackageInfo(CFBundleGetMainBundle(), &packageType,
nullptr);
599 if (packageType == FOUR_CHAR_CODE(
'APPL')) {
600 QUrl bundleUrl = QUrl::fromCFURL(QCFType<CFURLRef>(CFBundleCopyBundleURL(CFBundleGetMainBundle())));
601 QUrl frameworksUrl = QUrl::fromCFURL(QCFType<CFURLRef>(CFBundleCopyPrivateFrameworksURL(CFBundleGetMainBundle())));
602 paths << bundleUrl.resolved(frameworksUrl).path();
605 paths = QString::fromLatin1(qgetenv(
"LD_LIBRARY_PATH")).split(u':', Qt::SkipEmptyParts);
607 paths <<
"/lib"_L1 <<
"/usr/lib"_L1 <<
"/usr/local/lib"_L1;
608 paths <<
"/lib64"_L1 <<
"/usr/lib64"_L1 <<
"/usr/local/lib64"_L1;
609 paths <<
"/lib32"_L1 <<
"/usr/lib32"_L1 <<
"/usr/local/lib32"_L1;
611#if defined(Q_OS_ANDROID)
612 paths <<
"/system/lib"_L1;
613#elif defined(Q_OS_LINUX)
615 QDuplicateTracker<QString> loadedPaths;
616 dl_iterate_phdr(dlIterateCallback, &loadedPaths);
617 std::move(loadedPaths).appendTo(paths);
624static QStringList findAllLibs(QLatin1StringView filter)
626 const QStringList paths = libraryPathList();
628 const QStringList filters((QString(filter)));
630 using F = QDirListing::IteratorFlag;
631 for (
const QString &path : paths) {
632 QStringList entryList;
633 for (
const auto &dirEntry : QDirListing(path, filters, F::FilesOnly))
634 entryList.emplace_back(dirEntry.fileName());
636 std::sort(entryList.begin(), entryList.end(), LibGreaterThan());
637 for (
const QString &entry : std::as_const(entryList))
638 found << path + u'/' + entry;
644static QStringList findAllLibSsl()
646 return findAllLibs(
"libssl.*"_L1);
649static QStringList findAllLibCrypto()
651 return findAllLibs(
"libcrypto.*"_L1);
655#if (OPENSSL_VERSION_NUMBER
>> 28
) < 3
656#define QT_OPENSSL_VERSION "1_1"
657#elif OPENSSL_VERSION_MAJOR
== 3
658#define QT_OPENSSL_VERSION "3"
663struct LoadedOpenSsl {
664 std::unique_ptr<QSystemLibrary> ssl, crypto;
667static bool tryToLoadOpenSslWin32Library(QLatin1StringView ssleay32LibName, QLatin1StringView libeay32LibName, LoadedOpenSsl &result)
669 auto ssleay32 = std::make_unique<QSystemLibrary>(ssleay32LibName);
670 if (!ssleay32->load(
false)) {
674 auto libeay32 = std::make_unique<QSystemLibrary>(libeay32LibName);
675 if (!libeay32->load(
false)) {
679 result.ssl = std::move(ssleay32);
680 result.crypto = std::move(libeay32);
684static LoadedOpenSsl loadOpenSsl()
686 LoadedOpenSsl result;
692#if defined(Q_PROCESSOR_X86_64)
693#define QT_SSL_SUFFIX "-x64"
694#elif defined(Q_PROCESSOR_ARM_64)
695#define QT_SSL_SUFFIX "-arm64"
696#elif defined(Q_PROCESSOR_ARM_32)
697#define QT_SSL_SUFFIX "-arm"
702 tryToLoadOpenSslWin32Library(
"libssl-" QT_OPENSSL_VERSION QT_SSL_SUFFIX
""_L1,
703 "libcrypto-" QT_OPENSSL_VERSION QT_SSL_SUFFIX
""_L1, result);
710struct LoadedOpenSsl {
711 std::unique_ptr<QLibrary> ssl, crypto;
714static LoadedOpenSsl loadOpenSsl()
716 LoadedOpenSsl result = { std::make_unique<QLibrary>(), std::make_unique<QLibrary>() };
718# if defined(Q_OS_UNIX)
719 QLibrary *
const libssl = result.ssl.get();
720 QLibrary *
const libcrypto = result.crypto.get();
756 libcrypto->setLoadHints(QLibrary::ExportExternalSymbolsHint);
759#if !defined(Q_OS_QNX)
761#if defined(OPENSSL_SHLIB_VERSION)
765 auto shlibVersion = QString(
"%1"_L1).arg(OPENSSL_SHLIB_VERSION);
766 libssl->setFileNameAndVersion(
"ssl"_L1, shlibVersion);
767 libcrypto->setFileNameAndVersion(
"crypto"_L1, shlibVersion);
768#elif defined(SHLIB_VERSION_NUMBER)
770 libssl->setFileNameAndVersion(
"ssl"_L1, SHLIB_VERSION_NUMBER
""_L1);
771 libcrypto->setFileNameAndVersion(
"crypto"_L1, SHLIB_VERSION_NUMBER
""_L1);
774 if (libcrypto->load() && libssl->load()) {
790# if defined(Q_OS_ANDROID)
792 auto openSSLSuffix = [](
const QByteArray &defaultSuffix = {}) {
793 auto suffix = qgetenv(
"ANDROID_OPENSSL_SUFFIX");
794 if (suffix.isEmpty())
795 return defaultSuffix;
799 static QString suffix = QString::fromLatin1(openSSLSuffix(
"_" QT_OPENSSL_VERSION));
801 libssl->setFileNameAndVersion(
"ssl"_L1 + suffix, -1);
802 libcrypto->setFileNameAndVersion(
"crypto"_L1 + suffix, -1);
804 libssl->setFileNameAndVersion(
"ssl"_L1, -1);
805 libcrypto->setFileNameAndVersion(
"crypto"_L1, -1);
807 if (libcrypto->load() && libssl->load()) {
817 const QStringList sslList = findAllLibSsl();
818 const QStringList cryptoList = findAllLibCrypto();
820 for (
const QString &crypto : cryptoList) {
823 if (crypto.endsWith(
"libcrypto.dylib"_L1))
826 libcrypto->setFileNameAndVersion(crypto, -1);
827 if (libcrypto->load()) {
828 QFileInfo fi(crypto);
829 QString version = fi.completeSuffix();
831 for (
const QString &ssl : sslList) {
832 if (!ssl.endsWith(version))
835 libssl->setFileNameAndVersion(ssl, -1);
837 if (libssl->load()) {
861 static bool symbolsResolved = []() {
862 LoadedOpenSsl libs = loadOpenSsl();
863 if (!libs.ssl || !libs.crypto) {
864 qCWarning(lcTlsBackend,
"Failed to load libssl/libcrypto.");
921 if (!_q_OpenSSL_version || !_q_OpenSSL_version_num) {
924 qCWarning(lcTlsBackend,
"Incompatible version of OpenSSL");
928#if OPENSSL_VERSION_NUMBER
>= 0x30000000
930 qCWarning(lcTlsBackend,
"Incompatible version of OpenSSL (built with OpenSSL >= 3.x, runtime version is < 3.x)");
934 if (q_OpenSSL_version_num() >= 0x30000000) {
935 qCWarning(lcTlsBackend,
"Incompatible version of OpenSSL (built with OpenSSL 1.x, runtime version is >= 3.x)");
943 RESOLVEFUNC(DTLSv1_listen)
944 RESOLVEFUNC(BIO_ADDR_new)
945 RESOLVEFUNC(BIO_ADDR_free)
946 RESOLVEFUNC(BIO_meth_new)
947 RESOLVEFUNC(BIO_meth_free)
948 RESOLVEFUNC(BIO_meth_set_write)
949 RESOLVEFUNC(BIO_meth_set_read)
950 RESOLVEFUNC(BIO_meth_set_puts)
951 RESOLVEFUNC(BIO_meth_set_ctrl)
952 RESOLVEFUNC(BIO_meth_set_create)
953 RESOLVEFUNC(BIO_meth_set_destroy)
957 RESOLVEFUNC(OCSP_SINGLERESP_get0_id)
958 RESOLVEFUNC(d2i_OCSP_RESPONSE)
959 RESOLVEFUNC(OCSP_RESPONSE_free)
960 RESOLVEFUNC(OCSP_response_status)
961 RESOLVEFUNC(OCSP_response_get1_basic)
962 RESOLVEFUNC(OCSP_BASICRESP_free)
963 RESOLVEFUNC(OCSP_basic_verify)
964 RESOLVEFUNC(OCSP_resp_count)
965 RESOLVEFUNC(OCSP_resp_get0)
966 RESOLVEFUNC(OCSP_single_get0_status)
967 RESOLVEFUNC(OCSP_check_validity)
968 RESOLVEFUNC(OCSP_cert_to_id)
969 RESOLVEFUNC(OCSP_id_get0_info)
970 RESOLVEFUNC(OCSP_resp_get0_certs)
971 RESOLVEFUNC(OCSP_basic_sign)
972 RESOLVEFUNC(OCSP_response_create)
973 RESOLVEFUNC(i2d_OCSP_RESPONSE)
974 RESOLVEFUNC(OCSP_basic_add1_status)
975 RESOLVEFUNC(OCSP_BASICRESP_new)
976 RESOLVEFUNC(OCSP_CERTID_free)
977 RESOLVEFUNC(OCSP_cert_to_id)
978 RESOLVEFUNC(OCSP_id_cmp)
1017#ifndef OPENSSL_NO_DES
1021#ifndef OPENSSL_NO_RC2
1024#ifndef OPENSSL_NO_AES
1081#if defined(OPENSSL_VERSION_MAJOR
) && OPENSSL_VERSION_MAJOR
>= 3
1088 RESOLVEFUNC(SSL_get_peer_certificate)
1089 RESOLVEFUNC(EVP_PKEY_base_id)
1092#ifndef OPENSSL_NO_DEPRECATED_3_0
1135#ifndef OPENSSL_NO_EC
1172#ifndef OPENSSL_NO_PSK
1222#if OPENSSL_VERSION_MAJOR
< 3
1223 RESOLVEFUNC(SSL_CTX_load_verify_locations)
1230#ifndef OPENSSL_NO_NEXTPROTONEG
1240 RESOLVEFUNC(SSL_CTX_set_cookie_generate_cb)
1241 RESOLVEFUNC(SSL_CTX_set_cookie_verify_cb)
1242 RESOLVEFUNC(DTLS_server_method)
1243 RESOLVEFUNC(DTLS_client_method)
1249#ifndef OPENSSL_NO_EC
1259 return symbolsResolved;
1265bool q_resolveOpenSslSymbols()
#define DEFINEFUNC(ret, func, args, argcall, funcret)
SSL_CTX int void DUMMYARG SSL const unsigned char * protos
SSL_CTX int void DUMMYARG SSL const unsigned char unsigned return const SSL const unsigned char ** data
#define RESOLVEFUNC(func)
SSL_CTX int void DUMMYARG SSL const unsigned char unsigned return const SSL const unsigned char unsigned * len
SSL_CTX int void DUMMYARG SSL const unsigned char unsigned protos_len
SSL_CTX int(* cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg)
#define DEFINEFUNC5(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, err, funcret)
#define DEFINEFUNC4(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, err, funcret)
bool q_resolveOpenSslSymbols()
unsigned int(* q_psk_server_callback_t)(SSL *ssl, const char *identity, unsigned char *psk, unsigned int max_psk_len)
void(* GenericCallbackType)()
#define DEFINEFUNC7(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, err, funcret)
#define DEFINEFUNC2(ret, func, arg1, a, arg2, b, err, funcret)
int(* q_SSL_psk_use_session_cb_func_t)(SSL *, const EVP_MD *, const unsigned char **, size_t *, SSL_SESSION **)
#define DEFINEFUNC6(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, err, funcret)
size_t q_EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
#define DEFINEFUNC3(ret, func, arg1, a, arg2, b, arg3, c, err, funcret)
unsigned int(* q_psk_client_callback_t)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len)
size_t q_SSL_get_client_random(SSL *a, unsigned char *out, size_t outlen)
long q_OpenSSL_version_num()
size_t q_SSL_SESSION_get_master_key(const SSL_SESSION *session, unsigned char *out, size_t outlen)