Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qsslsocket_openssl_symbols_p.h
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// Copyright (C) 2014 BlackBerry Limited. All rights reserved.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:critical reason:execute-external-code
5
6/****************************************************************************
7**
8** In addition, as a special exception, the copyright holders listed above give
9** permission to link the code of its release of Qt with the OpenSSL project's
10** "OpenSSL" library (or modified versions of the "OpenSSL" library that use the
11** same license as the original version), and distribute the linked executables.
12**
13** You must comply with the GNU General Public License version 2 in all
14** respects for all of the code used other than the "OpenSSL" code. If you
15** modify this file, you may extend this exception to your version of the file,
16** but you are not obligated to do so. If you do not wish to do so, delete
17** this exception statement from your version of this file.
18**
19****************************************************************************/
20
21#ifndef QSSLSOCKET_OPENSSL_SYMBOLS_P_H
22#define QSSLSOCKET_OPENSSL_SYMBOLS_P_H
23
24
25//
26// W A R N I N G
27// -------------
28//
29// This file is not part of the Qt API. It exists purely as an
30// implementation detail. This header file may change from version to
31// version without notice, or even be removed.
32//
33// We mean it.
34//
35
36#include <QtNetwork/private/qtnetworkglobal_p.h>
37
38#include "qopenssl_p.h"
39
40#include <QtCore/qglobal.h>
41
42#if QT_CONFIG(ocsp)
43#include <QtNetwork/private/qocsp_p.h>
44#endif
45
47
48#define DUMMYARG
49
50#if !defined QT_LINKED_OPENSSL
51// **************** Shared declarations ******************
52// ret func(arg)
53
54# define DEFINEFUNC(ret, func, arg, a, err, funcret)
55 typedef ret (*_q_PTR_##func)(arg);
56 static _q_PTR_##func _q_##func = nullptr;
57 ret q_##func(arg) {
58 if (Q_UNLIKELY(!_q_##func)) {
59 qsslSocketUnresolvedSymbolWarning(#func);
60 err;
61 }
62 funcret _q_##func(a);
63 }
64
65// ret func(arg1, arg2)
66# define DEFINEFUNC2(ret, func, arg1, a, arg2, b, err, funcret)
67 typedef ret (*_q_PTR_##func)(arg1, arg2);
68 static _q_PTR_##func _q_##func = nullptr;
69 ret q_##func(arg1, arg2) {
70 if (Q_UNLIKELY(!_q_##func)) {
71 qsslSocketUnresolvedSymbolWarning(#func);
72 err;
73 }
74 funcret _q_##func(a, b);
75 }
76
77// ret func(arg1, arg2, arg3)
78# define DEFINEFUNC3(ret, func, arg1, a, arg2, b, arg3, c, err, funcret)
79 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3);
80 static _q_PTR_##func _q_##func = nullptr;
81 ret q_##func(arg1, arg2, arg3) {
82 if (Q_UNLIKELY(!_q_##func)) {
83 qsslSocketUnresolvedSymbolWarning(#func);
84 err;
85 }
86 funcret _q_##func(a, b, c);
87 }
88
89// ret func(arg1, arg2, arg3, arg4)
90# define DEFINEFUNC4(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, err, funcret)
91 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4);
92 static _q_PTR_##func _q_##func = nullptr;
93 ret q_##func(arg1, arg2, arg3, arg4) {
94 if (Q_UNLIKELY(!_q_##func)) {
95 qsslSocketUnresolvedSymbolWarning(#func);
96 err;
97 }
98 funcret _q_##func(a, b, c, d);
99 }
100
101// ret func(arg1, arg2, arg3, arg4, arg5)
102# define DEFINEFUNC5(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, err, funcret)
103 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4, arg5);
104 static _q_PTR_##func _q_##func = nullptr;
105 ret q_##func(arg1, arg2, arg3, arg4, arg5) {
106 if (Q_UNLIKELY(!_q_##func)) {
107 qsslSocketUnresolvedSymbolWarning(#func);
108 err;
109 }
110 funcret _q_##func(a, b, c, d, e);
111 }
112
113// ret func(arg1, arg2, arg3, arg4, arg5, arg6)
114# define DEFINEFUNC6(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, err, funcret)
115 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4, arg5, arg6);
116 static _q_PTR_##func _q_##func = nullptr;
117 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6) {
118 if (Q_UNLIKELY(!_q_##func)) {
119 qsslSocketUnresolvedSymbolWarning(#func);
120 err;
121 }
122 funcret _q_##func(a, b, c, d, e, f);
123 }
124
125// ret func(arg1, arg2, arg3, arg4, arg5, arg6, arg7)
126# define DEFINEFUNC7(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, err, funcret)
127 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
128 static _q_PTR_##func _q_##func = nullptr;
129 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7) {
130 if (Q_UNLIKELY(!_q_##func)) {
131 qsslSocketUnresolvedSymbolWarning(#func);
132 err;
133 }
134 funcret _q_##func(a, b, c, d, e, f, g);
135 }
136
137// ret func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
138# define DEFINEFUNC8(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, arg8, h, err, funcret)
139 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
140 static _q_PTR_##func _q_##func = nullptr;
141 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) {
142 if (Q_UNLIKELY(!_q_##func)) {
143 qsslSocketUnresolvedSymbolWarning(#func);
144 err;
145 }
146 funcret _q_##func(a, b, c, d, e, f, g, h);
147 }
148
149// ret func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
150# define DEFINEFUNC9(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, arg8, h, arg9, i, err, funcret)
151 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
152 static _q_PTR_##func _q_##func = nullptr;
153 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {
154 if (Q_UNLIKELY(!_q_##func)) {
155 qsslSocketUnresolvedSymbolWarning(#func);
156 err;
157 }
158 funcret _q_##func(a, b, c, d, e, f, g, h, i);
159 }
160// **************** Shared declarations ******************
161
162#else // !defined QT_LINKED_OPENSSL
163
164// **************** Static declarations ******************
165
166// ret func(arg)
167# define DEFINEFUNC(ret, func, arg, a, err, funcret)
168 ret q_##func(arg) { funcret func(a); }
169
170// ret func(arg1, arg2)
171# define DEFINEFUNC2(ret, func, arg1, a, arg2, b, err, funcret)
172 ret q_##func(arg1, arg2) { funcret func(a, b); }
173
174// ret func(arg1, arg2, arg3)
175# define DEFINEFUNC3(ret, func, arg1, a, arg2, b, arg3, c, err, funcret)
176 ret q_##func(arg1, arg2, arg3) { funcret func(a, b, c); }
177
178// ret func(arg1, arg2, arg3, arg4)
179# define DEFINEFUNC4(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, err, funcret)
180 ret q_##func(arg1, arg2, arg3, arg4) { funcret func(a, b, c, d); }
181
182// ret func(arg1, arg2, arg3, arg4, arg5)
183# define DEFINEFUNC5(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, err, funcret)
184 ret q_##func(arg1, arg2, arg3, arg4, arg5) { funcret func(a, b, c, d, e); }
185
186// ret func(arg1, arg2, arg3, arg4, arg5, arg6)
187# define DEFINEFUNC6(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, err, funcret)
188 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6) { funcret func(a, b, c, d, e, f); }
189
190// ret func(arg1, arg2, arg3, arg4, arg5, arg6, arg7)
191# define DEFINEFUNC7(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, err, funcret)
192 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { funcret func(a, b, c, d, e, f, g); }
193
194// ret func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
195# define DEFINEFUNC8(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, arg8, h, err, funcret)
196 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) { funcret func(a, b, c, d, e, f, g, h); }
197
198// ret func(arg1, arg2, arg3, arg4, arg6, arg7, arg8, arg9)
199# define DEFINEFUNC9(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, arg8, h, arg9, i, err, funcret)
200 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { funcret func(a, b, c, d, e, f, g, h, i); }
201
202// **************** Static declarations ******************
203
204#endif // !defined QT_LINKED_OPENSSL
205#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
206typedef uint64_t qssloptions;
207#else
208typedef unsigned long qssloptions;
209#endif
210// TODO: the following lines previously were a part of 1.1 - specific header.
211// To reduce the amount of the change, I'm directly copying and pasting the
212// content of the header here. Later, can be better sorted/split into groups,
213// depending on the functionality.
214
215const unsigned char * q_ASN1_STRING_get0_data(const ASN1_STRING *x);
216
217BIO *q_BIO_new(const BIO_METHOD *a);
218const BIO_METHOD *q_BIO_s_mem();
219
220void q_AUTHORITY_INFO_ACCESS_free(AUTHORITY_INFO_ACCESS *a);
221int q_EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c);
222int q_EVP_PKEY_up_ref(EVP_PKEY *a);
223EVP_PKEY_CTX *q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
224void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
225int q_EVP_PKEY_param_check(EVP_PKEY_CTX *ctx);
226int q_OPENSSL_sk_num(OPENSSL_STACK *a);
227void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void (*b)(void *));
228OPENSSL_STACK *q_OPENSSL_sk_new_null();
229void q_OPENSSL_sk_push(OPENSSL_STACK *st, void *data);
230void q_OPENSSL_sk_free(OPENSSL_STACK *a);
231void * q_OPENSSL_sk_value(OPENSSL_STACK *a, int b);
233qssloptions q_SSL_CTX_set_options(SSL_CTX *ctx, qssloptions op);
234int q_OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
235size_t q_SSL_get_client_random(SSL *a, unsigned char *out, size_t outlen);
236size_t q_SSL_SESSION_get_master_key(const SSL_SESSION *session, unsigned char *out, size_t outlen);
237int q_CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
238const SSL_METHOD *q_TLS_method();
239const SSL_METHOD *q_TLS_client_method();
240const SSL_METHOD *q_TLS_server_method();
241ASN1_TIME *q_X509_getm_notBefore(X509 *a);
242ASN1_TIME *q_X509_getm_notAfter(X509 *a);
243void q_ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it);
244void q_X509V3_conf_free(CONF_VALUE *val);
245
246void q_X509_up_ref(X509 *a);
247long q_X509_get_version(X509 *a);
248EVP_PKEY *q_X509_get_pubkey(X509 *a);
249void q_X509_STORE_set_verify_cb(X509_STORE *ctx, X509_STORE_CTX_verify_cb verify_cb);
250int q_X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data);
251void *q_X509_STORE_get_ex_data(X509_STORE *r, int idx);
252STACK_OF(X509) *q_X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx);
253
254# define q_SSL_load_error_strings() q_OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS
255 | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
256
257#define q_SKM_sk_num(st) q_OPENSSL_sk_num((OPENSSL_STACK *)st)
258#define q_SKM_sk_value(type, st,i) (type *)q_OPENSSL_sk_value((OPENSSL_STACK *)st, i)
259
260#define q_OPENSSL_add_all_algorithms_conf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS
261 | OPENSSL_INIT_ADD_ALL_DIGESTS
262 | OPENSSL_INIT_LOAD_CONFIG, NULL)
263#define q_OPENSSL_add_all_algorithms_noconf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS
264 | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
265
266int q_OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
267
269const char *q_OpenSSL_version(int type);
270
271unsigned long q_SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session);
272unsigned long q_SSL_set_options(SSL *s, unsigned long op);
273
274#ifdef TLS1_3_VERSION
275int q_SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str);
276
277// The functions below do not really have to be ifdefed like this, but for now
278// they only used in TLS 1.3 handshake (and probably future versions).
279// Plus, 'is resumalbe' is OpenSSL 1.1.1-only (and again we need it for
280// TLS 1.3-specific session management).
281
282extern "C"
283{
284using NewSessionCallback = int (*)(SSL *, SSL_SESSION *);
285}
286
287void q_SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, NewSessionCallback cb);
288int q_SSL_SESSION_is_resumable(const SSL_SESSION *s);
289
290#define q_SSL_CTX_set_session_cache_mode(ctx,m)
291 q_SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL)
292
293#endif
294
295#if QT_CONFIG(dtls)
296// Functions and types required for DTLS support:
297extern "C"
298{
299
300typedef int (*CookieVerifyCallback)(SSL *, const unsigned char *, unsigned);
301typedef int (*DgramWriteCallback) (BIO *, const char *, int);
302typedef int (*DgramReadCallback) (BIO *, char *, int);
303typedef int (*DgramPutsCallback) (BIO *, const char *);
304typedef long (*DgramCtrlCallback) (BIO *, int, long, void *);
305typedef int (*DgramCreateCallback) (BIO *);
306typedef int (*DgramDestroyCallback) (BIO *);
307
308}
309
310int q_DTLSv1_listen(SSL *s, BIO_ADDR *client);
311BIO_ADDR *q_BIO_ADDR_new();
312void q_BIO_ADDR_free(BIO_ADDR *ap);
313
314// API we need for a custom dgram BIO:
315
316BIO_METHOD *q_BIO_meth_new(int type, const char *name);
317void q_BIO_meth_free(BIO_METHOD *biom);
318int q_BIO_meth_set_write(BIO_METHOD *biom, DgramWriteCallback);
319int q_BIO_meth_set_read(BIO_METHOD *biom, DgramReadCallback);
320int q_BIO_meth_set_puts(BIO_METHOD *biom, DgramPutsCallback);
321int q_BIO_meth_set_ctrl(BIO_METHOD *biom, DgramCtrlCallback);
322int q_BIO_meth_set_create(BIO_METHOD *biom, DgramCreateCallback);
323int q_BIO_meth_set_destroy(BIO_METHOD *biom, DgramDestroyCallback);
324
325#endif // dtls
326
327void q_BIO_set_data(BIO *a, void *ptr);
328void *q_BIO_get_data(BIO *a);
329void q_BIO_set_init(BIO *a, int init);
331void q_BIO_set_shutdown(BIO *a, int shut);
332
333#if QT_CONFIG(ocsp)
334const OCSP_CERTID *q_OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x);
335#endif // ocsp
336
337#define q_SSL_CTX_set_min_proto_version(ctx, version)
338 q_SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, nullptr)
339
340#define q_SSL_CTX_set_max_proto_version(ctx, version)
341 q_SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, nullptr)
342
343extern "C" {
344typedef int (*q_SSL_psk_use_session_cb_func_t)(SSL *, const EVP_MD *, const unsigned char **, size_t *,
345 SSL_SESSION **);
346}
348// Here the content of the 1.1 header ends.
349
351long q_ASN1_INTEGER_get(ASN1_INTEGER *a);
352int q_ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y);
353int q_ASN1_STRING_length(ASN1_STRING *a);
354int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b);
355int q_ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm);
356long q_BIO_ctrl(BIO *a, int b, long c, void *d);
357int q_BIO_free(BIO *a);
358BIO *q_BIO_new_mem_buf(void *a, int b);
359int q_BIO_read(BIO *a, void *b, int c);
360int q_BIO_write(BIO *a, const void *b, int c);
361int q_BN_num_bits(const BIGNUM *a);
362int q_BN_is_word(BIGNUM *a, BN_ULONG w);
363BN_ULONG q_BN_mod_word(const BIGNUM *a, BN_ULONG w);
364
365X509 *q_d2i_X509(X509 **a, const unsigned char **b, long c);
366char *q_ERR_error_string(unsigned long a, char *b);
367void q_ERR_error_string_n(unsigned long e, char *buf, size_t len);
368unsigned long q_ERR_get_error();
369EVP_CIPHER_CTX *q_EVP_CIPHER_CTX_new();
370void q_EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);
371int q_EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
372int q_EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
373int q_EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv, int enc);
374int q_EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc);
375int q_EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl);
376int q_EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
377const EVP_MD *q_EVP_get_digestbyname(const char *name);
378
379#ifndef OPENSSL_NO_DES
380const EVP_CIPHER *q_EVP_des_cbc();
381const EVP_CIPHER *q_EVP_des_ede3_cbc();
382#endif // OPENSSL_NO_DES
383
384#ifndef OPENSSL_NO_RC2
385const EVP_CIPHER *q_EVP_rc2_cbc();
386#endif // OPENSSL_NO_RC2
387
388#ifndef OPENSSL_NO_AES
389const EVP_CIPHER *q_EVP_aes_128_cbc();
390const EVP_CIPHER *q_EVP_aes_192_cbc();
391const EVP_CIPHER *q_EVP_aes_256_cbc();
392#endif // OPENSSL_NO_AES
393
394const EVP_MD *q_EVP_sha1();
395
396void q_EVP_PKEY_free(EVP_PKEY *a);
398EVP_PKEY *q_EVP_PKEY_new();
399int q_i2d_X509(X509 *a, unsigned char **b);
400const char *q_OBJ_nid2sn(int a);
401const char *q_OBJ_nid2ln(int a);
402int q_OBJ_sn2nid(const char *s);
403int q_OBJ_ln2nid(const char *s);
404int q_i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *obj);
405int q_OBJ_obj2txt(char *buf, int buf_len, ASN1_OBJECT *obj, int no_name);
406int q_OBJ_obj2nid(const ASN1_OBJECT *a);
407#define q_EVP_get_digestbynid(a) q_EVP_get_digestbyname(q_OBJ_nid2sn(a))
408EVP_PKEY *q_PEM_read_bio_PrivateKey(BIO *a, EVP_PKEY **b, pem_password_cb *c, void *d);
409
410int q_PEM_write_bio_PrivateKey(BIO *a, EVP_PKEY *b, const EVP_CIPHER *c, unsigned char *d,
411 int e, pem_password_cb *f, void *g);
412int q_PEM_write_bio_PrivateKey_traditional(BIO *a, EVP_PKEY *b, const EVP_CIPHER *c, unsigned char *d,
413 int e, pem_password_cb *f, void *g);
414EVP_PKEY *q_PEM_read_bio_PUBKEY(BIO *a, EVP_PKEY **b, pem_password_cb *c, void *d);
415int q_PEM_write_bio_PUBKEY(BIO *a, EVP_PKEY *b);
416
417void q_RAND_seed(const void *a, int b);
419int q_RAND_bytes(unsigned char *b, int n);
420int q_SSL_accept(SSL *a);
421int q_SSL_clear(SSL *a);
422char *q_SSL_CIPHER_description(const SSL_CIPHER *a, char *b, int c);
423int q_SSL_CIPHER_get_bits(const SSL_CIPHER *a, int *b);
424BIO *q_SSL_get_rbio(const SSL *s);
425int q_SSL_connect(SSL *a);
426int q_SSL_CTX_check_private_key(const SSL_CTX *a);
427long q_SSL_CTX_ctrl(SSL_CTX *a, int b, long c, void *d);
428void q_SSL_CTX_free(SSL_CTX *a);
429SSL_CTX *q_SSL_CTX_new(const SSL_METHOD *a);
430int q_SSL_CTX_set_cipher_list(SSL_CTX *a, const char *b);
432void q_SSL_CTX_set_verify(SSL_CTX *a, int b, int (*c)(int, X509_STORE_CTX *));
433void q_SSL_CTX_set_verify_depth(SSL_CTX *a, int b);
434extern "C" {
435typedef void (*GenericCallbackType)();
436}
438int q_SSL_CTX_use_certificate(SSL_CTX *a, X509 *b);
439int q_SSL_CTX_use_certificate_file(SSL_CTX *a, const char *b, int c);
440int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b);
441int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c);
442X509_STORE *q_SSL_CTX_get_cert_store(const SSL_CTX *a);
443SSL_CONF_CTX *q_SSL_CONF_CTX_new();
444void q_SSL_CONF_CTX_free(SSL_CONF_CTX *a);
445void q_SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *a, SSL_CTX *b);
446unsigned int q_SSL_CONF_CTX_set_flags(SSL_CONF_CTX *a, unsigned int b);
447int q_SSL_CONF_CTX_finish(SSL_CONF_CTX *a);
448int q_SSL_CONF_cmd(SSL_CONF_CTX *a, const char *b, const char *c);
449void q_SSL_free(SSL *a);
450STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a);
451const SSL_CIPHER *q_SSL_get_current_cipher(SSL *a);
452int q_SSL_version(const SSL *a);
453int q_SSL_get_error(SSL *a, int b);
454STACK_OF(X509) *q_SSL_get_peer_cert_chain(SSL *a);
455long q_SSL_get_verify_result(const SSL *a);
456SSL *q_SSL_new(SSL_CTX *a);
457SSL_CTX *q_SSL_get_SSL_CTX(SSL *a);
458long q_SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg);
459int q_SSL_read(SSL *a, void *b, int c);
460void q_SSL_set_bio(SSL *a, BIO *b, BIO *c);
463int q_SSL_shutdown(SSL *a);
464int q_SSL_in_init(const SSL *s);
465int q_SSL_get_shutdown(const SSL *ssl);
466int q_SSL_set_session(SSL *to, SSL_SESSION *session);
467void q_SSL_SESSION_free(SSL_SESSION *ses);
468SSL_SESSION *q_SSL_get1_session(SSL *ssl);
469SSL_SESSION *q_SSL_get_session(const SSL *ssl);
470int q_SSL_set_ex_data(SSL *ssl, int idx, void *arg);
471void *q_SSL_get_ex_data(const SSL *ssl, int idx);
472#ifndef OPENSSL_NO_PSK
473typedef 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);
475typedef unsigned int (*q_psk_server_callback_t)(SSL *ssl, const char *identity, unsigned char *psk, unsigned int max_psk_len);
477int q_SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint);
478#endif // !OPENSSL_NO_PSK
479int q_SSL_write(SSL *a, const void *b, int c);
480int q_X509_cmp(X509 *a, X509 *b);
481X509 *q_X509_dup(X509 *a);
482void q_X509_print(BIO *a, X509*b);
483int q_X509_digest(const X509 *x509, const EVP_MD *type, unsigned char *md, unsigned int *len);
484ASN1_OBJECT *q_X509_EXTENSION_get_object(X509_EXTENSION *a);
485void q_X509_free(X509 *a);
486ASN1_TIME *q_X509_gmtime_adj(ASN1_TIME *s, long adj);
487void q_ASN1_TIME_free(ASN1_TIME *t);
488X509_EXTENSION *q_X509_get_ext(X509 *a, int b);
490void *q_X509_get_ext_d2i(X509 *a, int b, int *c, int *d);
491const X509V3_EXT_METHOD *q_X509V3_EXT_get(X509_EXTENSION *a);
492void *q_X509V3_EXT_d2i(X509_EXTENSION *a);
493int q_X509_EXTENSION_get_critical(X509_EXTENSION *a);
494ASN1_OCTET_STRING *q_X509_EXTENSION_get_data(X509_EXTENSION *a);
495void q_BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS *a);
496void q_AUTHORITY_KEYID_free(AUTHORITY_KEYID *a);
497int q_ASN1_STRING_print(BIO *a, const ASN1_STRING *b);
498int q_X509_check_issued(X509 *a, X509 *b);
499X509_NAME *q_X509_get_issuer_name(X509 *a);
500X509_NAME *q_X509_get_subject_name(X509 *a);
501ASN1_INTEGER *q_X509_get_serialNumber(X509 *a);
502int q_X509_verify_cert(X509_STORE_CTX *ctx);
503int q_X509_NAME_entry_count(X509_NAME *a);
504X509_NAME_ENTRY *q_X509_NAME_get_entry(X509_NAME *a,int b);
505ASN1_STRING *q_X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *a);
506ASN1_OBJECT *q_X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *a);
507EVP_PKEY *q_X509_PUBKEY_get(X509_PUBKEY *a);
508void q_X509_STORE_free(X509_STORE *store);
509X509_STORE *q_X509_STORE_new();
510int q_X509_STORE_add_cert(X509_STORE *ctx, X509 *x);
511void q_X509_STORE_CTX_free(X509_STORE_CTX *storeCtx);
512int q_X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store,
513 X509 *x509, STACK_OF(X509) *chain);
514X509_STORE_CTX *q_X509_STORE_CTX_new();
515int q_X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);
516int q_X509_STORE_CTX_get_error(X509_STORE_CTX *ctx);
517int q_X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx);
518X509 *q_X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx);
519X509_STORE *q_X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx);
520
521// Diffie-Hellman support
522#ifndef OPENSSL_NO_DEPRECATED_3_0
524void q_DH_free(DH *dh);
525int q_DH_check(DH *dh, int *codes);
526void q_DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
527
528DH *q_d2i_DHparams(DH **a, const unsigned char **pp, long length);
529int q_i2d_DHparams(DH *a, unsigned char **p);
530
531DH *q_PEM_read_bio_DHparams(BIO *a, DH **b, pem_password_cb *c, void *d);
532#endif // OPENSSL_NO_DEPRECATED_3_0
533
534BIGNUM *q_BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);
535#define q_SSL_CTX_set_tmp_dh(ctx, dh) q_SSL_CTX_ctrl((ctx), SSL_CTRL_SET_TMP_DH, 0, (char *)dh)
536#define q_SSL_CTX_set_dh_auto(ctx, onoff) q_SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL)
537
538int q_SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, const char *label, size_t llen, const unsigned char *context, size_t contextlen, int use_context);
539
540#ifndef OPENSSL_NO_EC
541// EC Diffie-Hellman support
542#define q_SSL_CTX_set_tmp_ecdh(ctx, ecdh) q_SSL_CTX_ctrl((ctx), SSL_CTRL_SET_TMP_ECDH, 0, (char *)ecdh)
543
544// EC curves management
545size_t q_EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
546int q_EC_curve_nist2nid(const char *name);
547#endif // OPENSSL_NO_EC
548
549#define q_SSL_get_server_tmp_key(ssl, key) q_SSL_ctrl((ssl), SSL_CTRL_GET_SERVER_TMP_KEY, 0, (char *)key)
550
551// PKCS#12 support
552int q_PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca);
553PKCS12 *q_d2i_PKCS12_bio(BIO *bio, PKCS12 **pkcs12);
554void q_PKCS12_free(PKCS12 *pkcs12);
555
556#define q_BIO_get_mem_data(b, pp) (int)q_BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)
557#define q_BIO_pending(b) (int)q_BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)
558#define q_SSL_CTX_set_mode(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
559#define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num((st))
560#define q_sk_GENERAL_NAME_value(st, i) q_SKM_sk_value(GENERAL_NAME, (st), (i))
561
562void q_GENERAL_NAME_free(GENERAL_NAME *a);
563
564#define q_sk_X509_num(st) q_SKM_sk_num((st))
565#define q_sk_X509_value(st, i) q_SKM_sk_value(X509, (st), (i))
566#define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num((st))
567#define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i))
568#define q_SSL_CTX_add_extra_chain_cert(ctx,x509)
569 q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
570#define q_OpenSSL_add_all_algorithms() q_OPENSSL_add_all_algorithms_conf()
571
572#if OPENSSL_VERSION_MAJOR < 3
573int q_SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath);
574#else
575int q_SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath);
576#endif // OPENSSL_VERSION_MAJOR
577
578int q_i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp);
579SSL_SESSION *q_d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length);
580
581#ifndef OPENSSL_NO_NEXTPROTONEG
582int q_SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
583 const unsigned char *in, unsigned int inlen,
584 const unsigned char *client, unsigned int client_len);
586 int (*cb) (SSL *ssl, unsigned char **out,
587 unsigned char *outlen,
588 const unsigned char *in,
589 unsigned int inlen, void *arg),
590 void *arg);
591void q_SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
592 unsigned *len);
593int q_SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
594 unsigned protos_len);
596 int (*cb) (SSL *ssl,
597 const unsigned char **out,
598 unsigned char *outlen,
599 const unsigned char *in,
600 unsigned int inlen,
601 void *arg), void *arg);
602void q_SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
603 unsigned *len);
604#endif // !OPENSSL_NO_NEXTPROTONEG
605
606
607#if QT_CONFIG(dtls)
608
609extern "C"
610{
611typedef int (*CookieGenerateCallback)(SSL *, unsigned char *, unsigned *);
612}
613
614void q_SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, CookieGenerateCallback cb);
615void q_SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, CookieVerifyCallback cb);
616const SSL_METHOD *q_DTLS_server_method();
617const SSL_METHOD *q_DTLS_client_method();
618
619#endif // dtls
620
621void *q_X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx);
623
624#if QT_CONFIG(dtls)
625#define q_DTLS_set_link_mtu(ssl, mtu) q_SSL_ctrl((ssl), DTLS_CTRL_SET_LINK_MTU, (mtu), nullptr)
626#define q_DTLSv1_get_timeout(ssl, arg) q_SSL_ctrl(ssl, DTLS_CTRL_GET_TIMEOUT, 0, arg)
627#define q_DTLSv1_handle_timeout(ssl) q_SSL_ctrl(ssl, DTLS_CTRL_HANDLE_TIMEOUT, 0, nullptr)
628#endif // dtls
629
630void q_BIO_set_flags(BIO *b, int flags);
631void q_BIO_clear_flags(BIO *b, int flags);
632void *q_BIO_get_ex_data(BIO *b, int idx);
633int q_BIO_set_ex_data(BIO *b, int idx, void *data);
634
635#define q_BIO_set_retry_read(b) q_BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
636#define q_BIO_set_retry_write(b) q_BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))
637#define q_BIO_clear_retry_flags(b) q_BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
638#define q_BIO_set_app_data(s,arg) q_BIO_set_ex_data(s,0,arg)
639#define q_BIO_get_app_data(s) q_BIO_get_ex_data(s,0)
640
641#define q_SSL_set_tlsext_status_type(ssl, type)
642 q_SSL_ctrl((ssl), SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE, (type), nullptr)
643
644#if QT_CONFIG(ocsp)
645
646OCSP_RESPONSE *q_d2i_OCSP_RESPONSE(OCSP_RESPONSE **a, const unsigned char **in, long len);
647int q_i2d_OCSP_RESPONSE(OCSP_RESPONSE *r, unsigned char **ppout);
648OCSP_RESPONSE *q_OCSP_response_create(int status, OCSP_BASICRESP *bs);
649void q_OCSP_RESPONSE_free(OCSP_RESPONSE *rs);
650int q_OCSP_response_status(OCSP_RESPONSE *resp);
651OCSP_BASICRESP *q_OCSP_response_get1_basic(OCSP_RESPONSE *resp);
652OCSP_SINGLERESP *q_OCSP_basic_add1_status(OCSP_BASICRESP *rsp, OCSP_CERTID *cid,
653 int status, int reason, ASN1_TIME *revtime,
654 ASN1_TIME *thisupd, ASN1_TIME *nextupd);
655int q_OCSP_basic_sign(OCSP_BASICRESP *brsp, X509 *signer, EVP_PKEY *key, const EVP_MD *dgst,
656 STACK_OF(X509) *certs, unsigned long flags);
657OCSP_BASICRESP *q_OCSP_BASICRESP_new();
658void q_OCSP_BASICRESP_free(OCSP_BASICRESP *bs);
659int q_OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags);
660int q_OCSP_resp_count(OCSP_BASICRESP *bs);
661OCSP_SINGLERESP *q_OCSP_resp_get0(OCSP_BASICRESP *bs, int idx);
662int q_OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, ASN1_GENERALIZEDTIME **revtime,
663 ASN1_GENERALIZEDTIME **thisupd, ASN1_GENERALIZEDTIME **nextupd);
664int q_OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, ASN1_GENERALIZEDTIME *nextupd, long nsec, long maxsec);
665int q_OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, ASN1_OCTET_STRING **pikeyHash,
666 ASN1_INTEGER **pserial, OCSP_CERTID *cid);
667
668const STACK_OF(X509) *q_OCSP_resp_get0_certs(const OCSP_BASICRESP *bs);
669OCSP_CERTID *q_OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer);
670void q_OCSP_CERTID_free(OCSP_CERTID *cid);
671int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
672
673#define q_SSL_get_tlsext_status_ocsp_resp(ssl, arg)
674 q_SSL_ctrl(ssl, SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP, 0, arg)
675
676#define q_SSL_CTX_set_tlsext_status_cb(ssl, cb)
677 q_SSL_CTX_callback_ctrl(ssl, SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB, GenericCallbackType(cb))
678
679# define q_SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen)
680 q_SSL_ctrl(ssl, SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP, arglen, arg)
681
682#endif // ocsp
683
684
685void *q_CRYPTO_malloc(size_t num, const char *file, int line);
686#define q_OPENSSL_malloc(num) q_CRYPTO_malloc(num, "", 0)
687void q_CRYPTO_free(void *str, const char *file, int line);
688# define q_OPENSSL_free(addr) q_CRYPTO_free(addr, "", 0)
689int q_CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len);
690
691void q_SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val));
692const char *q_SSL_alert_type_string(int value);
693const char *q_SSL_alert_desc_string_long(int value);
694
695int q_SSL_CTX_get_security_level(const SSL_CTX *ctx);
696void q_SSL_CTX_set_security_level(SSL_CTX *ctx, int level);
697
698// Here we have the ones that make difference between OpenSSL pre/post v3:
699#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
700X509 *q_SSL_get1_peer_certificate(SSL *a);
701#define q_SSL_get_peer_certificate q_SSL_get1_peer_certificate
702int q_EVP_PKEY_get_bits(const EVP_PKEY *pkey);
703int q_EVP_PKEY_get_security_bits(const EVP_PKEY *pkey);
704int q_EVP_PKEY_get_base_id(const EVP_PKEY *pkey);
705#define q_EVP_PKEY_base_id q_EVP_PKEY_get_base_id
706const char *q_EVP_PKEY_get0_type_name(const EVP_PKEY *pkey);
707#define q_EVP_PKEY_type_name q_EVP_PKEY_get0_type_name
708#else
709X509 *q_SSL_get_peer_certificate(SSL *a);
710int q_EVP_PKEY_base_id(EVP_PKEY *a);
711#endif // OPENSSL_VERSION_MAJOR >= 3
712
713#ifndef OPENSSL_NO_DEPRECATED_3_0
714
716void q_DSA_free(DSA *a);
717
719void q_RSA_free(RSA *a);
720
721#ifndef OPENSSL_NO_EC
722
723EC_KEY *q_EC_KEY_dup(const EC_KEY *src);
725void q_EC_KEY_free(EC_KEY *ecdh);
726
727#endif // OPENSSL_NO_EC
728
729int q_SSL_CTX_use_RSAPrivateKey(SSL_CTX *a, RSA *b);
730
731DSA *q_PEM_read_bio_DSA_PUBKEY(BIO *a, DSA **b, pem_password_cb *c, void *d);
732RSA *q_PEM_read_bio_RSA_PUBKEY(BIO *a, RSA **b, pem_password_cb *c, void *d);
733
734DSA *q_PEM_read_bio_DSAPrivateKey(BIO *a, DSA **b, pem_password_cb *c, void *d);
735RSA *q_PEM_read_bio_RSAPrivateKey(BIO *a, RSA **b, pem_password_cb *c, void *d);
736
737int q_PEM_write_bio_DSA_PUBKEY(BIO *a, DSA *b);
738int q_PEM_write_bio_RSA_PUBKEY(BIO *a, RSA *b);
739
740int q_PEM_write_bio_DSAPrivateKey(BIO *a, DSA *b, const EVP_CIPHER *c, unsigned char *d,
741 int e, pem_password_cb *f, void *g);
742int q_PEM_write_bio_RSAPrivateKey(BIO *a, RSA *b, const EVP_CIPHER *c, unsigned char *d,
743 int e, pem_password_cb *f, void *g);
744
745RSA *q_EVP_PKEY_get1_RSA(EVP_PKEY *a);
746DSA *q_EVP_PKEY_get1_DSA(EVP_PKEY *a);
747DH *q_EVP_PKEY_get1_DH(EVP_PKEY *a);
748
749int q_EVP_PKEY_set1_RSA(EVP_PKEY *a, RSA *b);
750int q_EVP_PKEY_set1_DSA(EVP_PKEY *a, DSA *b);
751int q_EVP_PKEY_set1_DH(EVP_PKEY *a, DH *b);
752
753int q_DH_bits(DH *dh);
754int q_RSA_bits(RSA *a);
755int q_DSA_bits(DSA *a);
756
757int q_EVP_PKEY_assign(EVP_PKEY *a, int b, void *r);
758int q_EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
759
760#ifndef OPENSSL_NO_EC
761
762EC_KEY *q_PEM_read_bio_EC_PUBKEY(BIO *a, EC_KEY **b, pem_password_cb *c, void *d);
763EC_KEY *q_PEM_read_bio_ECPrivateKey(BIO *a, EC_KEY **b, pem_password_cb *c, void *d);
764
765int q_PEM_write_bio_ECPrivateKey(BIO *a, EC_KEY *b, const EVP_CIPHER *c, unsigned char *d,
766 int e, pem_password_cb *f, void *g);
767int q_PEM_write_bio_EC_PUBKEY(BIO *a, EC_KEY *b);
768
769EC_KEY *q_EVP_PKEY_get1_EC_KEY(EVP_PKEY *a);
770int q_EVP_PKEY_set1_EC_KEY(EVP_PKEY *a, EC_KEY *b);
771
772const EC_GROUP* q_EC_KEY_get0_group(const EC_KEY* k);
773int q_EC_GROUP_get_degree(const EC_GROUP* g);
774
775#define q_EVP_PKEY_assign_RSA(pkey,rsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_RSA,
776 (char *)(rsa))
777#define q_EVP_PKEY_assign_DSA(pkey,dsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_DSA,
778 (char *)(dsa))
779
780
781#endif // OPENSSL_NO_EC
782
783#endif // OPENSSL_NO_DEPRECATED_3_0
784
785QT_END_NAMESPACE
786
787#endif
QByteArray verifiedHello() const override
bool verifyClient(QUdpSocket *socket, const QByteArray &dgram, const QHostAddress &address, quint16 port) override
void abortHandshake(QUdpSocket *socket) override
virtual QDtls::HandshakeState state() const override
QHostAddress peerAddress() const override
QSslSocket::SslMode cryptographMode() const override
void ignoreVerificationErrors(const QList< QSslError > &errorsToIgnore) override
QSslCipher dtlsSessionCipher() const override
bool startHandshake(QUdpSocket *socket, const QByteArray &datagram) override
QDtlsPrivateOpenSSL(QDtls *qObject, QSslSocket::SslMode mode)
bool resumeHandshake(QUdpSocket *socket) override
unsigned pskServerCallback(const char *identity, unsigned char *psk, unsigned max_psk_len)
bool handleTimeout(QUdpSocket *socket) override
virtual void setDtlsMtuHint(quint16 mtu) override
quint16 peerPort() const override
qint64 writeDatagramEncrypted(QUdpSocket *socket, const QByteArray &datagram) override
void sendShutdownAlert(QUdpSocket *socket) override
unsigned pskClientCallback(const char *hint, char *identity, unsigned max_identity_len, unsigned char *psk, unsigned max_psk_len)
void setPeer(const QHostAddress &addr, quint16 port, const QString &name) override
QByteArray decryptDatagram(QUdpSocket *socket, const QByteArray &tlsdgram) override
QSsl::SslProtocol dtlsSessionProtocol() const override
virtual bool isConnectionEncrypted() const override
bool continueHandshake(QUdpSocket *socket, const QByteArray &datagram) override
QList< QSslError > peerVerificationErrors() const override
void setPeerVerificationName(const QString &name) override
virtual quint16 dtlsMtuHint() const override
QString peerVerificationName() const override
static QSslErrorEntry errorEntryFromStoreContext(X509_STORE_CTX *ctx)
bool init(QDtlsBasePrivate *dtlsBase, QUdpSocket *socket, const QHostAddress &remote, quint16 port, const QByteArray &receivedMessage)
QDtlsPrivateOpenSSL * dtlsPrivate
Combined button and popup list for selecting options.
Namespace containing onternal types that TLS backends implement.
int q_dgram_create(BIO *bio)
int q_dgram_read(BIO *bio, char *dst, int bytesToRead)
int q_dgram_write(BIO *bio, const char *src, int bytesToWrite)
int q_dgram_puts(BIO *bio, const char *src)
long q_dgram_ctrl(BIO *bio, int cmd, long num, void *ptr)
int q_dgram_destroy(BIO *bio)
const char *const qdtlsMethodName
unsigned q_PSK_client_callback(SSL *ssl, const char *hint, char *identity, unsigned max_identity_len, unsigned char *psk, unsigned max_psk_len)
unsigned q_PSK_server_callback(SSL *ssl, const char *identity, unsigned char *psk, unsigned max_psk_len)
int q_X509DtlsCallback(int ok, X509_STORE_CTX *ctx)
int q_generate_cookie_callback(SSL *ssl, unsigned char *dst, unsigned *cookieLength)
int q_verify_cookie_callback(SSL *ssl, const unsigned char *cookie, unsigned cookieLength)
static QString msgFunctionFailed(const char *function)
void delete_connection(SSL *ssl)
void delete_bio_method(BIO_METHOD *method)
QByteArray cookie_for_peer(SSL *ssl)
QByteArray fallbackSecret()
int next_timeoutMs(SSL *tlsConnection)
void delete_BIO_ADDR(BIO_ADDR *bio)
#define QT_DTLS_VERBOSE
#define qDtlsWarning(arg)
#define qDtlsDebug(arg)
int q_EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c)
const SSL_METHOD * q_TLS_method()
const EVP_CIPHER * q_EVP_des_cbc()
X509_STORE_CTX * q_X509_STORE_CTX_new()
void q_SSL_free(SSL *a)
void q_SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, unsigned *len)
void q_SSL_CTX_free(SSL_CTX *a)
void q_BIO_clear_flags(BIO *b, int flags)
const SSL_METHOD * q_TLS_server_method()
int q_SSL_in_init(const SSL *s)
const SSL_CIPHER * q_SSL_get_current_cipher(SSL *a)
const char * q_OpenSSL_version(int type)
int q_EVP_PKEY_set1_DSA(EVP_PKEY *a, DSA *b)
DH * q_d2i_DHparams(DH **a, const unsigned char **pp, long length)
int q_OBJ_obj2nid(const ASN1_OBJECT *a)
int q_ASN1_STRING_length(ASN1_STRING *a)
SSL_CTX * q_SSL_get_SSL_CTX(SSL *a)
void * q_X509_STORE_get_ex_data(X509_STORE *r, int idx)
void q_BIO_set_shutdown(BIO *a, int shut)
int q_DH_check(DH *dh, int *codes)
OPENSSL_STACK * q_OPENSSL_sk_new_null()
bool q_resolveOpenSslSymbols()
void q_SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *a, SSL_CTX *b)
char * q_SSL_CIPHER_description(const SSL_CIPHER *a, char *b, int c)
const EVP_CIPHER * q_EVP_aes_192_cbc()
int q_ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y)
int q_SSL_get_ex_data_X509_STORE_CTX_idx()
const EVP_CIPHER * q_EVP_aes_256_cbc()
int q_SSL_CTX_get_security_level(const SSL_CTX *ctx)
int q_SSL_CTX_use_certificate_file(SSL_CTX *a, const char *b, int c)
long q_BIO_ctrl(BIO *a, int b, long c, void *d)
const char * q_OBJ_nid2sn(int a)
int q_EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv, int enc)
int q_PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca)
int q_X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509, STACK_OF(X509) *chain)
void q_SSL_SESSION_free(SSL_SESSION *ses)
void q_BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS *a)
int q_OBJ_ln2nid(const char *s)
unsigned int(* q_psk_server_callback_t)(SSL *ssl, const char *identity, unsigned char *psk, unsigned int max_psk_len)
int q_SSL_set_session(SSL *to, SSL_SESSION *session)
int q_SSL_session_reused(SSL *a)
const EVP_MD * q_EVP_get_digestbyname(const char *name)
long q_SSL_CTX_ctrl(SSL_CTX *a, int b, long c, void *d)
X509 * q_X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx)
void(* GenericCallbackType)()
int q_EVP_PKEY_set1_RSA(EVP_PKEY *a, RSA *b)
DSA * q_PEM_read_bio_DSAPrivateKey(BIO *a, DSA **b, pem_password_cb *c, void *d)
ASN1_TIME * q_X509_gmtime_adj(ASN1_TIME *s, long adj)
int q_EVP_PKEY_assign(EVP_PKEY *a, int b, void *r)
void q_SSL_set_connect_state(SSL *a)
unsigned long q_ERR_get_error()
int q_X509_digest(const X509 *x509, const EVP_MD *type, unsigned char *md, unsigned int *len)
unsigned int q_SSL_CONF_CTX_set_flags(SSL_CONF_CTX *a, unsigned int b)
int q_SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, const unsigned char *client, unsigned int client_len)
void q_DH_free(DH *dh)
const unsigned char * q_ASN1_STRING_get0_data(const ASN1_STRING *x)
int q_EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl)
int q_EVP_PKEY_set1_EC_KEY(EVP_PKEY *a, EC_KEY *b)
void q_OPENSSL_sk_push(OPENSSL_STACK *st, void *data)
void * q_CRYPTO_malloc(size_t num, const char *file, int line)
int q_EVP_PKEY_param_check(EVP_PKEY_CTX *ctx)
EC_KEY * q_PEM_read_bio_EC_PUBKEY(BIO *a, EC_KEY **b, pem_password_cb *c, void *d)
const EVP_CIPHER * q_EVP_rc2_cbc()
RSA * q_RSA_new()
void q_ERR_error_string_n(unsigned long e, char *buf, size_t len)
int q_PEM_write_bio_RSA_PUBKEY(BIO *a, RSA *b)
BN_ULONG q_BN_mod_word(const BIGNUM *a, BN_ULONG w)
const EVP_MD * q_EVP_sha1()
X509 * q_X509_dup(X509 *a)
int q_SSL_get_error(SSL *a, int b)
int q_BIO_set_ex_data(BIO *b, int idx, void *data)
DH * q_DH_new()
RSA * q_PEM_read_bio_RSAPrivateKey(BIO *a, RSA **b, pem_password_cb *c, void *d)
PKCS12 * q_d2i_PKCS12_bio(BIO *bio, PKCS12 **pkcs12)
int q_X509_EXTENSION_get_critical(X509_EXTENSION *a)
void q_DSA_free(DSA *a)
void q_SSL_CONF_CTX_free(SSL_CONF_CTX *a)
X509_NAME * q_X509_get_issuer_name(X509 *a)
int q_DSA_bits(DSA *a)
int q_SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, unsigned protos_len)
int q_SSL_clear(SSL *a)
void * q_X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx)
void q_SSL_CTX_set_verify_depth(SSL_CTX *a, int b)
void q_EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a)
int q_RAND_status()
#define q_BIO_get_app_data(s)
SSL_CTX * q_SSL_CTX_new(const SSL_METHOD *a)
#define q_BIO_set_retry_read(b)
int q_EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen)
int(* q_SSL_psk_use_session_cb_func_t)(SSL *, const EVP_MD *, const unsigned char **, size_t *, SSL_SESSION **)
int q_EC_curve_nist2nid(const char *name)
RSA * q_EVP_PKEY_get1_RSA(EVP_PKEY *a)
void q_X509_STORE_set_verify_cb(X509_STORE *ctx, X509_STORE_CTX_verify_cb verify_cb)
DSA * q_PEM_read_bio_DSA_PUBKEY(BIO *a, DSA **b, pem_password_cb *c, void *d)
int q_SSL_accept(SSL *a)
int q_PEM_write_bio_DSA_PUBKEY(BIO *a, DSA *b)
const char * q_OBJ_nid2ln(int a)
int q_BN_num_bits(const BIGNUM *a)
int q_X509_cmp(X509 *a, X509 *b)
void q_SSL_set_accept_state(SSL *a)
void q_X509V3_conf_free(CONF_VALUE *val)
unsigned long q_SSL_set_options(SSL *s, unsigned long op)
int q_i2d_DHparams(DH *a, unsigned char **p)
void * q_X509V3_EXT_d2i(X509_EXTENSION *a)
int q_DH_bits(DH *dh)
EVP_PKEY * q_PEM_read_bio_PrivateKey(BIO *a, EVP_PKEY **b, pem_password_cb *c, void *d)
int q_SSL_get_shutdown(const SSL *ssl)
int q_OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings)
int q_SSL_shutdown(SSL *a)
int q_SSL_CTX_use_certificate(SSL_CTX *a, X509 *b)
void q_OPENSSL_sk_free(OPENSSL_STACK *a)
int q_SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, const char *label, size_t llen, const unsigned char *context, size_t contextlen, int use_context)
SSL_SESSION * q_d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length)
void * q_OPENSSL_sk_value(OPENSSL_STACK *a, int b)
void q_BIO_set_init(BIO *a, int init)
EVP_PKEY * q_EVP_PKEY_new()
void q_CRYPTO_free(void *str, const char *file, int line)
RSA * q_PEM_read_bio_RSA_PUBKEY(BIO *a, RSA **b, pem_password_cb *c, void *d)
void q_EVP_PKEY_free(EVP_PKEY *a)
int q_ASN1_STRING_print(BIO *a, const ASN1_STRING *b)
void q_AUTHORITY_KEYID_free(AUTHORITY_KEYID *a)
BIGNUM * q_BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret)
int q_SSL_CONF_cmd(SSL_CONF_CTX *a, const char *b, const char *c)
void q_X509_STORE_free(X509_STORE *store)
ASN1_STRING * q_X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *a)
int q_BN_is_word(BIGNUM *a, BN_ULONG w)
void q_EC_KEY_free(EC_KEY *ecdh)
int q_EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b)
BIO * q_BIO_new(const BIO_METHOD *a)
X509_STORE * q_SSL_CTX_get_cert_store(const SSL_CTX *a)
EC_KEY * q_EC_KEY_dup(const EC_KEY *src)
int q_SSL_CTX_check_private_key(const SSL_CTX *a)
int q_PEM_write_bio_DSAPrivateKey(BIO *a, DSA *b, const EVP_CIPHER *c, unsigned char *d, int e, pem_password_cb *f, void *g)
void q_SSL_set_psk_use_session_callback(SSL *s, q_SSL_psk_use_session_cb_func_t)
unsigned long q_SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session)
long q_X509_get_version(X509 *a)
int q_SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint)
int q_i2d_X509(X509 *a, unsigned char **b)
DSA * q_DSA_new()
const EVP_CIPHER * q_EVP_des_ede3_cbc()
ASN1_TIME * q_X509_getm_notAfter(X509 *a)
int q_SSL_write(SSL *a, const void *b, int c)
EVP_PKEY * q_PEM_read_bio_PUBKEY(BIO *a, EVP_PKEY **b, pem_password_cb *c, void *d)
int q_PEM_write_bio_PrivateKey_traditional(BIO *a, EVP_PKEY *b, const EVP_CIPHER *c, unsigned char *d, int e, pem_password_cb *f, void *g)
void * q_BIO_get_data(BIO *a)
X509_STORE * q_X509_STORE_new()
int q_i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
const char * q_SSL_alert_desc_string_long(int value)
long q_SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg)
ASN1_OBJECT * q_X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *a)
#define q_BIO_set_retry_write(b)
void q_PKCS12_free(PKCS12 *pkcs12)
void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void(*b)(void *))
void * q_SSL_get_ex_data(const SSL *ssl, int idx)
int q_EVP_PKEY_up_ref(EVP_PKEY *a)
EVP_PKEY * q_X509_get_pubkey(X509 *a)
EC_KEY * q_EVP_PKEY_get1_EC_KEY(EVP_PKEY *a)
int q_PEM_write_bio_RSAPrivateKey(BIO *a, RSA *b, const EVP_CIPHER *c, unsigned char *d, int e, pem_password_cb *f, void *g)
void q_AUTHORITY_INFO_ACCESS_free(AUTHORITY_INFO_ACCESS *a)
SSL_SESSION * q_SSL_get_session(const SSL *ssl)
int q_EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
int q_SSL_CTX_use_RSAPrivateKey(SSL_CTX *a, RSA *b)
DH * q_PEM_read_bio_DHparams(BIO *a, DH **b, pem_password_cb *c, void *d)
ASN1_INTEGER * q_X509_get_serialNumber(X509 *a)
void q_BIO_set_data(BIO *a, void *ptr)
int q_SSL_read(SSL *a, void *b, int c)
int q_CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len)
void q_ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it)
size_t q_EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
EC_KEY * q_EC_KEY_new_by_curve_name(int nid)
#define q_BIO_set_app_data(s, arg)
long q_ASN1_INTEGER_get(ASN1_INTEGER *a)
int q_EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc)
int q_PEM_write_bio_ECPrivateKey(BIO *a, EC_KEY *b, const EVP_CIPHER *c, unsigned char *d, int e, pem_password_cb *f, void *g)
void q_BIO_set_flags(BIO *b, int flags)
void q_SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, int(*cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg)
void q_SSL_CTX_set_security_level(SSL_CTX *ctx, int level)
BIO * q_SSL_get_rbio(const SSL *s)
int q_X509_check_issued(X509 *a, X509 *b)
int q_SSL_version(const SSL *a)
const BIO_METHOD * q_BIO_s_mem()
int q_RAND_bytes(unsigned char *b, int n)
int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b)
const char * q_SSL_alert_type_string(int value)
int q_PEM_write_bio_PUBKEY(BIO *a, EVP_PKEY *b)
int q_EVP_PKEY_set1_DH(EVP_PKEY *a, DH *b)
void q_SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, unsigned *len)
int q_BIO_read(BIO *a, void *b, int c)
int q_EC_GROUP_get_degree(const EC_GROUP *g)
int q_RSA_bits(RSA *a)
char * q_ERR_error_string(unsigned long a, char *b)
ASN1_OCTET_STRING * q_X509_EXTENSION_get_data(X509_EXTENSION *a)
int q_OBJ_obj2txt(char *buf, int buf_len, ASN1_OBJECT *obj, int no_name)
void q_RAND_seed(const void *a, int b)
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)
void q_SSL_set_bio(SSL *a, BIO *b, BIO *c)
void q_X509_up_ref(X509 *a)
DH * q_EVP_PKEY_get1_DH(EVP_PKEY *a)
#define q_SKM_sk_num(st)
X509_NAME_ENTRY * q_X509_NAME_get_entry(X509_NAME *a, int b)
void q_X509_print(BIO *a, X509 *b)
void q_DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g)
void q_X509_free(X509 *a)
int q_SSL_CTX_set_default_verify_paths(SSL_CTX *a)
int q_SSL_connect(SSL *a)
int q_BIO_get_shutdown(BIO *a)
X509_NAME * q_X509_get_subject_name(X509 *a)
DSA * q_EVP_PKEY_get1_DSA(EVP_PKEY *a)
const SSL_METHOD * q_TLS_client_method()
size_t q_SSL_get_client_random(SSL *a, unsigned char *out, size_t outlen)
int q_PEM_write_bio_PrivateKey(BIO *a, EVP_PKEY *b, const EVP_CIPHER *c, unsigned char *d, int e, pem_password_cb *f, void *g)
SSL * q_SSL_new(SSL_CTX *a)
int q_SSL_CTX_set_cipher_list(SSL_CTX *a, const char *b)
int q_X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx)
void q_SSL_set_psk_server_callback(SSL *ssl, q_psk_server_callback_t callback)
void * q_X509_get_ext_d2i(X509 *a, int b, int *c, int *d)
void q_ASN1_TIME_free(ASN1_TIME *t)
void q_X509_STORE_CTX_free(X509_STORE_CTX *storeCtx)
int q_OBJ_sn2nid(const char *s)
const X509V3_EXT_METHOD * q_X509V3_EXT_get(X509_EXTENSION *a)
#define q_BIO_clear_retry_flags(b)
void * q_BIO_get_ex_data(BIO *b, int idx)
int q_X509_STORE_add_cert(X509_STORE *ctx, X509 *x)
const EVP_CIPHER * q_EVP_aes_128_cbc()
BIO * q_BIO_new_mem_buf(void *a, int b)
int q_X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data)
int q_X509_get_ext_count(X509 *a)
void q_GENERAL_NAME_free(GENERAL_NAME *a)
int q_PEM_write_bio_EC_PUBKEY(BIO *a, EC_KEY *b)
SSL_SESSION * q_SSL_get1_session(SSL *ssl)
EVP_PKEY_CTX * q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e)
int q_SSL_CIPHER_get_bits(const SSL_CIPHER *a, int *b)
int q_X509_verify_cert(X509_STORE_CTX *ctx)
long q_OpenSSL_version_num()
int q_CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
void q_SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, int(*cb)(SSL *ssl, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg)
int q_BIO_write(BIO *a, const void *b, int c)
void q_SSL_set_info_callback(SSL *ssl, void(*cb)(const SSL *ssl, int type, int val))
X509_STORE * q_X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx)
EVP_CIPHER_CTX * q_EVP_CIPHER_CTX_new()
X509 * q_d2i_X509(X509 **a, const unsigned char **b, long c)
X509_EXTENSION * q_X509_get_ext(X509 *a, int b)
int q_EVP_PKEY_type(int a)
const EC_GROUP * q_EC_KEY_get0_group(const EC_KEY *k)
int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b)
int q_ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm)
void q_SSL_set_psk_client_callback(SSL *ssl, q_psk_client_callback_t callback)
void q_SSL_CTX_set_verify(SSL_CTX *a, int b, int(*c)(int, X509_STORE_CTX *))
#define q_OPENSSL_add_all_algorithms_conf()
int q_X509_NAME_entry_count(X509_NAME *a)
#define q_SKM_sk_value(type, st, i)
int q_X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose)
int q_BIO_free(BIO *a)
int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c)
int q_SSL_set_ex_data(SSL *ssl, int idx, void *arg)
ASN1_OBJECT * q_X509_EXTENSION_get_object(X509_EXTENSION *a)
SSL_CONF_CTX * q_SSL_CONF_CTX_new()
long q_SSL_CTX_callback_ctrl(SSL_CTX *, int, GenericCallbackType)
ASN1_TIME * q_X509_getm_notBefore(X509 *a)
int q_EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr)
int q_SSL_CONF_CTX_finish(SSL_CONF_CTX *a)
void q_RSA_free(RSA *a)
int q_i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *obj)
long q_SSL_get_verify_result(const SSL *a)
int q_OPENSSL_sk_num(OPENSSL_STACK *a)
size_t q_SSL_SESSION_get_master_key(const SSL_SESSION *session, unsigned char *out, size_t outlen)
int q_X509_STORE_CTX_get_error(X509_STORE_CTX *ctx)
EC_KEY * q_PEM_read_bio_ECPrivateKey(BIO *a, EC_KEY **b, pem_password_cb *c, void *d)
qssloptions q_SSL_CTX_set_options(SSL_CTX *ctx, qssloptions op)
int q_OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings)
void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx)
EVP_PKEY * q_X509_PUBKEY_get(X509_PUBKEY *a)