Add the ability to convert a certificate to text
[profile/ivi/qtbase.git] / src / network / ssl / qsslsocket_openssl_symbols_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtNetwork module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
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 BIO *q_BIO_new(BIO_METHOD *a);
211 BIO *q_BIO_new_mem_buf(void *a, int b);
212 int q_BIO_read(BIO *a, void *b, int c);
213 BIO_METHOD *q_BIO_s_mem();
214 int q_BIO_write(BIO *a, const void *b, int c);
215 int q_BN_num_bits(const BIGNUM *a);
216 int q_CRYPTO_num_locks();
217 void q_CRYPTO_set_locking_callback(void (*a)(int, int, const char *, int));
218 void q_CRYPTO_set_id_callback(unsigned long (*a)());
219 void q_CRYPTO_free(void *a);
220 void q_DSA_free(DSA *a);
221 #if OPENSSL_VERSION_NUMBER >= 0x00908000L
222 // 0.9.8 broke SC and BC by changing this function's signature.
223 X509 *q_d2i_X509(X509 **a, const unsigned char **b, long c);
224 #else
225 X509 *q_d2i_X509(X509 **a, unsigned char **b, long c);
226 #endif
227 char *q_ERR_error_string(unsigned long a, char *b);
228 unsigned long q_ERR_get_error();
229 const EVP_CIPHER *q_EVP_des_ede3_cbc();
230 int q_EVP_PKEY_assign(EVP_PKEY *a, int b, char *c);
231 int q_EVP_PKEY_set1_RSA(EVP_PKEY *a, RSA *b);
232 int q_EVP_PKEY_set1_DSA(EVP_PKEY *a, DSA *b);
233 void q_EVP_PKEY_free(EVP_PKEY *a);
234 RSA *q_EVP_PKEY_get1_RSA(EVP_PKEY *a);
235 DSA *q_EVP_PKEY_get1_DSA(EVP_PKEY *a);
236 int q_EVP_PKEY_type(int a);
237 EVP_PKEY *q_EVP_PKEY_new();
238 int q_i2d_X509(X509 *a, unsigned char **b);
239 const char *q_OBJ_nid2sn(int a);
240 int q_OBJ_obj2nid(const ASN1_OBJECT *a);
241 #ifdef SSLEAY_MACROS
242 // ### verify
243 void *q_PEM_ASN1_read_bio(d2i_of_void *a, const char *b, BIO *c, void **d, pem_password_cb *e,
244                           void *f);
245 // ### ditto for write
246 #else
247 DSA *q_PEM_read_bio_DSAPrivateKey(BIO *a, DSA **b, pem_password_cb *c, void *d);
248 RSA *q_PEM_read_bio_RSAPrivateKey(BIO *a, RSA **b, pem_password_cb *c, void *d);
249 int q_PEM_write_bio_DSAPrivateKey(BIO *a, DSA *b, const EVP_CIPHER *c, unsigned char *d,
250                                   int e, pem_password_cb *f, void *g);
251 int q_PEM_write_bio_RSAPrivateKey(BIO *a, RSA *b, const EVP_CIPHER *c, unsigned char *d,
252                                   int e, pem_password_cb *f, void *g);
253 #endif
254 DSA *q_PEM_read_bio_DSA_PUBKEY(BIO *a, DSA **b, pem_password_cb *c, void *d);
255 RSA *q_PEM_read_bio_RSA_PUBKEY(BIO *a, RSA **b, pem_password_cb *c, void *d);
256 int q_PEM_write_bio_DSA_PUBKEY(BIO *a, DSA *b);
257 int q_PEM_write_bio_RSA_PUBKEY(BIO *a, RSA *b);
258 void q_RAND_seed(const void *a, int b);
259 int q_RAND_status();
260 void q_RSA_free(RSA *a);
261 int q_sk_num(STACK *a);
262 void q_sk_pop_free(STACK *a, void (*b)(void *));
263 #if OPENSSL_VERSION_NUMBER >= 0x10000000L
264 void q_sk_free(_STACK *a);
265 void * q_sk_value(STACK *a, int b);
266 #else
267 void q_sk_free(STACK *a);
268 char * q_sk_value(STACK *a, int b);
269 #endif
270 int q_SSL_accept(SSL *a);
271 int q_SSL_clear(SSL *a);
272 char *q_SSL_CIPHER_description(SSL_CIPHER *a, char *b, int c);
273 int q_SSL_connect(SSL *a);
274 #if OPENSSL_VERSION_NUMBER >= 0x00908000L
275 // 0.9.8 broke SC and BC by changing this function's signature.
276 int q_SSL_CTX_check_private_key(const SSL_CTX *a);
277 #else
278 int q_SSL_CTX_check_private_key(SSL_CTX *a);
279 #endif
280 long q_SSL_CTX_ctrl(SSL_CTX *a, int b, long c, void *d);
281 void q_SSL_CTX_free(SSL_CTX *a);
282 #if OPENSSL_VERSION_NUMBER >= 0x10000000L
283 SSL_CTX *q_SSL_CTX_new(const SSL_METHOD *a);
284 #else
285 SSL_CTX *q_SSL_CTX_new(SSL_METHOD *a);
286 #endif
287 int q_SSL_CTX_set_cipher_list(SSL_CTX *a, const char *b);
288 int q_SSL_CTX_set_default_verify_paths(SSL_CTX *a);
289 void q_SSL_CTX_set_verify(SSL_CTX *a, int b, int (*c)(int, X509_STORE_CTX *));
290 void q_SSL_CTX_set_verify_depth(SSL_CTX *a, int b);
291 int q_SSL_CTX_use_certificate(SSL_CTX *a, X509 *b);
292 int q_SSL_CTX_use_certificate_file(SSL_CTX *a, const char *b, int c);
293 int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b);
294 int q_SSL_CTX_use_RSAPrivateKey(SSL_CTX *a, RSA *b);
295 int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c);
296 void q_SSL_free(SSL *a);
297 #if OPENSSL_VERSION_NUMBER >= 0x00908000L
298 // 0.9.8 broke SC and BC by changing this function's signature.
299 STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a);
300 #else
301 STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(SSL *a);
302 #endif
303 #if OPENSSL_VERSION_NUMBER >= 0x10000000L
304 const SSL_CIPHER *q_SSL_get_current_cipher(SSL *a);
305 #else
306 SSL_CIPHER *q_SSL_get_current_cipher(SSL *a);
307 #endif
308 int q_SSL_get_error(SSL *a, int b);
309 STACK_OF(X509) *q_SSL_get_peer_cert_chain(SSL *a);
310 X509 *q_SSL_get_peer_certificate(SSL *a);
311 #if OPENSSL_VERSION_NUMBER >= 0x00908000L
312 // 0.9.8 broke SC and BC by changing this function's signature.
313 long q_SSL_get_verify_result(const SSL *a);
314 #else
315 long q_SSL_get_verify_result(SSL *a);
316 #endif
317 int q_SSL_library_init();
318 void q_SSL_load_error_strings();
319 SSL *q_SSL_new(SSL_CTX *a);
320 #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT)
321 long q_SSL_ctrl(SSL *ssl,int cmd, long larg, const void *parg);
322 #endif
323 int q_SSL_read(SSL *a, void *b, int c);
324 void q_SSL_set_bio(SSL *a, BIO *b, BIO *c);
325 void q_SSL_set_accept_state(SSL *a);
326 void q_SSL_set_connect_state(SSL *a);
327 int q_SSL_shutdown(SSL *a);
328 #if OPENSSL_VERSION_NUMBER >= 0x10000000L
329 const SSL_METHOD *q_SSLv2_client_method();
330 const SSL_METHOD *q_SSLv3_client_method();
331 const SSL_METHOD *q_SSLv23_client_method();
332 const SSL_METHOD *q_TLSv1_client_method();
333 const SSL_METHOD *q_SSLv2_server_method();
334 const SSL_METHOD *q_SSLv3_server_method();
335 const SSL_METHOD *q_SSLv23_server_method();
336 const SSL_METHOD *q_TLSv1_server_method();
337 #else
338 SSL_METHOD *q_SSLv2_client_method();
339 SSL_METHOD *q_SSLv3_client_method();
340 SSL_METHOD *q_SSLv23_client_method();
341 SSL_METHOD *q_TLSv1_client_method();
342 SSL_METHOD *q_SSLv2_server_method();
343 SSL_METHOD *q_SSLv3_server_method();
344 SSL_METHOD *q_SSLv23_server_method();
345 SSL_METHOD *q_TLSv1_server_method();
346 #endif
347 int q_SSL_write(SSL *a, const void *b, int c);
348 int q_X509_cmp(X509 *a, X509 *b);
349 #ifdef SSLEAY_MACROS
350 void *q_ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, char *x);
351 #define q_X509_dup(x509) (X509 *)q_ASN1_dup((i2d_of_void *)q_i2d_X509, \
352                 (d2i_of_void *)q_d2i_X509,(char *)x509)
353 #else
354 X509 *q_X509_dup(X509 *a);
355 #endif
356 void q_X509_print(BIO *a, X509*b);
357 ASN1_OBJECT *q_X509_EXTENSION_get_object(X509_EXTENSION *a);
358 void q_X509_free(X509 *a);
359 X509_EXTENSION *q_X509_get_ext(X509 *a, int b);
360 int q_X509_get_ext_count(X509 *a);
361 void *q_X509_get_ext_d2i(X509 *a, int b, int *c, int *d);
362 X509_NAME *q_X509_get_issuer_name(X509 *a);
363 X509_NAME *q_X509_get_subject_name(X509 *a);
364 int q_X509_verify_cert(X509_STORE_CTX *ctx);
365 int q_X509_NAME_entry_count(X509_NAME *a);
366 X509_NAME_ENTRY *q_X509_NAME_get_entry(X509_NAME *a,int b);
367 ASN1_STRING *q_X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *a);
368 ASN1_OBJECT *q_X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *a);
369 EVP_PKEY *q_X509_PUBKEY_get(X509_PUBKEY *a);
370 void q_X509_STORE_free(X509_STORE *store);
371 X509_STORE *q_X509_STORE_new();
372 int q_X509_STORE_add_cert(X509_STORE *ctx, X509 *x);
373 void q_X509_STORE_CTX_free(X509_STORE_CTX *storeCtx);
374 int q_X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store,
375                           X509 *x509, STACK_OF(X509) *chain);
376 X509_STORE_CTX *q_X509_STORE_CTX_new();
377 int q_X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);
378
379 #define q_BIO_get_mem_data(b, pp) (int)q_BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)
380 #define q_BIO_pending(b) (int)q_BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)
381 #ifdef SSLEAY_MACROS
382 int     q_i2d_DSAPrivateKey(const DSA *a, unsigned char **pp);
383 int     q_i2d_RSAPrivateKey(const RSA *a, unsigned char **pp);
384 RSA *q_d2i_RSAPrivateKey(RSA **a, unsigned char **pp, long length);
385 DSA *q_d2i_DSAPrivateKey(DSA **a, unsigned char **pp, long length);
386 #define q_PEM_read_bio_RSAPrivateKey(bp, x, cb, u) \
387         (RSA *)q_PEM_ASN1_read_bio( \
388         (void *(*)(void**, const unsigned char**, long int))q_d2i_RSAPrivateKey, PEM_STRING_RSA, bp, (void **)x, cb, u)
389 #define q_PEM_read_bio_DSAPrivateKey(bp, x, cb, u) \
390         (DSA *)q_PEM_ASN1_read_bio( \
391         (void *(*)(void**, const unsigned char**, long int))q_d2i_DSAPrivateKey, PEM_STRING_DSA, bp, (void **)x, cb, u)
392 #define q_PEM_write_bio_RSAPrivateKey(bp,x,enc,kstr,klen,cb,u) \
393                 PEM_ASN1_write_bio((int (*)(void*, unsigned char**))q_i2d_RSAPrivateKey,PEM_STRING_RSA,\
394                         bp,(char *)x,enc,kstr,klen,cb,u)
395 #define q_PEM_write_bio_DSAPrivateKey(bp,x,enc,kstr,klen,cb,u) \
396                 PEM_ASN1_write_bio((int (*)(void*, unsigned char**))q_i2d_DSAPrivateKey,PEM_STRING_DSA,\
397                         bp,(char *)x,enc,kstr,klen,cb,u)
398 #endif
399 #define q_SSL_CTX_set_options(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL)
400 #define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st)
401 #define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_sk_value)(st, i)
402 #define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num(GENERAL_NAME, (st))
403 #define q_sk_GENERAL_NAME_value(st, i) q_SKM_sk_value(GENERAL_NAME, (st), (i))
404 #define q_sk_X509_num(st) q_SKM_sk_num(X509, (st))
405 #define q_sk_X509_value(st, i) q_SKM_sk_value(X509, (st), (i))
406 #define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num(SSL_CIPHER, (st))
407 #define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i))
408 #define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \
409         q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
410 #define q_X509_get_notAfter(x) X509_get_notAfter(x)
411 #define q_X509_get_notBefore(x) X509_get_notBefore(x)
412 #define q_EVP_PKEY_assign_RSA(pkey,rsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\
413                                         (char *)(rsa))
414 #define q_EVP_PKEY_assign_DSA(pkey,dsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\
415                                         (char *)(dsa))
416 #ifdef OPENSSL_LOAD_CONF
417 #define q_OpenSSL_add_all_algorithms() q_OPENSSL_add_all_algorithms_conf()
418 #else
419 #define q_OpenSSL_add_all_algorithms() q_OPENSSL_add_all_algorithms_noconf()
420 #endif
421 void q_OPENSSL_add_all_algorithms_noconf();
422 void q_OPENSSL_add_all_algorithms_conf();
423 int q_SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath);
424 long q_SSLeay();
425
426 // Helper function
427 class QDateTime;
428 QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime);
429
430 QT_END_NAMESPACE
431
432 #endif