24#include <QtNetwork/private/qssl_p.h>
27# include <QtCore/private/qsystemlibrary_p.h>
28#elif QT_CONFIG(library)
29# include <QtCore/qlibrary.h>
31#include <QtCore/qdatetime.h>
33#include <QtCore/qdir.h>
35#include <QtCore/private/qduplicatetracker_p.h>
36#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
40#include <QtCore/private/qcore_mac_p.h>
88#ifndef QT_LINKED_OPENSSL
91void qsslSocketUnresolvedSymbolWarning(
const char *functionName)
93 qCWarning(lcTlsBackend,
"QSslSocket: cannot call unresolved function %s", functionName);
97void qsslSocketCannotResolveSymbolWarning(
const char *functionName)
99 qCWarning(lcTlsBackend,
"QSslSocket: cannot resolve %s", functionName);
107DEFINEFUNC(
const unsigned char *, ASN1_STRING_get0_data,
const ASN1_STRING *
a,
a,
return nullptr,
return)
110DEFINEFUNC(BIO *, BIO_new,
const BIO_METHOD *
a,
a,
return nullptr,
return)
112DEFINEFUNC2(
int, BN_is_word, BIGNUM *
a,
a, BN_ULONG
w,
w,
return 0,
return)
113DEFINEFUNC(
int, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX *
c,
c,
return 0,
return)
114DEFINEFUNC(
int, EVP_PKEY_up_ref, EVP_PKEY *
a,
a,
return 0,
return)
115DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new, EVP_PKEY *pkey, pkey, ENGINE *e, e,
return nullptr,
return)
116DEFINEFUNC(
int, EVP_PKEY_param_check, EVP_PKEY_CTX *
ctx,
ctx,
return 0,
return)
118DEFINEFUNC(
int, OPENSSL_sk_num, OPENSSL_STACK *
a,
a,
return -1,
return)
126using info_callback =
void (*) (const SSL *ssl,
int type,
int val);
135DEFINEFUNC2(
void, SSL_CTX_sess_set_new_cb, SSL_CTX *
ctx,
ctx, NewSessionCallback
cb,
cb,
return,
return)
136DEFINEFUNC(
int, SSL_SESSION_is_resumable,
const SSL_SESSION *
s,
s,
return 0,
return)
138DEFINEFUNC3(
size_t, SSL_get_client_random, SSL *
a,
a,
unsigned char *
out,
out,
size_t outlen, outlen,
return 0,
return)
139DEFINEFUNC3(
size_t, SSL_SESSION_get_master_key,
const SSL_SESSION *ses, ses,
unsigned char *
out,
out,
size_t outlen, outlen,
return 0,
return)
140DEFINEFUNC6(
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)
141DEFINEFUNC2(
unsigned long, SSL_set_options, SSL *ssl, ssl,
unsigned long op, op,
return 0,
return)
147DEFINEFUNC(ASN1_TIME *, X509_getm_notBefore, X509 *
a,
a,
return nullptr,
return)
148DEFINEFUNC(ASN1_TIME *, X509_getm_notAfter, X509 *
a,
a,
return nullptr,
return)
151DEFINEFUNC(
long, X509_get_version, X509 *
a,
a,
return -1,
return)
152DEFINEFUNC(EVP_PKEY *, X509_get_pubkey, X509 *
a,
a,
return nullptr,
return)
153DEFINEFUNC2(
void, X509_STORE_set_verify_cb, X509_STORE *
a,
a, X509_STORE_CTX_verify_cb verify_cb, verify_cb,
return,
DUMMYARG)
154DEFINEFUNC3(
int, X509_STORE_set_ex_data, X509_STORE *
a,
a,
int idx, idx,
void *
data,
data,
return 0,
return)
155DEFINEFUNC2(
void *, X509_STORE_get_ex_data, X509_STORE *
r,
r,
int idx, idx,
return nullptr,
return)
156DEFINEFUNC(
STACK_OF(X509) *, X509_STORE_CTX_get0_chain, X509_STORE_CTX *
a,
a,
return nullptr,
return)
161DEFINEFUNC(
unsigned long, SSL_SESSION_get_ticket_lifetime_hint, const SSL_SESSION *session, session,
return 0,
return)
164DEFINEFUNC2(
int, DTLSv1_listen, SSL *
s,
s, BIO_ADDR *
c,
c,
return -1,
return)
169DEFINEFUNC2(
int, BIO_meth_set_write, BIO_METHOD *biom, biom, DgramWriteCallback
write,
write,
return 0,
return)
170DEFINEFUNC2(
int, BIO_meth_set_read, BIO_METHOD *biom, biom, DgramReadCallback
read,
read,
return 0,
return)
171DEFINEFUNC2(
int, BIO_meth_set_puts, BIO_METHOD *biom, biom, DgramPutsCallback puts, puts,
return 0,
return)
172DEFINEFUNC2(
int, BIO_meth_set_ctrl, BIO_METHOD *biom, biom, DgramCtrlCallback ctrl, ctrl,
return 0,
return)
173DEFINEFUNC2(
int, BIO_meth_set_create, BIO_METHOD *biom, biom, DgramCreateCallback crt, crt,
return 0,
return)
174DEFINEFUNC2(
int, BIO_meth_set_destroy, BIO_METHOD *biom, biom, DgramDestroyCallback dtr, dtr,
return 0,
return)
178DEFINEFUNC(
const OCSP_CERTID *, OCSP_SINGLERESP_get0_id,
const OCSP_SINGLERESP *
x,
x,
return nullptr,
return)
179DEFINEFUNC3(OCSP_RESPONSE *, d2i_OCSP_RESPONSE, OCSP_RESPONSE **
a,
a,
const unsigned char **
in,
in,
long len,
len,
return nullptr,
return)
181DEFINEFUNC(OCSP_BASICRESP *, OCSP_response_get1_basic, OCSP_RESPONSE *resp, resp,
return nullptr,
return)
183DEFINEFUNC(
int, OCSP_response_status, OCSP_RESPONSE *resp, resp,
return OCSP_RESPONSE_STATUS_INTERNALERROR,
return)
184DEFINEFUNC4(
int, OCSP_basic_verify, OCSP_BASICRESP *bs, bs,
STACK_OF(X509) *
certs,
certs, X509_STORE *st, st,
unsigned long flags,
flags,
return -1,
return)
185DEFINEFUNC(
int, OCSP_resp_count, OCSP_BASICRESP *bs, bs,
return 0,
return)
186DEFINEFUNC2(OCSP_SINGLERESP *, OCSP_resp_get0, OCSP_BASICRESP *bs, bs,
int idx, idx,
return nullptr,
return)
187DEFINEFUNC5(
int, OCSP_single_get0_status, OCSP_SINGLERESP *single, single,
int *reason, reason, ASN1_GENERALIZEDTIME **revtime, revtime,
188 ASN1_GENERALIZEDTIME **thisupd, thisupd, ASN1_GENERALIZEDTIME **nextupd, nextupd,
return -1,
return)
189DEFINEFUNC4(
int, OCSP_check_validity, ASN1_GENERALIZEDTIME *thisupd, thisupd, ASN1_GENERALIZEDTIME *nextupd, nextupd,
long nsec, nsec,
long maxsec, maxsec,
return 0,
return)
190DEFINEFUNC3(OCSP_CERTID *, OCSP_cert_to_id,
const EVP_MD *dgst, dgst, X509 *subject, subject, X509 *issuer, issuer,
return nullptr,
return)
192DEFINEFUNC5(
int, OCSP_id_get0_info, ASN1_OCTET_STRING **piNameHash, piNameHash, ASN1_OBJECT **pmd, pmd,
193 ASN1_OCTET_STRING **piKeyHash, piKeyHash, ASN1_INTEGER **pserial, pserial, OCSP_CERTID *cid, cid,
195DEFINEFUNC2(OCSP_RESPONSE *, OCSP_response_create,
int status, status, OCSP_BASICRESP *bs, bs,
return nullptr,
return)
196DEFINEFUNC(
const STACK_OF(X509) *, OCSP_resp_get0_certs,
const OCSP_BASICRESP *bs, bs,
return nullptr,
return)
197DEFINEFUNC2(
int, OCSP_id_cmp, OCSP_CERTID *
a,
a, OCSP_CERTID *
b,
b,
return -1,
return)
198DEFINEFUNC7(OCSP_SINGLERESP *, OCSP_basic_add1_status, OCSP_BASICRESP *
r,
r, OCSP_CERTID *
c,
c,
int s,
s,
199 int re, re, ASN1_TIME *rt, rt, ASN1_TIME *
t,
t, ASN1_TIME *
n,
n,
return nullptr,
return)
201DEFINEFUNC2(
int, i2d_OCSP_RESPONSE, OCSP_RESPONSE *
r,
r,
unsigned char **ppout, ppout,
return 0,
return)
202DEFINEFUNC6(
int, OCSP_basic_sign, OCSP_BASICRESP *br, br, X509 *signer, signer, EVP_PKEY *
key,
key,
203 const EVP_MD *dg, dg,
STACK_OF(X509) *cs, cs,
unsigned long flags,
flags,
return 0,
return)
206DEFINEFUNC(
void, AUTHORITY_INFO_ACCESS_free, AUTHORITY_INFO_ACCESS *
p,
p,
return,
return)
208DEFINEFUNC(
void *, BIO_get_data, BIO *
a,
a,
return nullptr,
return)
210DEFINEFUNC(
int, BIO_get_shutdown, BIO *
a,
a,
return -1,
return)
213DEFINEFUNC(
long, ASN1_INTEGER_get, ASN1_INTEGER *
a,
a,
return 0,
return)
214DEFINEFUNC2(
int, ASN1_INTEGER_cmp,
const ASN1_INTEGER *
a,
a,
const ASN1_INTEGER *
b,
b,
return 1,
return)
215DEFINEFUNC(
int, ASN1_STRING_length, ASN1_STRING *
a,
a,
return 0,
return)
216DEFINEFUNC2(
int, ASN1_STRING_to_UTF8,
unsigned char **
a,
a, ASN1_STRING *
b,
b,
return 0,
return)
217DEFINEFUNC2(
int, ASN1_TIME_to_tm,
const ASN1_TIME *
s,
s,
struct tm *tm, tm,
return 0,
return)
218DEFINEFUNC4(
long, BIO_ctrl, BIO *
a,
a,
int b,
b,
long c,
c,
void *
d,
d,
return -1,
return)
220DEFINEFUNC2(BIO *, BIO_new_mem_buf,
void *
a,
a,
int b,
b,
return nullptr,
return)
223DEFINEFUNC3(
int, BIO_write, BIO *
a,
a,
const void *
b,
b,
int c,
c,
return -1,
return)
224DEFINEFUNC(
int, BN_num_bits,
const BIGNUM *
a,
a,
return 0,
return)
225DEFINEFUNC2(BN_ULONG, BN_mod_word,
const BIGNUM *
a,
a, BN_ULONG
w,
w,
return static_cast<BN_ULONG
>(-1),
return)
226DEFINEFUNC3(X509 *, d2i_X509, X509 **
a,
a,
const unsigned char **
b,
b,
long c,
c,
return nullptr,
return)
227DEFINEFUNC2(
char *, ERR_error_string,
unsigned long a,
a,
char *
b,
b,
return nullptr,
return)
230DEFINEFUNC(EVP_CIPHER_CTX *, EVP_CIPHER_CTX_new,
void,
DUMMYARG,
return nullptr,
return)
232DEFINEFUNC4(
int, EVP_CIPHER_CTX_ctrl, EVP_CIPHER_CTX *
ctx,
ctx,
int type,
type,
int arg,
arg,
void *
ptr,
ptr,
return 0,
return)
233DEFINEFUNC2(
int, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX *
ctx,
ctx,
int keylen, keylen,
return 0,
return)
234DEFINEFUNC5(
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)
235DEFINEFUNC6(
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)
236DEFINEFUNC5(
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)
237DEFINEFUNC3(
int, EVP_CipherFinal, EVP_CIPHER_CTX *
ctx,
ctx,
unsigned char *
out,
out,
int *outl, outl,
return 0,
return)
238DEFINEFUNC(
const EVP_MD *, EVP_get_digestbyname,
const char *
name,
name,
return nullptr,
return)
239#ifndef OPENSSL_NO_DES
243#ifndef OPENSSL_NO_RC2
246#ifndef OPENSSL_NO_AES
254DEFINEFUNC(
int, EVP_PKEY_type,
int a,
a,
return NID_undef,
return)
255DEFINEFUNC2(
int, i2d_X509, X509 *
a,
a,
unsigned char **
b,
b,
return -1,
return)
256DEFINEFUNC(
const char *, OBJ_nid2sn,
int a,
a,
return nullptr,
return)
257DEFINEFUNC(
const char *, OBJ_nid2ln,
int a,
a,
return nullptr,
return)
258DEFINEFUNC(
int, OBJ_sn2nid,
const char *
s,
s,
return 0,
return)
259DEFINEFUNC(
int, OBJ_ln2nid,
const char *
s,
s,
return 0,
return)
260DEFINEFUNC3(
int, i2t_ASN1_OBJECT,
char *
a,
a,
int b,
b, ASN1_OBJECT *
c,
c,
return -1,
return)
261DEFINEFUNC4(
int, OBJ_obj2txt,
char *
a,
a,
int b,
b, ASN1_OBJECT *
c,
c,
int d,
d,
return -1,
return)
262DEFINEFUNC(
int, OBJ_obj2nid,
const ASN1_OBJECT *
a,
a,
return NID_undef,
return)
263DEFINEFUNC4(EVP_PKEY *, PEM_read_bio_PrivateKey, BIO *
a,
a, EVP_PKEY **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
265DEFINEFUNC7(
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)
266DEFINEFUNC7(
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)
267DEFINEFUNC4(EVP_PKEY *, PEM_read_bio_PUBKEY, BIO *
a,
a, EVP_PKEY **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
268DEFINEFUNC2(
int, PEM_write_bio_PUBKEY, BIO *
a,
a, EVP_PKEY *
b,
b,
return 0,
return)
271DEFINEFUNC2(
int, RAND_bytes,
unsigned char *
b,
b,
int n,
n,
return 0,
return)
272DEFINEFUNC(
int, SSL_accept, SSL *
a,
a,
return -1,
return)
274DEFINEFUNC3(
char *, SSL_CIPHER_description,
const SSL_CIPHER *
a,
a,
char *
b,
b,
int c,
c,
return nullptr,
return)
275DEFINEFUNC2(
int, SSL_CIPHER_get_bits,
const SSL_CIPHER *
a,
a,
int *
b,
b,
return 0,
return)
276DEFINEFUNC(BIO *, SSL_get_rbio,
const SSL *
s,
s,
return nullptr,
return)
277DEFINEFUNC(
int, SSL_connect, SSL *
a,
a,
return -1,
return)
278DEFINEFUNC(
int, SSL_CTX_check_private_key,
const SSL_CTX *
a,
a,
return -1,
return)
279DEFINEFUNC4(
long, SSL_CTX_ctrl, SSL_CTX *
a,
a,
int b,
b,
long c,
c,
void *
d,
d,
return -1,
return)
281DEFINEFUNC(SSL_CTX *, SSL_CTX_new,
const SSL_METHOD *
a,
a,
return nullptr,
return)
282DEFINEFUNC2(
int, SSL_CTX_set_cipher_list, SSL_CTX *
a,
a,
const char *
b,
b,
return -1,
return)
284DEFINEFUNC(
int, SSL_CTX_set_default_verify_paths, SSL_CTX *
a,
a,
return -1,
return)
285DEFINEFUNC3(
void, SSL_CTX_set_verify, SSL_CTX *
a,
a,
int b,
b,
int (*
c)(
int, X509_STORE_CTX *),
c,
return,
DUMMYARG)
305#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
306DEFINEFUNC(X509 *, SSL_get1_peer_certificate, SSL *
a,
a,
return nullptr,
return)
307DEFINEFUNC(
int, EVP_PKEY_get_bits,
const EVP_PKEY *pkey, pkey,
return -1,
return)
308DEFINEFUNC(
int, EVP_PKEY_get_base_id,
const EVP_PKEY *pkey, pkey,
return -1,
return)
310DEFINEFUNC(X509 *, SSL_get_peer_certificate, SSL *
a,
a,
return nullptr,
return)
311DEFINEFUNC(
int, EVP_PKEY_base_id, EVP_PKEY *
a,
a,
return NID_undef,
return)
314DEFINEFUNC(
long, SSL_get_verify_result,
const SSL *
a,
a,
return -1,
return)
315DEFINEFUNC(SSL *, SSL_new, SSL_CTX *
a,
a,
return nullptr,
return)
316DEFINEFUNC(SSL_CTX *, SSL_get_SSL_CTX, SSL *
a,
a,
return nullptr,
return)
317DEFINEFUNC4(
long, SSL_ctrl, SSL *
a,
a,
int cmd, cmd,
long larg, larg,
void *parg, parg,
return -1,
return)
322DEFINEFUNC(
int, SSL_shutdown, SSL *
a,
a,
return -1,
return)
323DEFINEFUNC(
int, SSL_in_init,
const SSL *
a,
a,
return 0,
return)
324DEFINEFUNC(
int, SSL_get_shutdown,
const SSL *ssl, ssl,
return 0,
return)
325DEFINEFUNC2(
int, SSL_set_session, SSL* to, to, SSL_SESSION *session, session,
return -1,
return)
327DEFINEFUNC(SSL_SESSION*, SSL_get1_session, SSL *ssl, ssl,
return nullptr,
return)
328DEFINEFUNC(SSL_SESSION*, SSL_get_session,
const SSL *ssl, ssl,
return nullptr,
return)
329DEFINEFUNC3(
int, SSL_set_ex_data, SSL *ssl, ssl,
int idx, idx,
void *
arg,
arg,
return 0,
return)
330DEFINEFUNC2(
void *, SSL_get_ex_data,
const SSL *ssl, ssl,
int idx, idx,
return nullptr,
return)
332#ifndef OPENSSL_NO_PSK
338DEFINEFUNC3(
int, SSL_write, SSL *
a,
a,
const void *
b,
b,
int c,
c,
return -1,
return)
340DEFINEFUNC4(
int, X509_digest,
const X509 *x509, x509,
const EVP_MD *
type,
type,
unsigned char *md, md,
unsigned int *
len,
len,
return -1,
return)
341DEFINEFUNC(X509 *, X509_dup, X509 *
a,
a,
return nullptr,
return)
350DEFINEFUNC4(
void *, X509_get_ext_d2i, X509 *
a,
a,
int b,
b,
int *
c,
c,
int *
d,
d,
return nullptr,
return)
373DEFINEFUNC4(
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)
383#if OPENSSL_VERSION_MAJOR < 3
384DEFINEFUNC3(
int, SSL_CTX_load_verify_locations, SSL_CTX *
ctx,
ctx,
const char *CAfile, CAfile,
const char *CApath, CApath,
return 0,
return)
386DEFINEFUNC2(
int, SSL_CTX_load_verify_dir, SSL_CTX *
ctx,
ctx,
const char *CApath, CApath,
return 0,
return)
389DEFINEFUNC2(
int, i2d_SSL_SESSION, SSL_SESSION *
in,
in,
unsigned char **pp, pp,
return 0,
return)
390DEFINEFUNC3(SSL_SESSION *, d2i_SSL_SESSION, SSL_SESSION **
a,
a,
const unsigned char **pp, pp,
long length,
length,
return nullptr,
return)
392#ifndef OPENSSL_NO_NEXTPROTONEG
394 const unsigned char *
in,
in,
unsigned int inlen, inlen,
395 const unsigned char *client, client,
unsigned int client_len, client_len,
398 int (*
cb) (SSL *ssl,
unsigned char **
out,
399 unsigned char *outlen,
400 const
unsigned char *
in,
401 unsigned int inlen,
void *
arg),
cb,
408 int (*
cb) (SSL *ssl, const
unsigned char **
out,
409 unsigned char *outlen,
410 const
unsigned char *
in,
411 unsigned int inlen,
void *
arg),
cb,
426DEFINEFUNC2(
void *, BIO_get_ex_data, BIO *
b,
b,
int idx, idx,
return nullptr,
return)
431#ifndef OPENSSL_NO_DEPRECATED_3_0
434DEFINEFUNC2(
int, DH_check, DH *dh, dh,
int *codes, codes,
return 0,
return)
435DEFINEFUNC4(
void, DH_get0_pqg,
const DH *dh, dh,
const BIGNUM **
p,
p,
const BIGNUM **
q,
q,
const BIGNUM **
g,
g,
return,
DUMMYARG)
438DEFINEFUNC2(
int, i2d_DHparams, DH *
a,
a,
unsigned char **
p,
p,
return -1,
return)
440DEFINEFUNC4(DH *, PEM_read_bio_DHparams, BIO *
a,
a, DH **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
446DEFINEFUNC2(
size_t, EC_get_builtin_curves, EC_builtin_curve *
r,
r,
size_t nitems, nitems,
return 0,
return)
450DEFINEFUNC5(
int, PKCS12_parse, PKCS12 *p12, p12,
const char *pass, pass, EVP_PKEY **pkey, pkey, \
452DEFINEFUNC2(PKCS12 *, d2i_PKCS12_bio, BIO *bio, bio, PKCS12 **pkcs12, pkcs12,
return nullptr,
return);
455#ifndef OPENSSL_NO_DEPRECATED_3_0
457DEFINEFUNC4(DSA *, PEM_read_bio_DSA_PUBKEY, BIO *
a,
a, DSA **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
458DEFINEFUNC4(RSA *, PEM_read_bio_RSA_PUBKEY, BIO *
a,
a, RSA **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
459DEFINEFUNC4(DSA *, PEM_read_bio_DSAPrivateKey, BIO *
a,
a, DSA **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
460DEFINEFUNC4(RSA *, PEM_read_bio_RSAPrivateKey, BIO *
a,
a, RSA **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
462DEFINEFUNC2(
int, PEM_write_bio_DSA_PUBKEY, BIO *
a,
a, DSA *
b,
b,
return 0,
return)
463DEFINEFUNC2(
int, PEM_write_bio_RSA_PUBKEY, BIO *
a,
a, RSA *
b,
b,
return 0,
return)
464DEFINEFUNC7(
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)
465DEFINEFUNC7(
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)
467DEFINEFUNC2(
int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *
a,
a, RSA *
b,
b,
return -1,
return)
477DEFINEFUNC(
int, DH_bits, DH *dh, dh,
return 0,
return)
479DEFINEFUNC(DSA *, EVP_PKEY_get1_DSA, EVP_PKEY *
a,
a,
return nullptr,
return)
480DEFINEFUNC(RSA *, EVP_PKEY_get1_RSA, EVP_PKEY *
a,
a,
return nullptr,
return)
481DEFINEFUNC(DH *, EVP_PKEY_get1_DH, EVP_PKEY *
a,
a,
return nullptr,
return)
483DEFINEFUNC2(
int, EVP_PKEY_cmp,
const EVP_PKEY *
a,
a,
const EVP_PKEY *
b,
b,
return -1,
return)
484DEFINEFUNC3(
int, EVP_PKEY_assign, EVP_PKEY *
a,
a,
int b,
b,
void *
r,
r,
return -1,
return)
486DEFINEFUNC2(
int, EVP_PKEY_set1_RSA, EVP_PKEY *
a,
a, RSA *
b,
b,
return -1,
return)
487DEFINEFUNC2(
int, EVP_PKEY_set1_DSA, EVP_PKEY *
a,
a, DSA *
b,
b,
return -1,
return)
488DEFINEFUNC2(
int, EVP_PKEY_set1_DH, EVP_PKEY *
a,
a, DH *
b,
b,
return -1,
return)
492DEFINEFUNC4(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)
493DEFINEFUNC4(EC_KEY *, PEM_read_bio_ECPrivateKey, BIO *
a,
a, EC_KEY **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
495DEFINEFUNC2(
int, PEM_write_bio_EC_PUBKEY, BIO *
a,
a, EC_KEY *
b,
b,
return 0,
return)
496DEFINEFUNC7(
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)
498DEFINEFUNC(
const EC_GROUP*, EC_KEY_get0_group,
const EC_KEY* k, k,
return nullptr,
return)
499DEFINEFUNC(
int, EC_GROUP_get_degree,
const EC_GROUP*
g,
g,
return 0,
return)
501DEFINEFUNC2(
int, EVP_PKEY_set1_EC_KEY, EVP_PKEY *
a,
a, EC_KEY *
b,
b,
return -1,
return)
502DEFINEFUNC(EC_KEY *, EVP_PKEY_get1_EC_KEY, EVP_PKEY *
a,
a,
return nullptr,
return)
504DEFINEFUNC(EC_KEY *, EC_KEY_dup,
const EC_KEY *ec, ec,
return nullptr,
return)
505DEFINEFUNC(EC_KEY *, EC_KEY_new_by_curve_name,
int nid, nid,
return nullptr,
return)
514#define RESOLVEFUNC(func) \
515 if (!(_q_##func = _q_PTR_##func(libs.ssl->resolve(#func))) \
516 && !(_q_##func = _q_PTR_##func(libs.crypto->resolve(#func)))) \
517 qsslSocketCannotResolveSymbolWarning(#func);
519#if !defined QT_LINKED_OPENSSL
521#if !QT_CONFIG(library)
524 qCWarning(lcTlsBackend,
"QSslSocket: unable to resolve symbols. Qt is configured without the "
525 "'library' feature, which means runtime resolving of libraries won't work.");
526 qCWarning(lcTlsBackend,
"Either compile Qt statically or with support for runtime resolving "
533struct NumericallyLess
535 typedef bool result_type;
555 typedef bool result_type;
558 const auto lhsparts = lhs.
split(u
'.');
559 const auto rhsparts = rhs.
split(u
'.');
560 Q_ASSERT(lhsparts.size() > 1 && rhsparts.size() > 1);
563 return std::lexicographical_compare(rhsparts.begin() + 1, rhsparts.end(),
564 lhsparts.begin() + 1, lhsparts.end(),
569#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
570static int dlIterateCallback(
struct dl_phdr_info *
info,
size_t size,
void *
data)
572 if (
size <
sizeof (
info->dlpi_addr) + sizeof (
info->dlpi_name))
574 QDuplicateTracker<QString> *
paths = (QDuplicateTracker<QString> *)
data;
576 if (!
path.isEmpty()) {
578 path = fi.absolutePath();
594 CFBundleGetPackageInfo(CFBundleGetMainBundle(), &packageType,
nullptr);
595 if (packageType == FOUR_CHAR_CODE(
'APPL')) {
596 QUrl bundleUrl = QUrl::fromCFURL(QCFType<CFURLRef>(CFBundleCopyBundleURL(CFBundleGetMainBundle())));
597 QUrl frameworksUrl = QUrl::fromCFURL(QCFType<CFURLRef>(CFBundleCopyPrivateFrameworksURL(CFBundleGetMainBundle())));
598 paths << bundleUrl.resolved(frameworksUrl).path();
603 paths <<
"/lib"_L1 <<
"/usr/lib"_L1 <<
"/usr/local/lib"_L1;
604 paths <<
"/lib64"_L1 <<
"/usr/lib64"_L1 <<
"/usr/local/lib64"_L1;
605 paths <<
"/lib32"_L1 <<
"/usr/lib32"_L1 <<
"/usr/local/lib32"_L1;
607#if defined(Q_OS_ANDROID)
608 paths <<
"/system/lib"_L1;
609#elif defined(Q_OS_LINUX)
611 QDuplicateTracker<QString> loadedPaths;
612 dl_iterate_phdr(dlIterateCallback, &loadedPaths);
613 std::move(loadedPaths).appendTo(
paths);
630 std::sort(entryList.begin(), entryList.end(), LibGreaterThan());
640 return findAllLibs(
"libssl.*"_L1);
645 return findAllLibs(
"libcrypto.*"_L1);
649#if (OPENSSL_VERSION_NUMBER >> 28) < 3
650#define QT_OPENSSL_VERSION "1_1"
651#elif OPENSSL_VERSION_MAJOR == 3
652#define QT_OPENSSL_VERSION "3"
657struct LoadedOpenSsl {
658 std::unique_ptr<QSystemLibrary> ssl, crypto;
663 auto ssleay32 = std::make_unique<QSystemLibrary>(ssleay32LibName);
664 if (!ssleay32->load(
false)) {
668 auto libeay32 = std::make_unique<QSystemLibrary>(libeay32LibName);
669 if (!libeay32->load(
false)) {
673 result.ssl = std::move(ssleay32);
674 result.crypto = std::move(libeay32);
678static LoadedOpenSsl loadOpenSsl()
686#if defined(Q_PROCESSOR_X86_64)
687#define QT_SSL_SUFFIX "-x64"
688#elif defined(Q_PROCESSOR_ARM_64)
689#define QT_SSL_SUFFIX "-arm64"
690#elif defined(Q_PROCESSOR_ARM_32)
691#define QT_SSL_SUFFIX "-arm"
696 tryToLoadOpenSslWin32Library(
"libssl-" QT_OPENSSL_VERSION QT_SSL_SUFFIX
""_L1,
697 "libcrypto-" QT_OPENSSL_VERSION QT_SSL_SUFFIX
""_L1,
result);
704struct LoadedOpenSsl {
705 std::unique_ptr<QLibrary> ssl, crypto;
708static LoadedOpenSsl loadOpenSsl()
710 LoadedOpenSsl
result = { std::make_unique<QLibrary>(), std::make_unique<QLibrary>() };
712# if defined(Q_OS_UNIX)
753#if !defined(Q_OS_QNX)
755#if defined(OPENSSL_SHLIB_VERSION)
759 auto shlibVersion =
QString(
"%1"_L1).
arg(OPENSSL_SHLIB_VERSION);
760 libssl->setFileNameAndVersion(
"ssl"_L1, shlibVersion);
761 libcrypto->setFileNameAndVersion(
"crypto"_L1, shlibVersion);
762#elif defined(SHLIB_VERSION_NUMBER)
764 libssl->setFileNameAndVersion(
"ssl"_L1, SHLIB_VERSION_NUMBER
""_L1);
765 libcrypto->setFileNameAndVersion(
"crypto"_L1, SHLIB_VERSION_NUMBER
""_L1);
768 if (libcrypto->load() && libssl->load()) {
784# if defined(Q_OS_ANDROID)
786 auto openSSLSuffix = [](
const QByteArray &defaultSuffix = {}) {
787 auto suffix =
qgetenv(
"ANDROID_OPENSSL_SUFFIX");
788 if (suffix.isEmpty())
789 return defaultSuffix;
795 libssl->setFileNameAndVersion(
"ssl"_L1 + suffix, -1);
796 libcrypto->setFileNameAndVersion(
"crypto"_L1 + suffix, -1);
798 libssl->setFileNameAndVersion(
"ssl"_L1, -1);
799 libcrypto->setFileNameAndVersion(
"crypto"_L1, -1);
801 if (libcrypto->load() && libssl->load()) {
814 for (
const QString &crypto : cryptoList) {
817 if (crypto.endsWith(
"libcrypto.dylib"))
820 libcrypto->setFileNameAndVersion(crypto, -1);
821 if (libcrypto->load()) {
823 QString version = fi.completeSuffix();
825 for (
const QString &ssl : sslList) {
826 if (!ssl.endsWith(version))
829 libssl->setFileNameAndVersion(ssl, -1);
831 if (libssl->load()) {
855 static bool symbolsResolved = []() {
856 LoadedOpenSsl libs = loadOpenSsl();
857 if (!libs.ssl || !libs.crypto) {
858 qCWarning(lcTlsBackend,
"Failed to load libssl/libcrypto.");
915 if (!_q_OpenSSL_version || !_q_OpenSSL_version_num) {
918 qCWarning(lcTlsBackend,
"Incompatible version of OpenSSL");
922#if OPENSSL_VERSION_NUMBER >= 0x30000000
924 qCWarning(lcTlsBackend,
"Incompatible version of OpenSSL (built with OpenSSL >= 3.x, runtime version is < 3.x)");
929 qCWarning(lcTlsBackend,
"Incompatible version of OpenSSL (built with OpenSSL 1.x, runtime version is >= 3.x)");
1011#ifndef OPENSSL_NO_DES
1015#ifndef OPENSSL_NO_RC2
1018#ifndef OPENSSL_NO_AES
1075#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
1084#ifndef OPENSSL_NO_DEPRECATED_3_0
1127#ifndef OPENSSL_NO_EC
1164#ifndef OPENSSL_NO_PSK
1214#if OPENSSL_VERSION_MAJOR < 3
1222#ifndef OPENSSL_NO_NEXTPROTONEG
1241#ifndef OPENSSL_NO_EC
1251 return symbolsResolved;
\inmodule QtCore \reentrant
@ ExportExternalSymbolsHint
void setLoadHints(LoadHints hints)
Q_CORE_EXPORT QList< QStringView > split(QStringView sep, Qt::SplitBehavior behavior=Qt::KeepEmptyParts, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Splits the view into substring views wherever sep occurs, and returns the list of those string views.
int toInt(bool *ok=nullptr, int base=10) const
Returns the string view converted to an int using base base, which is 10 by default and must be betwe...
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
static QString fromLocal8Bit(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
QSet< QString >::iterator it
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
#define DEFINEFUNC(ret, func, args, argcall, funcret)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define qCWarning(category,...)
static ControlElement< T > * ptr(QWidget *widget)
GLboolean GLboolean GLboolean b
GLint GLint GLint GLint GLint x
[0]
GLenum GLuint GLint level
GLfloat GLfloat GLfloat w
[0]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint GLenum GLsizei length
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLsizei const GLuint * paths
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLdouble GLdouble GLdouble GLdouble q
GLsizei const GLchar *const * path
bool q_resolveOpenSslSymbols()
SSL_CTX int void DUMMYARG SSL const unsigned char * protos
SSL_CTX int void DUMMYARG SSL const unsigned char unsigned return SSL_get0_alpn_selected
#define RESOLVEFUNC(func)
SSL_CTX int void DUMMYARG SSL_set_alpn_protos
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)
SSL_CTX_set_next_proto_select_cb
#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)
unsigned long qssloptions
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 **)
STACK_OF(X509) *q_X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx)
#define DEFINEFUNC6(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, err, funcret)
#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)
long q_OpenSSL_version_num()
static QT_BEGIN_NAMESPACE QVariant hint(QPlatformIntegration::StyleHint h)
Q_CORE_EXPORT QByteArray qgetenv(const char *varName)
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
ReturnedValue read(const char *data)
gzip write("uncompressed data")
QSettings settings("MySoft", "Star Runner")
[0]
QTextStream out(stdout)
[7]
const QStringList filters({"Image files (*.png *.xpm *.jpg)", "Text files (*.txt)", "Any files (*)" })
[6]
QList< QSslCertificate > cert
[0]