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)
162DEFINEFUNC4(
void, DH_get0_pqg, const DH *dh, dh, const BIGNUM **
p,
p, const BIGNUM **
q,
q, const BIGNUM **
g,
g,
return,
DUMMYARG)
165DEFINEFUNC2(
int, DTLSv1_listen, SSL *
s,
s, BIO_ADDR *
c,
c,
return -1,
return)
170DEFINEFUNC2(
int, BIO_meth_set_write, BIO_METHOD *biom, biom, DgramWriteCallback
write,
write,
return 0,
return)
171DEFINEFUNC2(
int, BIO_meth_set_read, BIO_METHOD *biom, biom, DgramReadCallback
read,
read,
return 0,
return)
172DEFINEFUNC2(
int, BIO_meth_set_puts, BIO_METHOD *biom, biom, DgramPutsCallback puts, puts,
return 0,
return)
173DEFINEFUNC2(
int, BIO_meth_set_ctrl, BIO_METHOD *biom, biom, DgramCtrlCallback ctrl, ctrl,
return 0,
return)
174DEFINEFUNC2(
int, BIO_meth_set_create, BIO_METHOD *biom, biom, DgramCreateCallback crt, crt,
return 0,
return)
175DEFINEFUNC2(
int, BIO_meth_set_destroy, BIO_METHOD *biom, biom, DgramDestroyCallback dtr, dtr,
return 0,
return)
179DEFINEFUNC(
const OCSP_CERTID *, OCSP_SINGLERESP_get0_id,
const OCSP_SINGLERESP *
x,
x,
return nullptr,
return)
180DEFINEFUNC3(OCSP_RESPONSE *, d2i_OCSP_RESPONSE, OCSP_RESPONSE **
a,
a,
const unsigned char **
in,
in,
long len,
len,
return nullptr,
return)
182DEFINEFUNC(OCSP_BASICRESP *, OCSP_response_get1_basic, OCSP_RESPONSE *resp, resp,
return nullptr,
return)
184DEFINEFUNC(
int, OCSP_response_status, OCSP_RESPONSE *resp, resp,
return OCSP_RESPONSE_STATUS_INTERNALERROR,
return)
185DEFINEFUNC4(
int, OCSP_basic_verify, OCSP_BASICRESP *bs, bs,
STACK_OF(X509) *
certs,
certs, X509_STORE *st, st,
unsigned long flags,
flags,
return -1,
return)
186DEFINEFUNC(
int, OCSP_resp_count, OCSP_BASICRESP *bs, bs,
return 0,
return)
187DEFINEFUNC2(OCSP_SINGLERESP *, OCSP_resp_get0, OCSP_BASICRESP *bs, bs,
int idx, idx,
return nullptr,
return)
188DEFINEFUNC5(
int, OCSP_single_get0_status, OCSP_SINGLERESP *single, single,
int *reason, reason, ASN1_GENERALIZEDTIME **revtime, revtime,
189 ASN1_GENERALIZEDTIME **thisupd, thisupd, ASN1_GENERALIZEDTIME **nextupd, nextupd,
return -1,
return)
190DEFINEFUNC4(
int, OCSP_check_validity, ASN1_GENERALIZEDTIME *thisupd, thisupd, ASN1_GENERALIZEDTIME *nextupd, nextupd,
long nsec, nsec,
long maxsec, maxsec,
return 0,
return)
191DEFINEFUNC3(OCSP_CERTID *, OCSP_cert_to_id,
const EVP_MD *dgst, dgst, X509 *subject, subject, X509 *issuer, issuer,
return nullptr,
return)
193DEFINEFUNC5(
int, OCSP_id_get0_info, ASN1_OCTET_STRING **piNameHash, piNameHash, ASN1_OBJECT **pmd, pmd,
194 ASN1_OCTET_STRING **piKeyHash, piKeyHash, ASN1_INTEGER **pserial, pserial, OCSP_CERTID *cid, cid,
196DEFINEFUNC2(OCSP_RESPONSE *, OCSP_response_create,
int status, status, OCSP_BASICRESP *bs, bs,
return nullptr,
return)
197DEFINEFUNC(
const STACK_OF(X509) *, OCSP_resp_get0_certs,
const OCSP_BASICRESP *bs, bs,
return nullptr,
return)
198DEFINEFUNC2(
int, OCSP_id_cmp, OCSP_CERTID *
a,
a, OCSP_CERTID *
b,
b,
return -1,
return)
199DEFINEFUNC7(OCSP_SINGLERESP *, OCSP_basic_add1_status, OCSP_BASICRESP *
r,
r, OCSP_CERTID *
c,
c,
int s,
s,
200 int re, re, ASN1_TIME *rt, rt, ASN1_TIME *
t,
t, ASN1_TIME *
n,
n,
return nullptr,
return)
202DEFINEFUNC2(
int, i2d_OCSP_RESPONSE, OCSP_RESPONSE *
r,
r,
unsigned char **ppout, ppout,
return 0,
return)
203DEFINEFUNC6(
int, OCSP_basic_sign, OCSP_BASICRESP *br, br, X509 *signer, signer, EVP_PKEY *
key,
key,
204 const EVP_MD *dg, dg,
STACK_OF(X509) *cs, cs,
unsigned long flags,
flags,
return 0,
return)
207DEFINEFUNC(
void, AUTHORITY_INFO_ACCESS_free, AUTHORITY_INFO_ACCESS *
p,
p,
return,
return)
209DEFINEFUNC(
void *, BIO_get_data, BIO *
a,
a,
return nullptr,
return)
211DEFINEFUNC(
int, BIO_get_shutdown, BIO *
a,
a,
return -1,
return)
214DEFINEFUNC(
long, ASN1_INTEGER_get, ASN1_INTEGER *
a,
a,
return 0,
return)
215DEFINEFUNC2(
int, ASN1_INTEGER_cmp,
const ASN1_INTEGER *
a,
a,
const ASN1_INTEGER *
b,
b,
return 1,
return)
216DEFINEFUNC(
int, ASN1_STRING_length, ASN1_STRING *
a,
a,
return 0,
return)
217DEFINEFUNC2(
int, ASN1_STRING_to_UTF8,
unsigned char **
a,
a, ASN1_STRING *
b,
b,
return 0,
return)
218DEFINEFUNC2(
int, ASN1_TIME_to_tm,
const ASN1_TIME *
s,
s,
struct tm *tm, tm,
return 0,
return)
219DEFINEFUNC4(
long, BIO_ctrl, BIO *
a,
a,
int b,
b,
long c,
c,
void *
d,
d,
return -1,
return)
221DEFINEFUNC2(BIO *, BIO_new_mem_buf,
void *
a,
a,
int b,
b,
return nullptr,
return)
224DEFINEFUNC3(
int, BIO_write, BIO *
a,
a,
const void *
b,
b,
int c,
c,
return -1,
return)
225DEFINEFUNC(
int, BN_num_bits,
const BIGNUM *
a,
a,
return 0,
return)
226DEFINEFUNC2(BN_ULONG, BN_mod_word,
const BIGNUM *
a,
a, BN_ULONG
w,
w,
return static_cast<BN_ULONG
>(-1),
return)
227DEFINEFUNC3(X509 *, d2i_X509, X509 **
a,
a,
const unsigned char **
b,
b,
long c,
c,
return nullptr,
return)
228DEFINEFUNC2(
char *, ERR_error_string,
unsigned long a,
a,
char *
b,
b,
return nullptr,
return)
231DEFINEFUNC(EVP_CIPHER_CTX *, EVP_CIPHER_CTX_new,
void,
DUMMYARG,
return nullptr,
return)
233DEFINEFUNC4(
int, EVP_CIPHER_CTX_ctrl, EVP_CIPHER_CTX *
ctx,
ctx,
int type,
type,
int arg,
arg,
void *
ptr,
ptr,
return 0,
return)
234DEFINEFUNC2(
int, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX *
ctx,
ctx,
int keylen, keylen,
return 0,
return)
235DEFINEFUNC5(
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)
236DEFINEFUNC6(
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)
237DEFINEFUNC5(
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)
238DEFINEFUNC3(
int, EVP_CipherFinal, EVP_CIPHER_CTX *
ctx,
ctx,
unsigned char *
out,
out,
int *outl, outl,
return 0,
return)
239DEFINEFUNC(
const EVP_MD *, EVP_get_digestbyname,
const char *
name,
name,
return nullptr,
return)
240#ifndef OPENSSL_NO_DES
244#ifndef OPENSSL_NO_RC2
247#ifndef OPENSSL_NO_AES
255DEFINEFUNC(
int, EVP_PKEY_type,
int a,
a,
return NID_undef,
return)
256DEFINEFUNC2(
int, i2d_X509, X509 *
a,
a,
unsigned char **
b,
b,
return -1,
return)
257DEFINEFUNC(
const char *, OBJ_nid2sn,
int a,
a,
return nullptr,
return)
258DEFINEFUNC(
const char *, OBJ_nid2ln,
int a,
a,
return nullptr,
return)
259DEFINEFUNC(
int, OBJ_sn2nid,
const char *
s,
s,
return 0,
return)
260DEFINEFUNC(
int, OBJ_ln2nid,
const char *
s,
s,
return 0,
return)
261DEFINEFUNC3(
int, i2t_ASN1_OBJECT,
char *
a,
a,
int b,
b, ASN1_OBJECT *
c,
c,
return -1,
return)
262DEFINEFUNC4(
int, OBJ_obj2txt,
char *
a,
a,
int b,
b, ASN1_OBJECT *
c,
c,
int d,
d,
return -1,
return)
263DEFINEFUNC(
int, OBJ_obj2nid,
const ASN1_OBJECT *
a,
a,
return NID_undef,
return)
264DEFINEFUNC4(EVP_PKEY *, PEM_read_bio_PrivateKey, BIO *
a,
a, EVP_PKEY **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
266DEFINEFUNC4(DH *, PEM_read_bio_DHparams, BIO *
a,
a, DH **
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)
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)
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_base_id,
const EVP_PKEY *pkey, pkey,
return -1,
return)
312DEFINEFUNC(X509 *, SSL_get_peer_certificate, SSL *
a,
a,
return nullptr,
return)
313DEFINEFUNC(
int, EVP_PKEY_base_id, EVP_PKEY *
a,
a,
return NID_undef,
return)
316DEFINEFUNC(
long, SSL_get_verify_result,
const SSL *
a,
a,
return -1,
return)
317DEFINEFUNC(SSL *, SSL_new, SSL_CTX *
a,
a,
return nullptr,
return)
318DEFINEFUNC(SSL_CTX *, SSL_get_SSL_CTX, SSL *
a,
a,
return nullptr,
return)
319DEFINEFUNC4(
long, SSL_ctrl, SSL *
a,
a,
int cmd, cmd,
long larg, larg,
void *parg, parg,
return -1,
return)
324DEFINEFUNC(
int, SSL_shutdown, SSL *
a,
a,
return -1,
return)
325DEFINEFUNC(
int, SSL_in_init,
const SSL *
a,
a,
return 0,
return)
326DEFINEFUNC(
int, SSL_get_shutdown,
const SSL *ssl, ssl,
return 0,
return)
327DEFINEFUNC2(
int, SSL_set_session, SSL* to, to, SSL_SESSION *session, session,
return -1,
return)
329DEFINEFUNC(SSL_SESSION*, SSL_get1_session, SSL *ssl, ssl,
return nullptr,
return)
330DEFINEFUNC(SSL_SESSION*, SSL_get_session,
const SSL *ssl, ssl,
return nullptr,
return)
331DEFINEFUNC3(
int, SSL_set_ex_data, SSL *ssl, ssl,
int idx, idx,
void *
arg,
arg,
return 0,
return)
332DEFINEFUNC2(
void *, SSL_get_ex_data,
const SSL *ssl, ssl,
int idx, idx,
return nullptr,
return)
334#ifndef OPENSSL_NO_PSK
340DEFINEFUNC3(
int, SSL_write, SSL *
a,
a,
const void *
b,
b,
int c,
c,
return -1,
return)
342DEFINEFUNC4(
int, X509_digest,
const X509 *x509, x509,
const EVP_MD *
type,
type,
unsigned char *md, md,
unsigned int *
len,
len,
return -1,
return)
343DEFINEFUNC(X509 *, X509_dup, X509 *
a,
a,
return nullptr,
return)
352DEFINEFUNC4(
void *, X509_get_ext_d2i, X509 *
a,
a,
int b,
b,
int *
c,
c,
int *
d,
d,
return nullptr,
return)
375DEFINEFUNC4(
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)
385#if OPENSSL_VERSION_MAJOR < 3
386DEFINEFUNC3(
int, SSL_CTX_load_verify_locations, SSL_CTX *
ctx,
ctx,
const char *CAfile, CAfile,
const char *CApath, CApath,
return 0,
return)
388DEFINEFUNC2(
int, SSL_CTX_load_verify_dir, SSL_CTX *
ctx,
ctx,
const char *CApath, CApath,
return 0,
return)
391DEFINEFUNC2(
int, i2d_SSL_SESSION, SSL_SESSION *
in,
in,
unsigned char **pp, pp,
return 0,
return)
392DEFINEFUNC3(SSL_SESSION *, d2i_SSL_SESSION, SSL_SESSION **
a,
a,
const unsigned char **pp, pp,
long length,
length,
return nullptr,
return)
394#ifndef OPENSSL_NO_NEXTPROTONEG
396 const unsigned char *
in,
in,
unsigned int inlen, inlen,
397 const unsigned char *client, client,
unsigned int client_len, client_len,
400 int (*
cb) (SSL *ssl,
unsigned char **
out,
401 unsigned char *outlen,
402 const
unsigned char *
in,
403 unsigned int inlen,
void *
arg),
cb,
410 int (*
cb) (SSL *ssl, const
unsigned char **
out,
411 unsigned char *outlen,
412 const
unsigned char *
in,
413 unsigned int inlen,
void *
arg),
cb,
428DEFINEFUNC2(
void *, BIO_get_ex_data, BIO *
b,
b,
int idx, idx,
return nullptr,
return)
435DEFINEFUNC2(
int, i2d_DHparams, DH *
a,
a,
unsigned char **
p,
p,
return -1,
return)
436DEFINEFUNC2(
int, DH_check, DH *dh, dh,
int *codes, codes,
return 0,
return)
440DEFINEFUNC2(
size_t, EC_get_builtin_curves, EC_builtin_curve *
r,
r,
size_t nitems, nitems,
return 0,
return)
444DEFINEFUNC5(
int, PKCS12_parse, PKCS12 *p12, p12,
const char *pass, pass, EVP_PKEY **pkey, pkey, \
446DEFINEFUNC2(PKCS12 *, d2i_PKCS12_bio, BIO *bio, bio, PKCS12 **pkcs12, pkcs12,
return nullptr,
return);
449#ifndef OPENSSL_NO_DEPRECATED_3_0
451DEFINEFUNC4(DSA *, PEM_read_bio_DSA_PUBKEY, BIO *
a,
a, DSA **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
452DEFINEFUNC4(RSA *, PEM_read_bio_RSA_PUBKEY, BIO *
a,
a, RSA **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
453DEFINEFUNC4(DSA *, PEM_read_bio_DSAPrivateKey, BIO *
a,
a, DSA **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
454DEFINEFUNC4(RSA *, PEM_read_bio_RSAPrivateKey, BIO *
a,
a, RSA **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
456DEFINEFUNC2(
int, PEM_write_bio_DSA_PUBKEY, BIO *
a,
a, DSA *
b,
b,
return 0,
return)
457DEFINEFUNC2(
int, PEM_write_bio_RSA_PUBKEY, BIO *
a,
a, RSA *
b,
b,
return 0,
return)
458DEFINEFUNC7(
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)
459DEFINEFUNC7(
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)
461DEFINEFUNC2(
int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *
a,
a, RSA *
b,
b,
return -1,
return)
471DEFINEFUNC(
int, DH_bits, DH *dh, dh,
return 0,
return)
473DEFINEFUNC(DSA *, EVP_PKEY_get1_DSA, EVP_PKEY *
a,
a,
return nullptr,
return)
474DEFINEFUNC(RSA *, EVP_PKEY_get1_RSA, EVP_PKEY *
a,
a,
return nullptr,
return)
475DEFINEFUNC(DH *, EVP_PKEY_get1_DH, EVP_PKEY *
a,
a,
return nullptr,
return)
477DEFINEFUNC2(
int, EVP_PKEY_cmp,
const EVP_PKEY *
a,
a,
const EVP_PKEY *
b,
b,
return -1,
return)
478DEFINEFUNC3(
int, EVP_PKEY_assign, EVP_PKEY *
a,
a,
int b,
b,
void *
r,
r,
return -1,
return)
480DEFINEFUNC2(
int, EVP_PKEY_set1_RSA, EVP_PKEY *
a,
a, RSA *
b,
b,
return -1,
return)
481DEFINEFUNC2(
int, EVP_PKEY_set1_DSA, EVP_PKEY *
a,
a, DSA *
b,
b,
return -1,
return)
482DEFINEFUNC2(
int, EVP_PKEY_set1_DH, EVP_PKEY *
a,
a, DH *
b,
b,
return -1,
return)
486DEFINEFUNC4(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)
487DEFINEFUNC4(EC_KEY *, PEM_read_bio_ECPrivateKey, BIO *
a,
a, EC_KEY **
b,
b, pem_password_cb *
c,
c,
void *
d,
d,
return nullptr,
return)
489DEFINEFUNC2(
int, PEM_write_bio_EC_PUBKEY, BIO *
a,
a, EC_KEY *
b,
b,
return 0,
return)
490DEFINEFUNC7(
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)
492DEFINEFUNC(
const EC_GROUP*, EC_KEY_get0_group,
const EC_KEY* k, k,
return nullptr,
return)
493DEFINEFUNC(
int, EC_GROUP_get_degree,
const EC_GROUP*
g,
g,
return 0,
return)
495DEFINEFUNC2(
int, EVP_PKEY_set1_EC_KEY, EVP_PKEY *
a,
a, EC_KEY *
b,
b,
return -1,
return)
496DEFINEFUNC(EC_KEY *, EVP_PKEY_get1_EC_KEY, EVP_PKEY *
a,
a,
return nullptr,
return)
498DEFINEFUNC(EC_KEY *, EC_KEY_dup,
const EC_KEY *ec, ec,
return nullptr,
return)
499DEFINEFUNC(EC_KEY *, EC_KEY_new_by_curve_name,
int nid, nid,
return nullptr,
return)
508#define RESOLVEFUNC(func) \
509 if (!(_q_##func = _q_PTR_##func(libs.ssl->resolve(#func))) \
510 && !(_q_##func = _q_PTR_##func(libs.crypto->resolve(#func)))) \
511 qsslSocketCannotResolveSymbolWarning(#func);
513#if !defined QT_LINKED_OPENSSL
515#if !QT_CONFIG(library)
518 qCWarning(lcTlsBackend,
"QSslSocket: unable to resolve symbols. Qt is configured without the "
519 "'library' feature, which means runtime resolving of libraries won't work.");
520 qCWarning(lcTlsBackend,
"Either compile Qt statically or with support for runtime resolving "
527struct NumericallyLess
529 typedef bool result_type;
549 typedef bool result_type;
552 const auto lhsparts = lhs.
split(u
'.');
553 const auto rhsparts = rhs.
split(u
'.');
554 Q_ASSERT(lhsparts.size() > 1 && rhsparts.size() > 1);
557 return std::lexicographical_compare(rhsparts.begin() + 1, rhsparts.end(),
558 lhsparts.begin() + 1, lhsparts.end(),
563#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
564static int dlIterateCallback(
struct dl_phdr_info *
info,
size_t size,
void *
data)
566 if (
size <
sizeof (
info->dlpi_addr) + sizeof (
info->dlpi_name))
570 if (!
path.isEmpty()) {
588 CFBundleGetPackageInfo(CFBundleGetMainBundle(), &packageType,
nullptr);
589 if (packageType == FOUR_CHAR_CODE(
'APPL')) {
591 QUrl frameworksUrl = QUrl::fromCFURL(
QCFType<CFURLRef>(CFBundleCopyPrivateFrameworksURL(CFBundleGetMainBundle())));
597 paths <<
"/lib"_L1 <<
"/usr/lib"_L1 <<
"/usr/local/lib"_L1;
598 paths <<
"/lib64"_L1 <<
"/usr/lib64"_L1 <<
"/usr/local/lib64"_L1;
599 paths <<
"/lib32"_L1 <<
"/usr/lib32"_L1 <<
"/usr/local/lib32"_L1;
601#if defined(Q_OS_ANDROID)
602 paths <<
"/system/lib"_L1;
603#elif defined(Q_OS_LINUX)
606 dl_iterate_phdr(dlIterateCallback, &loadedPaths);
607 std::move(loadedPaths).appendTo(
paths);
624 std::sort(entryList.begin(), entryList.end(), LibGreaterThan());
634 return findAllLibs(
"libssl.*"_L1);
639 return findAllLibs(
"libcrypto.*"_L1);
643#if (OPENSSL_VERSION_NUMBER >> 28) < 3
644#define QT_OPENSSL_VERSION "1_1"
645#elif OPENSSL_VERSION_MAJOR == 3
646#define QT_OPENSSL_VERSION "3"
651struct LoadedOpenSsl {
652 std::unique_ptr<QSystemLibrary> ssl, crypto;
657 auto ssleay32 = std::make_unique<QSystemLibrary>(ssleay32LibName);
658 if (!ssleay32->load(
false)) {
662 auto libeay32 = std::make_unique<QSystemLibrary>(libeay32LibName);
663 if (!libeay32->load(
false)) {
667 result.ssl = std::move(ssleay32);
668 result.crypto = std::move(libeay32);
672static LoadedOpenSsl loadOpenSsl()
680#if defined(Q_PROCESSOR_X86_64)
681#define QT_SSL_SUFFIX "-x64"
682#elif defined(Q_PROCESSOR_ARM_64)
683#define QT_SSL_SUFFIX "-arm64"
684#elif defined(Q_PROCESSOR_ARM_32)
685#define QT_SSL_SUFFIX "-arm"
690 tryToLoadOpenSslWin32Library(
"libssl-" QT_OPENSSL_VERSION QT_SSL_SUFFIX
""_L1,
691 "libcrypto-" QT_OPENSSL_VERSION QT_SSL_SUFFIX
""_L1,
result);
698struct LoadedOpenSsl {
699 std::unique_ptr<QLibrary> ssl, crypto;
702static LoadedOpenSsl loadOpenSsl()
704 LoadedOpenSsl
result = { std::make_unique<QLibrary>(), std::make_unique<QLibrary>() };
706# if defined(Q_OS_UNIX)
746#if defined(SHLIB_VERSION_NUMBER) && !defined(Q_OS_QNX)
750 if (libcrypto->
load() && libssl->
load()) {
766# if defined(Q_OS_ANDROID)
768 auto openSSLSuffix = [](
const QByteArray &defaultSuffix = {}) {
769 auto suffix =
qgetenv(
"ANDROID_OPENSSL_SUFFIX");
770 if (suffix.isEmpty())
771 return defaultSuffix;
783 if (libcrypto->
load() && libssl->
load()) {
796 for (
const QString &crypto : cryptoList) {
799 if (crypto.endsWith(
"libcrypto.dylib"))
803 if (libcrypto->
load()) {
807 for (
const QString &ssl : sslList) {
808 if (!ssl.endsWith(version))
813 if (libssl->
load()) {
837 static bool symbolsResolved = []() {
838 LoadedOpenSsl libs = loadOpenSsl();
839 if (!libs.ssl || !libs.crypto) {
840 qCWarning(lcTlsBackend,
"Failed to load libssl/libcrypto.");
898 if (!_q_OpenSSL_version || !_q_OpenSSL_version_num) {
901 qCWarning(lcTlsBackend,
"Incompatible version of OpenSSL");
905#if OPENSSL_VERSION_NUMBER >= 0x30000000
907 qCWarning(lcTlsBackend,
"Incompatible version of OpenSSL (built with OpenSSL >= 3.x, runtime version is < 3.x)");
912 qCWarning(lcTlsBackend,
"Incompatible version of OpenSSL (built with OpenSSL 1.x, runtime version is >= 3.x)");
994#ifndef OPENSSL_NO_DES
998#ifndef OPENSSL_NO_RC2
1001#ifndef OPENSSL_NO_AES
1059#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
1068#ifndef OPENSSL_NO_DEPRECATED_3_0
1101#ifndef OPENSSL_NO_EC
1138#ifndef OPENSSL_NO_PSK
1188#if OPENSSL_VERSION_MAJOR < 3
1196#ifndef OPENSSL_NO_NEXTPROTONEG
1220#ifndef OPENSSL_NO_EC
1230 return symbolsResolved;
\inmodule QtCore \reentrant
QString completeSuffix() const
Returns the complete suffix (extension) of the file.
QString absolutePath() const
Returns a file's path absolute path.
\inmodule QtCore \reentrant
bool load()
Loads the library and returns true if the library was loaded successfully; otherwise returns false.
@ ExportExternalSymbolsHint
void setFileNameAndVersion(const QString &fileName, int verNum)
Sets the fileName property and major version number to fileName and versionNumber respectively.
bool unload()
Unloads the library and returns true if the library could be unloaded; otherwise returns false.
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...
QStringList split(const QString &sep, Qt::SplitBehavior behavior=Qt::KeepEmptyParts, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Splits the string into substrings wherever sep occurs, and returns the list of those strings.
static QString fromLocal8Bit(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QUrl resolved(const QUrl &relative) const
Returns the result of the merge of this URL with relative.
QString path(ComponentFormattingOptions options=FullyDecoded) const
Returns the path of the URL.
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
GLsizei const GLuint * paths
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLdouble GLdouble GLdouble GLdouble q
GLsizei const GLchar *const * path
bool q_resolveOpenSslSymbols()
SSL_CTX int(* cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg)
SSL_CTX int(*) void DUMMYAR SSL_set_alpn_protos)
SSL_CTX int(*) void DUMMYARG SSL const unsigned char protos)
#define RESOLVEFUNC(func)
SSL_CTX int(*) void DUMMYAR DEFINEFUNC3)(void, SSL_get0_next_proto_negotiated, const SSL *s, s, const unsigned char **data, data, unsigned *len, len, return, DUMMYARG) DEFINEFUNC3(int
SSL_CTX int(*) void DUMMYARG SSL const unsigned char unsigned retur SSL_get0_alpn_selected)
SSL_CTX int(*) void DUMMYARG SSL const unsigned char unsigned return const SSL const unsigned char unsigned DUMMYAR DEFINEFUNC5)(int, PKCS12_parse, PKCS12 *p12, p12, const char *pass, pass, EVP_PKEY **pkey, pkey, X509 **cert, cert, STACK_OF(X509) **ca, ca, return 1, return)
SSL_CTX_set_next_proto_select_cb
SSL_CTX int(*) void DUMMYARG SSL const unsigned char unsigne protos_len)
#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)
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)
QFileInfo info(fileName)
[8]
QFileInfo fi("c:/temp/foo")
[newstuff]
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]