1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2015 The Qt Company Ltd. 4 ** Contact: http://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtNetwork module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see http://www.qt.io/terms-conditions. For further 15 ** information use the contact form at http://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 2.1 or version 3 as published by the Free 20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and 21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the 22 ** following information to ensure the GNU Lesser General Public License 23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and 24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 25 ** 26 ** As a special exception, The Qt Company gives you certain additional 27 ** rights. These rights are described in The Qt Company LGPL Exception 28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 29 ** 30 ** GNU General Public License Usage 31 ** Alternatively, this file may be used under the terms of the GNU 32 ** General Public License version 3.0 as published by the Free Software 33 ** Foundation and appearing in the file LICENSE.GPL included in the 34 ** packaging of this file. Please review the following information to 35 ** ensure the GNU General Public License version 3.0 requirements will be 36 ** met: http://www.gnu.org/copyleft/gpl.html. 37 ** 38 ** $QT_END_LICENSE$ 39 ** 40 ****************************************************************************/ 41 42 43 #ifndef QSSLSOCKET_OPENSSL_SYMBOLS_P_H 44 #define QSSLSOCKET_OPENSSL_SYMBOLS_P_H 45 46 // 47 // W A R N I N G 48 // ------------- 49 // 50 // This file is not part of the Qt API. It exists for the convenience 51 // of the QLibrary class. This header file may change from 52 // version to version without notice, or even be removed. 53 // 54 // We mean it. 55 // 56 57 #include "qsslsocket_openssl_p.h" 58 59 QT_BEGIN_NAMESPACE 60 61 #define DUMMYARG 62 63 #if !defined QT_LINKED_OPENSSL 64 // **************** Shared declarations ****************** 65 // ret func(arg) 66 67 # define DEFINEFUNC(ret, func, arg, a, err, funcret) \ 68 typedef ret (*_q_PTR_##func)(arg); \ 69 static _q_PTR_##func _q_##func = 0; \ 70 ret q_##func(arg) { \ 71 if (!_q_##func) { \ 72 qWarning("QSslSocket: cannot call unresolved function "#func); \ 73 err; \ 74 } \ 75 funcret _q_##func(a); \ 76 } 77 78 // ret func(arg1, arg2) 79 # define DEFINEFUNC2(ret, func, arg1, a, arg2, b, err, funcret) \ 80 typedef ret (*_q_PTR_##func)(arg1, arg2); \ 81 static _q_PTR_##func _q_##func = 0; \ 82 ret q_##func(arg1, arg2) { \ 83 if (!_q_##func) { \ 84 qWarning("QSslSocket: cannot call unresolved function "#func);\ 85 err; \ 86 } \ 87 funcret _q_##func(a, b); \ 88 } 89 90 // ret func(arg1, arg2, arg3) 91 # define DEFINEFUNC3(ret, func, arg1, a, arg2, b, arg3, c, err, funcret) \ 92 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3); \ 93 static _q_PTR_##func _q_##func = 0; \ 94 ret q_##func(arg1, arg2, arg3) { \ 95 if (!_q_##func) { \ 96 qWarning("QSslSocket: cannot call unresolved function "#func); \ 97 err; \ 98 } \ 99 funcret _q_##func(a, b, c); \ 100 } 101 102 // ret func(arg1, arg2, arg3, arg4) 103 # define DEFINEFUNC4(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, err, funcret) \ 104 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4); \ 105 static _q_PTR_##func _q_##func = 0; \ 106 ret q_##func(arg1, arg2, arg3, arg4) { \ 107 if (!_q_##func) { \ 108 qWarning("QSslSocket: cannot call unresolved function "#func); \ 109 err; \ 110 } \ 111 funcret _q_##func(a, b, c, d); \ 112 } 113 114 // ret func(arg1, arg2, arg3, arg4, arg5) 115 # define DEFINEFUNC5(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, err, funcret) \ 116 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4, arg5); \ 117 static _q_PTR_##func _q_##func = 0; \ 118 ret q_##func(arg1, arg2, arg3, arg4, arg5) { \ 119 if (!_q_##func) { \ 120 qWarning("QSslSocket: cannot call unresolved function "#func); \ 121 err; \ 122 } \ 123 funcret _q_##func(a, b, c, d, e); \ 124 } 125 126 // ret func(arg1, arg2, arg3, arg4, arg6) 127 # define DEFINEFUNC6(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, err, funcret) \ 128 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4, arg5, arg6); \ 129 static _q_PTR_##func _q_##func = 0; \ 130 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6) { \ 131 if (!_q_##func) { \ 132 qWarning("QSslSocket: cannot call unresolved function "#func); \ 133 err; \ 134 } \ 135 funcret _q_##func(a, b, c, d, e, f); \ 136 } 137 138 // ret func(arg1, arg2, arg3, arg4, arg6, arg7) 139 # define DEFINEFUNC7(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, err, funcret) \ 140 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7); \ 141 static _q_PTR_##func _q_##func = 0; \ 142 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { \ 143 if (!_q_##func) { \ 144 qWarning("QSslSocket: cannot call unresolved function "#func); \ 145 err; \ 146 } \ 147 funcret _q_##func(a, b, c, d, e, f, g); \ 148 } 149 150 // ret func(arg1, arg2, arg3, arg4, arg6, arg7, arg8, arg9) 151 # define DEFINEFUNC9(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, arg8, h, arg9, i, err, funcret) \ 152 typedef ret (*_q_PTR_##func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \ 153 static _q_PTR_##func _q_##func = 0; \ 154 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { \ 155 if (_q_##func) { \ 156 qWarning("QSslSocket: cannot call unresolved function "#func); \ 157 err; \ 158 } \ 159 funcret _q_##func(a, b, c, d, e, f, g, h, i); \ 160 } 161 // **************** Shared declarations ****************** 162 163 #else // !defined QT_LINKED_OPENSSL 164 165 // **************** Static declarations ****************** 166 167 // ret func(arg) 168 # define DEFINEFUNC(ret, func, arg, a, err, funcret) \ 169 ret q_##func(arg) { funcret func(a); } 170 171 // ret func(arg1, arg2) 172 # define DEFINEFUNC2(ret, func, arg1, a, arg2, b, err, funcret) \ 173 ret q_##func(arg1, arg2) { funcret func(a, b); } 174 175 // ret func(arg1, arg2, arg3) 176 # define DEFINEFUNC3(ret, func, arg1, a, arg2, b, arg3, c, err, funcret) \ 177 ret q_##func(arg1, arg2, arg3) { funcret func(a, b, c); } 178 179 // ret func(arg1, arg2, arg3, arg4) 180 # define DEFINEFUNC4(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, err, funcret) \ 181 ret q_##func(arg1, arg2, arg3, arg4) { funcret func(a, b, c, d); } 182 183 // ret func(arg1, arg2, arg3, arg4, arg5) 184 # define DEFINEFUNC5(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, err, funcret) \ 185 ret q_##func(arg1, arg2, arg3, arg4, arg5) { funcret func(a, b, c, d, e); } 186 187 // ret func(arg1, arg2, arg3, arg4, arg6) 188 # define DEFINEFUNC6(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, err, funcret) \ 189 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6) { funcret func(a, b, c, d, e, f); } 190 191 // ret func(arg1, arg2, arg3, arg4, arg6, arg7) 192 # define DEFINEFUNC7(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, err, funcret) \ 193 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { funcret func(a, b, c, d, e, f, g); } 194 195 // ret func(arg1, arg2, arg3, arg4, arg6, arg7, arg8, arg9) 196 # define DEFINEFUNC9(ret, func, arg1, a, arg2, b, arg3, c, arg4, d, arg5, e, arg6, f, arg7, g, arg8, h, arg9, i, err, funcret) \ 197 ret q_##func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { funcret func(a, b, c, d, e, f, g, h, i); } 198 199 // **************** Static declarations ****************** 200 201 #endif // !defined QT_LINKED_OPENSSL 202 203 bool q_resolveOpenSslSymbols(); 204 long q_ASN1_INTEGER_get(ASN1_INTEGER *a); 205 unsigned char * q_ASN1_STRING_data(ASN1_STRING *a); 206 int q_ASN1_STRING_length(ASN1_STRING *a); 207 int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b); 208 long q_BIO_ctrl(BIO *a, int b, long c, void *d); 209 int q_BIO_free(BIO *a); 210 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 211 BIO *q_BIO_new(BIO_METHOD *a); 212 #else 213 BIO *q_BIO_new(const BIO_METHOD *a); 214 #endif 215 BIO *q_BIO_new_mem_buf(void *a, int b); 216 int q_BIO_read(BIO *a, void *b, int c); 217 #if OPENSSL_VERSION_NUMBER < 0x10100000L 218 BIO_METHOD *q_BIO_s_mem(); 219 #else 220 const BIO_METHOD *q_BIO_s_mem(); 221 #endif 222 int q_BIO_write(BIO *a, const void *b, int c); 223 int q_BN_num_bits(const BIGNUM *a); 224 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 225 int q_CRYPTO_num_locks(); 226 void q_CRYPTO_set_locking_callback(void (*a)(int, int, const char *, int)); 227 void q_CRYPTO_set_id_callback(unsigned long (*a)()); 228 void q_CRYPTO_free(void *a); 229 #else 230 #define q_CRYPTO_num_locks() 1 231 #define q_CRYPTO_set_locking_callback(a) 232 #define q_CRYPTO_set_id_callback(a) 233 void q_OPENSSL_free(void *a); 234 #endif 235 void q_DSA_free(DSA *a); 236 #if OPENSSL_VERSION_NUMBER >= 0x00908000L 237 // 0.9.8 broke SC and BC by changing this function's signature. 238 X509 *q_d2i_X509(X509 **a, const unsigned char **b, long c); 239 #else 240 X509 *q_d2i_X509(X509 **a, unsigned char **b, long c); 241 #endif 242 char *q_ERR_error_string(unsigned long a, char *b); 243 unsigned long q_ERR_get_error(); 244 const EVP_CIPHER *q_EVP_des_ede3_cbc(); 245 int q_EVP_PKEY_assign(EVP_PKEY *a, int b, char *c); 246 int q_EVP_PKEY_set1_RSA(EVP_PKEY *a, RSA *b); 247 int q_EVP_PKEY_set1_DSA(EVP_PKEY *a, DSA *b); 248 void q_EVP_PKEY_free(EVP_PKEY *a); 249 RSA *q_EVP_PKEY_get1_RSA(EVP_PKEY *a); 250 DSA *q_EVP_PKEY_get1_DSA(EVP_PKEY *a); 251 int q_EVP_PKEY_type(int a); 252 EVP_PKEY *q_EVP_PKEY_new(); 253 int q_i2d_X509(X509 *a, unsigned char **b); 254 const char *q_OBJ_nid2sn(int a); 255 int q_OBJ_obj2nid(const ASN1_OBJECT *a); 256 #ifdef SSLEAY_MACROS 257 // ### verify 258 void *q_PEM_ASN1_read_bio(d2i_of_void *a, const char *b, BIO *c, void **d, pem_password_cb *e, 259 void *f); 260 // ### ditto for write 261 #else 262 DSA *q_PEM_read_bio_DSAPrivateKey(BIO *a, DSA **b, pem_password_cb *c, void *d); 263 RSA *q_PEM_read_bio_RSAPrivateKey(BIO *a, RSA **b, pem_password_cb *c, void *d); 264 int q_PEM_write_bio_DSAPrivateKey(BIO *a, DSA *b, const EVP_CIPHER *c, unsigned char *d, 265 int e, pem_password_cb *f, void *g); 266 int q_PEM_write_bio_RSAPrivateKey(BIO *a, RSA *b, const EVP_CIPHER *c, unsigned char *d, 267 int e, pem_password_cb *f, void *g); 268 #endif 269 DSA *q_PEM_read_bio_DSA_PUBKEY(BIO *a, DSA **b, pem_password_cb *c, void *d); 270 RSA *q_PEM_read_bio_RSA_PUBKEY(BIO *a, RSA **b, pem_password_cb *c, void *d); 271 int q_PEM_write_bio_DSA_PUBKEY(BIO *a, DSA *b); 272 int q_PEM_write_bio_RSA_PUBKEY(BIO *a, RSA *b); 273 void q_RAND_seed(const void *a, int b); 274 int q_RAND_status(); 275 void q_RSA_free(RSA *a); 276 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 277 int q_sk_num(STACK *a); 278 void q_sk_pop_free(STACK *a, void (*b)(void *)); 279 #if OPENSSL_VERSION_NUMBER >= 0x10000000L 280 void q_sk_free(_STACK *a); 281 void * q_sk_value(STACK *a, int b); 282 #else 283 void q_sk_free(STACK *a); 284 char * q_sk_value(STACK *a, int b); 285 #endif 286 #else 287 int q_OPENSSL_sk_num(STACK *a); 288 void q_OPENSSL_sk_pop_free(STACK *a, void (*b)(void *)); 289 void q_OPENSSL_sk_free(_STACK *a); 290 void * q_OPENSSL_sk_value(STACK *a, int b); 291 #define q_sk_num q_OPENSSL_sk_num 292 #define q_sk_pop_free q_OPENSSL_sk_pop_free 293 #define q_sk_free q_OPENSSL_sk_free 294 #define q_sk_value q_OPENSSL_sk_value 295 #endif 296 int q_SSL_accept(SSL *a); 297 int q_SSL_clear(SSL *a); 298 char *q_SSL_CIPHER_description(SSL_CIPHER *a, char *b, int c); 299 int q_SSL_connect(SSL *a); 300 #if OPENSSL_VERSION_NUMBER >= 0x00908000L 301 // 0.9.8 broke SC and BC by changing this function's signature. 302 int q_SSL_CTX_check_private_key(const SSL_CTX *a); 303 #else 304 int q_SSL_CTX_check_private_key(SSL_CTX *a); 305 #endif 306 long q_SSL_CTX_ctrl(SSL_CTX *a, int b, long c, void *d); 307 void q_SSL_CTX_free(SSL_CTX *a); 308 #if OPENSSL_VERSION_NUMBER >= 0x10000000L 309 SSL_CTX *q_SSL_CTX_new(const SSL_METHOD *a); 310 #else 311 SSL_CTX *q_SSL_CTX_new(SSL_METHOD *a); 312 #endif 313 int q_SSL_CTX_set_cipher_list(SSL_CTX *a, const char *b); 314 int q_SSL_CTX_set_default_verify_paths(SSL_CTX *a); 315 void q_SSL_CTX_set_verify(SSL_CTX *a, int b, int (*c)(int, X509_STORE_CTX *)); 316 void q_SSL_CTX_set_verify_depth(SSL_CTX *a, int b); 317 int q_SSL_CTX_use_certificate(SSL_CTX *a, X509 *b); 318 int q_SSL_CTX_use_certificate_file(SSL_CTX *a, const char *b, int c); 319 int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b); 320 int q_SSL_CTX_use_RSAPrivateKey(SSL_CTX *a, RSA *b); 321 int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c); 322 void q_SSL_free(SSL *a); 323 #if OPENSSL_VERSION_NUMBER >= 0x00908000L 324 // 0.9.8 broke SC and BC by changing this function's signature. 325 STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a); 326 #else 327 STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(SSL *a); 328 #endif 329 #if OPENSSL_VERSION_NUMBER >= 0x10000000L 330 const SSL_CIPHER *q_SSL_get_current_cipher(SSL *a); 331 #else 332 SSL_CIPHER *q_SSL_get_current_cipher(SSL *a); 333 #endif 334 int q_SSL_get_error(SSL *a, int b); 335 STACK_OF(X509) *q_SSL_get_peer_cert_chain(SSL *a); 336 X509 *q_SSL_get_peer_certificate(SSL *a); 337 #if OPENSSL_VERSION_NUMBER >= 0x00908000L 338 // 0.9.8 broke SC and BC by changing this function's signature. 339 long q_SSL_get_verify_result(const SSL *a); 340 #else 341 long q_SSL_get_verify_result(SSL *a); 342 #endif 343 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 344 int q_SSL_library_init(); 345 void q_SSL_load_error_strings(); 346 #else 347 int q_OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); 348 #define q_SSL_library_init() q_OPENSSL_init_ssl(0, NULL) 349 #define q_SSL_load_error_strings() q_OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) 350 #endif 351 SSL *q_SSL_new(SSL_CTX *a); 352 #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) 353 long q_SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg); 354 #endif 355 int q_SSL_read(SSL *a, void *b, int c); 356 void q_SSL_set_bio(SSL *a, BIO *b, BIO *c); 357 void q_SSL_set_accept_state(SSL *a); 358 void q_SSL_set_connect_state(SSL *a); 359 int q_SSL_shutdown(SSL *a); 360 #if OPENSSL_VERSION_NUMBER >= 0x10000000L 361 const SSL_METHOD *q_SSLv2_client_method(); 362 const SSL_METHOD *q_SSLv3_client_method(); 363 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 364 const SSL_METHOD *q_SSLv23_client_method(); 365 #else 366 const SSL_METHOD *q_TLS_client_method(); 367 #define q_SSLv23_client_method q_TLS_client_method 368 #endif 369 const SSL_METHOD *q_TLSv1_client_method(); 370 const SSL_METHOD *q_SSLv2_server_method(); 371 const SSL_METHOD *q_SSLv3_server_method(); 372 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 373 const SSL_METHOD *q_SSLv23_server_method(); 374 #else 375 const SSL_METHOD *q_TLS_server_method(); 376 #define q_SSLv23_server_method q_TLS_server_method 377 #endif 378 const SSL_METHOD *q_TLSv1_server_method(); 379 #else 380 SSL_METHOD *q_SSLv2_client_method(); 381 SSL_METHOD *q_SSLv3_client_method(); 382 SSL_METHOD *q_SSLv23_client_method(); 383 SSL_METHOD *q_TLSv1_client_method(); 384 SSL_METHOD *q_SSLv2_server_method(); 385 SSL_METHOD *q_SSLv3_server_method(); 386 SSL_METHOD *q_SSLv23_server_method(); 387 SSL_METHOD *q_TLSv1_server_method(); 388 #endif 389 int q_SSL_write(SSL *a, const void *b, int c); 390 int q_X509_cmp(X509 *a, X509 *b); 391 #ifdef SSLEAY_MACROS 392 void *q_ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, char *x); 393 #define q_X509_dup(x509) (X509 *)q_ASN1_dup((i2d_of_void *)q_i2d_X509, \ 394 (d2i_of_void *)q_d2i_X509,(char *)x509) 395 #else 396 X509 *q_X509_dup(X509 *a); 397 #endif 398 ASN1_OBJECT *q_X509_EXTENSION_get_object(X509_EXTENSION *a); 399 void q_X509_free(X509 *a); 400 X509_EXTENSION *q_X509_get_ext(X509 *a, int b); 401 int q_X509_get_ext_count(X509 *a); 402 void *q_X509_get_ext_d2i(X509 *a, int b, int *c, int *d); 403 X509_NAME *q_X509_get_issuer_name(X509 *a); 404 X509_NAME *q_X509_get_subject_name(X509 *a); 405 int q_X509_verify_cert(X509_STORE_CTX *ctx); 406 int q_X509_NAME_entry_count(X509_NAME *a); 407 X509_NAME_ENTRY *q_X509_NAME_get_entry(X509_NAME *a,int b); 408 ASN1_STRING *q_X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *a); 409 ASN1_OBJECT *q_X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *a); 410 EVP_PKEY *q_X509_PUBKEY_get(X509_PUBKEY *a); 411 void q_X509_STORE_free(X509_STORE *store); 412 X509_STORE *q_X509_STORE_new(); 413 int q_X509_STORE_add_cert(X509_STORE *ctx, X509 *x); 414 void q_X509_STORE_CTX_free(X509_STORE_CTX *storeCtx); 415 int q_X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, 416 X509 *x509, STACK_OF(X509) *chain); 417 X509_STORE_CTX *q_X509_STORE_CTX_new(); 418 int q_X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); 419 int q_X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); 420 int q_X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); 421 X509 *q_X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); 422 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 423 STACK_OF(X509) *q_X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx); 424 #else 425 STACK_OF(X509) *q_X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); 426 #define q_X509_STORE_CTX_get_chain q_X509_STORE_CTX_get0_chain 427 #endif 428 429 #define q_BIO_get_mem_data(b, pp) (int)q_BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp) 430 #define q_BIO_pending(b) (int)q_BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) 431 #ifdef SSLEAY_MACROS 432 int q_i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); 433 int q_i2d_RSAPrivateKey(const RSA *a, unsigned char **pp); 434 RSA *q_d2i_RSAPrivateKey(RSA **a, unsigned char **pp, long length); 435 DSA *q_d2i_DSAPrivateKey(DSA **a, unsigned char **pp, long length); 436 #define q_PEM_read_bio_RSAPrivateKey(bp, x, cb, u) \ 437 (RSA *)q_PEM_ASN1_read_bio( \ 438 (void *(*)(void**, const unsigned char**, long int))q_d2i_RSAPrivateKey, PEM_STRING_RSA, bp, (void **)x, cb, u) 439 #define q_PEM_read_bio_DSAPrivateKey(bp, x, cb, u) \ 440 (DSA *)q_PEM_ASN1_read_bio( \ 441 (void *(*)(void**, const unsigned char**, long int))q_d2i_DSAPrivateKey, PEM_STRING_DSA, bp, (void **)x, cb, u) 442 #define q_PEM_write_bio_RSAPrivateKey(bp,x,enc,kstr,klen,cb,u) \ 443 PEM_ASN1_write_bio((int (*)(void*, unsigned char**))q_i2d_RSAPrivateKey,PEM_STRING_RSA,\ 444 bp,(char *)x,enc,kstr,klen,cb,u) 445 #define q_PEM_write_bio_DSAPrivateKey(bp,x,enc,kstr,klen,cb,u) \ 446 PEM_ASN1_write_bio((int (*)(void*, unsigned char**))q_i2d_DSAPrivateKey,PEM_STRING_DSA,\ 447 bp,(char *)x,enc,kstr,klen,cb,u) 448 #endif 449 450 X509_STORE * q_SSL_CTX_get_cert_store(const SSL_CTX *ctx); 451 ASN1_INTEGER * q_X509_get_serialNumber(X509 *x); 452 453 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 454 #define q_SSL_CTX_set_options(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL) 455 #define q_X509_get_version(x) X509_get_version(x) 456 #else 457 int q_EVP_PKEY_id(const EVP_PKEY *pkey); 458 int q_EVP_PKEY_base_id(const EVP_PKEY *pkey); 459 int q_SSL_CIPHER_get_bits(const SSL_CIPHER *cipher, int *alg_bits); 460 long q_SSL_CTX_set_options(SSL_CTX *ctx, long options); 461 long q_X509_get_version(X509 *x); 462 X509_PUBKEY * q_X509_get_X509_PUBKEY(X509 *x); 463 int q_RSA_bits(const RSA *rsa); 464 int q_DSA_security_bits(const DSA *dsa); 465 void q_DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); 466 #endif 467 468 #define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st) 469 #define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_sk_value)(st, i) 470 #define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num(GENERAL_NAME, (st)) 471 #define q_sk_GENERAL_NAME_value(st, i) q_SKM_sk_value(GENERAL_NAME, (st), (i)) 472 #define q_sk_X509_num(st) q_SKM_sk_num(X509, (st)) 473 #define q_sk_X509_value(st, i) q_SKM_sk_value(X509, (st), (i)) 474 #define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num(SSL_CIPHER, (st)) 475 #define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i)) 476 #define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \ 477 q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) 478 479 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 480 #define q_X509_get_notAfter(x) X509_get_notAfter(x) 481 #define q_X509_get_notBefore(x) X509_get_notBefore(x) 482 #else 483 ASN1_TIME *q_X509_getm_notAfter(X509 *x); 484 ASN1_TIME *q_X509_getm_notBefore(X509 *x); 485 #define q_X509_get_notAfter(x) q_X509_getm_notAfter(x) 486 #define q_X509_get_notBefore(x) q_X509_getm_notBefore(x) 487 #endif 488 489 #define q_EVP_PKEY_assign_RSA(pkey,rsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ 490 (char *)(rsa)) 491 #define q_EVP_PKEY_assign_DSA(pkey,dsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ 492 (char *)(dsa)) 493 #ifdef OPENSSL_LOAD_CONF 494 #define q_OpenSSL_add_all_algorithms() q_OPENSSL_add_all_algorithms_conf() 495 #else 496 #define q_OpenSSL_add_all_algorithms() q_OPENSSL_add_all_algorithms_noconf() 497 #endif 498 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 499 void q_OPENSSL_add_all_algorithms_noconf(); 500 void q_OPENSSL_add_all_algorithms_conf(); 501 #else 502 int q_OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); 503 #define q_OPENSSL_add_all_algorithms_conf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS | OPENSSL_INIT_LOAD_CONFIG, NULL) 504 # define q_OPENSSL_add_all_algorithms_noconf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) 505 #endif 506 int q_SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath); 507 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) 508 long q_SSLeay(); 509 #else 510 unsigned long q_OpenSSL_version_num(); 511 #define q_SSLeay q_OpenSSL_version_num 512 #endif 513 514 // Helper function 515 class QDateTime; 516 QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime); 517 518 QT_END_NAMESPACE 519 520 #endif 521