22#include <ksslconfig.h>
25#include <openssl/opensslv.h>
32#include <QtCore/QCoreApplication>
33#include <QtCore/QFile>
34#include <QtCore/QRegExp>
42static int (*K_SSL_connect) (SSL *) = 0L;
43static int (*K_SSL_accept) (SSL *) = 0L;
44static int (*K_SSL_read) (SSL *,
void *, int) = 0L;
45static int (*K_SSL_write) (SSL *,
const void *, int) = 0L;
46static SSL *(*K_SSL_new) (SSL_CTX *) = 0L;
47static void (*K_SSL_free) (SSL *) = 0L;
48static int (*K_SSL_shutdown) (SSL *) = 0L;
49static SSL_CTX *(*K_SSL_CTX_new)(SSL_METHOD *) = 0L;
50static void (*K_SSL_CTX_free) (SSL_CTX *) = 0L;
51static int (*K_SSL_set_fd) (SSL *, int) = 0L;
52static int (*K_SSL_pending) (SSL *) = 0L;
53static int (*K_SSL_peek) (SSL *,
void *, int) = 0L;
54static int (*K_SSL_CTX_set_cipher_list)(SSL_CTX *,
const char *) = 0L;
55static void (*K_SSL_CTX_set_verify)(SSL_CTX *, int,
56 int (*)(int, X509_STORE_CTX *)) = 0L;
57static int (*K_SSL_use_certificate)(SSL *, X509 *) = 0L;
58static SSL_CIPHER *(*K_SSL_get_current_cipher)(SSL *) = 0L;
59static long (*K_SSL_ctrl) (SSL *,int, long,
char *) = 0L;
60static int (*K_RAND_egd) (
const char *) = 0L;
61static const char* (*K_RAND_file_name) (
char *, size_t) = 0L;
62static int (*K_RAND_load_file) (
const char *, long) = 0L;
63static int (*K_RAND_write_file) (
const char *) = 0L;
64static SSL_METHOD * (*K_TLSv1_client_method) () = 0L;
65static SSL_METHOD * (*K_SSLv23_client_method) () = 0L;
66static X509 * (*K_SSL_get_peer_certificate) (SSL *) = 0L;
67static int (*K_SSL_CIPHER_get_bits) (SSL_CIPHER *,
int *) = 0L;
68static char * (*K_SSL_CIPHER_get_version) (SSL_CIPHER *) = 0L;
69static const char * (*K_SSL_CIPHER_get_name) (SSL_CIPHER *) = 0L;
70static char * (*K_SSL_CIPHER_description) (SSL_CIPHER *,
char *, int) = 0L;
71static X509 * (*K_d2i_X509) (X509 **,
unsigned char **,long) = 0L;
72static int (*K_i2d_X509) (X509 *,
unsigned char **) = 0L;
73static int (*K_X509_cmp) (X509 *, X509 *) = 0L;
74static void (*K_X509_STORE_CTX_free) (X509_STORE_CTX *) = 0L;
75static int (*K_X509_verify_cert) (X509_STORE_CTX *) = 0L;
76static X509_STORE_CTX *(*K_X509_STORE_CTX_new) (void) = 0L;
77static void (*K_X509_STORE_free) (X509_STORE *) = 0L;
78static void (*K_X509_STORE_set_verify_cb)(X509_STORE *, int (*)(int, X509_STORE_CTX *)) = 0L;
79static X509_STORE *(*K_X509_STORE_new) (void) = 0L;
80static void (*K_X509_free) (X509 *) = 0L;
81static char *(*K_X509_NAME_oneline) (X509_NAME *,
char *,int) = 0L;
82static X509_NAME *(*K_X509_get_subject_name) (X509 *) = 0L;
83static X509_NAME *(*K_X509_get_issuer_name) (X509 *) = 0L;
84static void (*K_X509_get0_signature)(
const ASN1_BIT_STRING **psig,
const X509_ALGOR **palg,
const X509 *x) = 0L;
85static X509_LOOKUP *(*K_X509_STORE_add_lookup) (X509_STORE *, X509_LOOKUP_METHOD *) = 0L;
86static X509_LOOKUP_METHOD *(*K_X509_LOOKUP_file)(void) = 0L;
87static void (*K_X509_LOOKUP_free)(X509_LOOKUP *) = 0L;
88static int (*K_X509_LOOKUP_ctrl)(X509_LOOKUP *, int,
const char *, long,
char **) = 0L;
89static void (*K_X509_STORE_CTX_init)(X509_STORE_CTX *, X509_STORE *, X509 *,
STACK_OF(X509) *) = 0L;
90#if OPENSSL_VERSION_NUMBER < 0x10100000L
91static void (*K_CRYPTO_free) (
void *) = 0L;
93static void (*K_CRYPTO_free)(
void *,
const char *, int) = 0L;
95static X509* (*K_X509_dup) (X509 *) = 0L;
96static ASN1_TIME *(*K_X509_getm_notBefore)(
const X509 *) = 0L;
97static ASN1_TIME *(*K_X509_getm_notAfter)(
const X509 *) = 0L;
98static BIO_METHOD *(*K_BIO_s_mem) (void) = 0L;
99static BIO* (*K_BIO_new) (BIO_METHOD *) = 0L;
100static BIO* (*K_BIO_new_fp) (FILE *, int) = 0L;
101static BIO* (*K_BIO_new_mem_buf) (
void *, int) = 0L;
102static int (*K_BIO_free) (BIO *) = 0L;
103static long (*K_BIO_ctrl) (BIO *,int,long,
void *) = 0L;
104static int (*K_BIO_write) (BIO *b,
const void *data,
int len) = 0L;
105static int (*K_PEM_ASN1_write_bio) (int (*)(),
const char *,BIO *,
char *,
106 const EVP_CIPHER *,
unsigned char *,
int ,
107 pem_password_cb *,
void *) = 0L;
108static int (*K_ASN1_item_i2d_fp)(ASN1_ITEM *,FILE *,
unsigned char *) = 0L;
109static ASN1_ITEM *K_NETSCAPE_X509_it = 0L;
110static int (*K_X509_print_fp) (FILE *, X509*) = 0L;
111static int (*K_i2d_PKCS12) (PKCS12*,
unsigned char**) = 0L;
112static int (*K_i2d_PKCS12_fp) (FILE *, PKCS12*) = 0L;
113static int (*K_PKCS12_newpass) (PKCS12*,
char*,
char*) = 0L;
114static PKCS12* (*K_d2i_PKCS12_fp) (FILE*, PKCS12**) = 0L;
115static PKCS12* (*K_PKCS12_new) (void) = 0L;
116static void (*K_PKCS12_free) (PKCS12 *) = 0L;
117static int (*K_PKCS12_parse) (PKCS12*,
const char *, EVP_PKEY**,
119static void (*K_EVP_PKEY_free) (EVP_PKEY *) = 0L;
120static EVP_PKEY* (*K_EVP_PKEY_new) () = 0L;
121static void (*K_X509_REQ_free) (X509_REQ *) = 0L;
122static X509_REQ* (*K_X509_REQ_new) () = 0L;
123static int (*K_SSL_CTX_use_PrivateKey) (SSL_CTX*, EVP_PKEY*) = 0L;
124static int (*K_SSL_CTX_use_certificate) (SSL_CTX*, X509*) = 0L;
125static int (*K_SSL_get_error) (SSL*, int) = 0L;
126static STACK_OF(X509)* (*K_SSL_get_peer_cert_chain) (SSL*) = 0L;
127static void (*K_X509_STORE_CTX_set_chain) (X509_STORE_CTX *,
STACK_OF(X509)*) = 0L;
128static void (*K_X509_STORE_CTX_set_purpose) (X509_STORE_CTX *, int) = 0L;
129static X509 *(*K_X509_STORE_CTX_get_current_cert)(X509_STORE_CTX *) = 0L;
130static void (*K_X509_STORE_CTX_set_error)(X509_STORE_CTX *, int) = 0L;
131static int (*K_X509_STORE_CTX_get_error)(X509_STORE_CTX *) = 0L;
132static void (*K_OPENSSL_sk_free)(STACK *) = 0L;
133static int (*K_OPENSSL_sk_num)(STACK *) = 0L;
134static char *(*K_OPENSSL_sk_pop)(STACK *) = 0L;
135static char *(*K_OPENSSL_sk_value)(STACK *, int) = 0L;
136static STACK *(*K_OPENSSL_sk_new)(int (*)()) = 0L;
137static int (*K_OPENSSL_sk_push)(STACK *,
char *) = 0L;
138static STACK *(*K_OPENSSL_sk_dup)(STACK *) = 0L;
139static char * (*K_i2s_ASN1_INTEGER) (X509V3_EXT_METHOD *, ASN1_INTEGER *) =0L;
140static ASN1_INTEGER * (*K_X509_get_serialNumber) (X509 *) = 0L;
141static EVP_PKEY *(*K_X509_get_pubkey)(X509 *) = 0L;
142static int (*K_i2d_PublicKey)(EVP_PKEY *,
unsigned char **) = 0L;
143static int (*K_X509_check_private_key)(X509 *, EVP_PKEY *) = 0L;
144static char * (*K_BN_bn2hex)(
const BIGNUM *) = 0L;
145static int (*K_X509_digest)(
const X509 *,
const EVP_MD *,
unsigned char *,
unsigned int *) = 0L;
146static EVP_MD* (*K_EVP_md5)() = 0L;
147static void (*K_ASN1_INTEGER_free)(ASN1_INTEGER *) = 0L;
148static int (*K_OBJ_obj2nid)(ASN1_OBJECT *) = 0L;
149static const char * (*K_OBJ_nid2ln)(int) = 0L;
150static int (*K_X509_get_ext_count)(X509*) = 0L;
151static int (*K_X509_get_ext_by_NID)(X509*, int, int) = 0L;
152static int (*K_X509_get_ext_by_OBJ)(X509*,ASN1_OBJECT*,int) = 0L;
153static X509_EXTENSION *(*K_X509_get_ext)(X509*,
int loc) = 0L;
154static X509_EXTENSION *(*K_X509_delete_ext)(X509*, int) = 0L;
155static int (*K_X509_add_ext)(X509*, X509_EXTENSION*, int) = 0L;
156static void *(*K_X509_get_ext_d2i)(X509*, int,
int*,
int*) = 0L;
157static char *(*K_i2s_ASN1_OCTET_STRING)(X509V3_EXT_METHOD*, ASN1_OCTET_STRING*) = 0L;
158static int (*K_ASN1_BIT_STRING_get_bit)(ASN1_BIT_STRING*, int) = 0L;
159static PKCS7 *(*K_PKCS7_new)() = 0L;
160static void (*K_PKCS7_free)(PKCS7*) = 0L;
161static void (*K_PKCS7_content_free)(PKCS7*) = 0L;
162static int (*K_i2d_PKCS7)(PKCS7*,
unsigned char**) = 0L;
163static PKCS7 *(*K_d2i_PKCS7)(PKCS7**,
unsigned char**,long) = 0L;
164static int (*K_i2d_PKCS7_fp)(FILE*,PKCS7*) = 0L;
165static PKCS7* (*K_d2i_PKCS7_fp)(FILE*,PKCS7**) = 0L;
166static int (*K_i2d_PKCS7_bio)(BIO *bp,PKCS7 *p7) = 0L;
167static PKCS7 *(*K_d2i_PKCS7_bio)(BIO *bp,PKCS7 **p7) = 0L;
168static PKCS7* (*K_PKCS7_dup)(PKCS7*) = 0L;
169static STACK_OF(X509_NAME) *(*K_SSL_load_client_CA_file)(
const char*) = 0L;
170static STACK_OF(X509_INFO) *(*K_PEM_X509_INFO_read)(FILE*,
STACK_OF(X509_INFO)*, pem_password_cb*,
void*) = 0L;
171static char *(*K_ASN1_d2i_fp)(
char *(*)(),
char *(*)(),FILE*,
unsigned char**) = 0L;
172static X509 *(*K_X509_new)() = 0L;
173static int (*K_X509_PURPOSE_get_count)() = 0L;
174static int (*K_X509_PURPOSE_get_id)(X509_PURPOSE *) = 0L;
175static int (*K_X509_check_purpose)(X509*,int,int) = 0L;
176static X509_PURPOSE* (*K_X509_PURPOSE_get0)(int) = 0L;
177static int (*K_EVP_PKEY_assign)(EVP_PKEY*, int,
char*) = 0L;
178static int (*K_EVP_PKEY_base_id)(EVP_PKEY *) = 0L;
179static RSA *(*K_EVP_PKEY_get0_RSA)(EVP_PKEY *) = 0L;
180static void (*K_RSA_get0_key)(RSA *,
const BIGNUM **,
const BIGNUM **,
const BIGNUM **) = 0L;
181static DSA *(*K_EVP_PKEY_get0_DSA)(EVP_PKEY *) = 0L;
182static void (*K_DSA_get0_pqg)(DSA *,
const BIGNUM **,
const BIGNUM **,
const BIGNUM **) = 0L;
183static void (*K_DSA_get0_key)(DSA *,
const BIGNUM **,
const BIGNUM **) = 0L;
184static int (*K_X509_REQ_set_pubkey)(X509_REQ*, EVP_PKEY*) = 0L;
185static RSA *(*K_RSA_generate_key)(int,
unsigned long, void (*)(int,int,
void *),
void *) = 0L;
186static int (*K_i2d_X509_REQ_fp)(FILE*, X509_REQ*) = 0L;
187static void (*K_ERR_clear_error)() = 0L;
188static unsigned long (*K_ERR_get_error)() = 0L;
189static void (*K_ERR_print_errors_fp)(FILE*) = 0L;
190static PKCS7 *(*K_PKCS7_sign)(X509*, EVP_PKEY*,
STACK_OF(X509)*, BIO*, int) = 0L;
191static int (*K_PKCS7_verify)(PKCS7*,
STACK_OF(X509)*,X509_STORE*,BIO*,BIO*,int) = 0L;
192static STACK_OF(X509) *(*K_PKCS7_get0_signers)(PKCS7 *,
STACK_OF(X509) *, int) = 0L;
193static PKCS7 *(*K_PKCS7_encrypt)(
STACK_OF(X509) *, BIO *, EVP_CIPHER *, int) = 0L;
194static int (*K_PKCS7_decrypt)(PKCS7 *, EVP_PKEY *, X509 *, BIO *, int) = 0L;
195static SSL_SESSION* (*K_SSL_get1_session)(SSL*) = 0L;
196static void (*K_SSL_SESSION_free)(SSL_SESSION*) = 0L;
197static int (*K_SSL_set_session)(SSL*,SSL_SESSION*) = 0L;
198static SSL_SESSION* (*K_d2i_SSL_SESSION)(SSL_SESSION**,
unsigned char**, long) = 0L;
199static int (*K_i2d_SSL_SESSION)(SSL_SESSION*,
unsigned char**) = 0L;
200static STACK *(*K_X509_get1_email)(X509 *x) = 0L;
201static void (*K_X509_email_free)(STACK *sk) = 0L;
202static EVP_CIPHER *(*K_EVP_des_ede3_cbc)() = 0L;
203static EVP_CIPHER *(*K_EVP_des_cbc)() = 0L;
204static EVP_CIPHER *(*K_EVP_rc2_cbc)() = 0L;
205static EVP_CIPHER *(*K_EVP_rc2_64_cbc)() = 0L;
206static EVP_CIPHER *(*K_EVP_rc2_40_cbc)() = 0L;
207static int (*K_i2d_PrivateKey_fp)(FILE*,EVP_PKEY*) = 0L;
208static int (*K_i2d_PKCS8PrivateKey_fp)(FILE*, EVP_PKEY*,
const EVP_CIPHER*,
char*, int, pem_password_cb*,
void*) = 0L;
209static void (*K_RSA_free)(RSA*) = 0L;
210static EVP_CIPHER *(*K_EVP_bf_cbc)() = 0L;
211static int (*K_X509_REQ_sign)(X509_REQ*, EVP_PKEY*,
const EVP_MD*) = 0L;
212static int (*K_X509_NAME_add_entry_by_txt)(X509_NAME*,
char*, int,
unsigned char*, int, int, int) = 0L;
213static X509_NAME *(*K_X509_NAME_new)() = 0L;
214static int (*K_X509_REQ_set_subject_name)(X509_REQ*,X509_NAME*) = 0L;
215static unsigned char *(*K_ASN1_STRING_data)(ASN1_STRING*) = 0L;
216static int (*K_ASN1_STRING_length)(ASN1_STRING*) = 0L;
217static STACK_OF(SSL_CIPHER) *(*K_SSL_get_ciphers)(
const SSL *ssl) = 0L;
223class KOpenSSLProxyPrivate
226 KOpenSSLProxyPrivate()
227 : sslLib(0), cryptoLib(0),
ok(false)
235 static void cleanupKOpenSSLProxy() {
236 delete KOpenSSLProxyPrivate::sSelf;
242 return d->sslLib != 0L;
247 return d->cryptoLib != 0L;
253 KOpenSSLProxyPrivate::sSelf = 0;
258#include <QtCore/QDir>
259#include <QtCore/QString>
260#include <QtCore/QStringList>
262static QString findMostRecentLib(QString dir, QString name)
265 QString filter =
"lib"+
name+
".so.*";
269 QStringList l = d.entryList();
276 uint s = filter.length()-1;
277 for (QStringList::const_iterator it = l.begin(); it != l.end(); ++it) {
278 QString numberpart = (*it).mid(s);
279 uint endmaj = numberpart.indexOf(
'.');
283 int maj = numberpart.left(endmaj).toInt(&ok);
286 int min = numberpart.mid(endmaj+1).toInt(&ok);
289 if (maj > bestmaj || (maj == bestmaj && min > bestmin)) {
302KOpenSSLProxy::KOpenSSLProxy()
303 : d(new KOpenSSLProxyPrivate())
305 QStringList libpaths, libnamesc, libnamess;
312 QString upath = cg.readPathEntry(
"Path", QString());
313 if (!upath.isEmpty())
317 d->cryptoLib =
new KLibrary(
"libeay32.dll");
318 if (!d->cryptoLib->load()) {
322#elif defined(__OpenBSD__)
324 QString libname = findMostRecentLib(
"/usr/lib" KDELIBSUFF,
"crypto");
325 if (!libname.isNull()) {
326 d->cryptoLib =
new KLibrary(libname);
327 d->cryptoLib->setLoadHints(QLibrary::ExportExternalSymbolsHint);
328 if (!d->cryptoLib->load()) {
334#elif defined(__CYGWIN__)
335 libpaths <<
"/usr/bin/"
338 libnamess <<
"cygssl-0.9.8.dll"
339 <<
"cygssl-0.9.7.dll"
342 libnamesc <<
"cygcrypto-0.9.8.dll"
343 <<
"cygcrypto-0.9.7.dll"
348 <<
"/opt/freeware/lib/"
350 <<
"/usr/lib" KDELIBSUFF
"/"
351 <<
"/usr/ssl/lib" KDELIBSUFF
"/"
352 <<
"/usr/local/lib" KDELIBSUFF
"/"
353 <<
"/usr/local/openssl/lib" KDELIBSUFF
"/"
354 <<
"/usr/local/ssl/lib" KDELIBSUFF
"/"
355 <<
"/opt/openssl/lib" KDELIBSUFF
"/"
356 <<
"/lib" KDELIBSUFF
"/"
364 <<
"libssl.a(libssl.so.0)"
365 #elif defined(__APPLE__)
367 <<
"libssl.0.9.dylib"
369 #ifdef SHLIB_VERSION_NUMBER
370 <<
"libssl.so." SHLIB_VERSION_NUMBER
381 <<
"libcrypto.a(libcrypto.so.0)"
382 #elif defined(__APPLE__)
384 <<
"libcrypto.0.9.dylib"
386 #ifdef SHLIB_VERSION_NUMBER
387 <<
"libcrypto.so." SHLIB_VERSION_NUMBER
395 for (QStringList::const_iterator it = libpaths.constBegin();
396 it != libpaths.constEnd();
398 for (QStringList::const_iterator shit = libnamesc.constBegin();
399 shit != libnamesc.constEnd();
402 if (!alib.isEmpty() && !alib.endsWith(
'/'))
406 QString tmpStr(alib.toLatin1().constData());
407 tmpStr.remove(QRegExp(
"\\(.*\\)"));
408 if (!
access(tmpStr.toLatin1(), R_OK)) {
410 d->cryptoLib->setLoadHints(QLibrary::ExportExternalSymbolsHint);
412 if (d->cryptoLib && d->cryptoLib->load()) {
420 if (d->cryptoLib)
break;
425 K_X509_free = (void (*) (X509 *)) d->cryptoLib->resolveFunction(
"X509_free");
426 K_RAND_egd = (int (*)(
const char *)) d->cryptoLib->resolveFunction(
"RAND_egd");
427 K_RAND_load_file = (int (*)(
const char *, long)) d->cryptoLib->resolveFunction(
"RAND_load_file");
428 K_RAND_file_name = (
const char* (*)(
char *,
size_t)) d->cryptoLib->resolveFunction(
"RAND_file_name");
429 K_RAND_write_file = (int (*)(
const char *)) d->cryptoLib->resolveFunction(
"RAND_write_file");
430#if OPENSSL_VERSION_NUMBER < 0x10100000L
431 K_CRYPTO_free = (void (*) (
void *)) d->cryptoLib->resolveFunction(
"CRYPTO_free");
433 K_CRYPTO_free = (void (*)(
void *,
const char *, int)) d->cryptoLib->resolveFunction(
"CRYPTO_free");
435 K_d2i_X509 = (X509 * (*)(X509 **,
unsigned char **,
long)) d->cryptoLib->resolveFunction(
"d2i_X509");
436 K_i2d_X509 = (int (*)(X509 *,
unsigned char **)) d->cryptoLib->resolveFunction(
"i2d_X509");
437 K_X509_cmp = (int (*)(X509 *, X509 *)) d->cryptoLib->resolveFunction(
"X509_cmp");
438 K_X509_STORE_CTX_new = (X509_STORE_CTX * (*) (
void)) d->cryptoLib->resolveFunction(
"X509_STORE_CTX_new");
439 K_X509_STORE_CTX_free = (void (*) (X509_STORE_CTX *)) d->cryptoLib->resolveFunction(
"X509_STORE_CTX_free");
440 K_X509_verify_cert = (int (*) (X509_STORE_CTX *)) d->cryptoLib->resolveFunction(
"X509_verify_cert");
441 K_X509_STORE_new = (X509_STORE * (*) (
void)) d->cryptoLib->resolveFunction(
"X509_STORE_new");
442 K_X509_STORE_free = (void (*) (X509_STORE *)) d->cryptoLib->resolveFunction(
"X509_STORE_free");
443 K_X509_STORE_set_verify_cb = (void (*)(X509_STORE *, int (*)(int, X509_STORE_CTX *))) d->cryptoLib->resolveFunction(
"X509_STORE_set_verify_cb");
444 K_X509_NAME_oneline = (
char * (*) (X509_NAME *,
char *,
int)) d->cryptoLib->resolveFunction(
"X509_NAME_oneline");
445 K_X509_get_subject_name = (X509_NAME * (*) (X509 *)) d->cryptoLib->resolveFunction(
"X509_get_subject_name");
446 K_X509_get_issuer_name = (X509_NAME * (*) (X509 *)) d->cryptoLib->resolveFunction(
"X509_get_issuer_name");
447 K_X509_get0_signature = (void (*)(
const ASN1_BIT_STRING **,
const X509_ALGOR **,
const X509 *)) d->cryptoLib->resolveFunction(
"X509_get0_signature");
448 K_X509_STORE_add_lookup = (X509_LOOKUP *(*) (X509_STORE *, X509_LOOKUP_METHOD *)) d->cryptoLib->resolveFunction(
"X509_STORE_add_lookup");
449 K_X509_LOOKUP_file = (X509_LOOKUP_METHOD *(*)(
void)) d->cryptoLib->resolveFunction(
"X509_LOOKUP_file");
450 K_X509_LOOKUP_free = (void (*)(X509_LOOKUP *)) d->cryptoLib->resolveFunction(
"X509_LOOKUP_free");
451 K_X509_LOOKUP_ctrl = (int (*)(X509_LOOKUP *, int,
const char *, long,
char **)) d->cryptoLib->resolveFunction(
"X509_LOOKUP_ctrl");
452 K_X509_STORE_CTX_init = (void (*)(X509_STORE_CTX *, X509_STORE *, X509 *,
STACK_OF(X509) *)) d->cryptoLib->resolveFunction(
"X509_STORE_CTX_init");
453 K_X509_dup = (X509* (*)(X509*)) d->cryptoLib->resolveFunction(
"X509_dup");
454 K_X509_getm_notBefore = (ASN1_TIME *(*)(
const X509 *)) d->cryptoLib->resolveFunction(
"X509_getm_notBefore");
455 K_X509_getm_notAfter = (ASN1_TIME *(*)(
const X509 *)) d->cryptoLib->resolveFunction(
"X509_getm_notAfter");
456 K_BIO_s_mem = (BIO_METHOD *(*) (
void)) d->cryptoLib->resolveFunction(
"BIO_s_mem");
457 K_BIO_new = (BIO* (*)(BIO_METHOD *)) d->cryptoLib->resolveFunction(
"BIO_new");
458 K_BIO_new_fp = (BIO* (*)(FILE*,
int)) d->cryptoLib->resolveFunction(
"BIO_new_fp");
459 K_BIO_new_mem_buf = (BIO* (*)(
void *,
int)) d->cryptoLib->resolveFunction(
"BIO_new_mem_buf");
460 K_BIO_free = (int (*)(BIO*)) d->cryptoLib->resolveFunction(
"BIO_free");
461 K_BIO_ctrl = (long (*) (BIO *,int,long,
void *)) d->cryptoLib->resolveFunction(
"BIO_ctrl");
462 K_BIO_write = (int (*) (BIO *b,
const void *data,
int len)) d->cryptoLib->resolveFunction(
"BIO_write");
463 K_PEM_ASN1_write_bio = (int (*)(int (*)(),
const char *,BIO*,
char*,
const EVP_CIPHER *,
unsigned char *,
int, pem_password_cb *,
void *)) d->cryptoLib->resolveFunction(
"PEM_ASN1_write_bio");
464 K_ASN1_item_i2d_fp = (int (*)(ASN1_ITEM *, FILE*,
unsigned char *))
465 d->cryptoLib->resolveFunction(
"ASN1_item_i2d_fp");
466 K_NETSCAPE_X509_it = (ASN1_ITEM *) d->cryptoLib->resolveFunction(
"NETSCAPE_X509_it");
467 K_X509_print_fp = (int (*)(FILE*, X509*)) d->cryptoLib->resolveFunction(
"X509_print_fp");
468 K_i2d_PKCS12 = (int (*)(PKCS12*,
unsigned char**)) d->cryptoLib->resolveFunction(
"i2d_PKCS12");
469 K_i2d_PKCS12_fp = (int (*)(FILE *, PKCS12*)) d->cryptoLib->resolveFunction(
"i2d_PKCS12_fp");
470 K_PKCS12_newpass = (int (*)(PKCS12*,
char*,
char*)) d->cryptoLib->resolveFunction(
"PKCS12_newpass");
471 K_d2i_PKCS12_fp = (PKCS12* (*)(FILE*, PKCS12**)) d->cryptoLib->resolveFunction(
"d2i_PKCS12_fp");
472 K_PKCS12_new = (PKCS12* (*)()) d->cryptoLib->resolveFunction(
"PKCS12_new");
473 K_PKCS12_free = (void (*)(PKCS12 *)) d->cryptoLib->resolveFunction(
"PKCS12_free");
474 K_PKCS12_parse = (int (*)(PKCS12*,
const char *, EVP_PKEY**,
475 X509**,
STACK_OF(X509)**)) d->cryptoLib->resolveFunction(
"PKCS12_parse");
476 K_EVP_PKEY_free = (void (*) (EVP_PKEY *)) d->cryptoLib->resolveFunction(
"EVP_PKEY_free");
477 K_EVP_PKEY_new = (EVP_PKEY* (*)()) d->cryptoLib->resolveFunction(
"EVP_PKEY_new");
478 K_X509_REQ_free = (void (*)(X509_REQ*)) d->cryptoLib->resolveFunction(
"X509_REQ_free");
479 K_X509_REQ_new = (X509_REQ* (*)()) d->cryptoLib->resolveFunction(
"X509_REQ_new");
480 K_X509_STORE_CTX_set_chain = (void (*)(X509_STORE_CTX *,
STACK_OF(X509)*)) d->cryptoLib->resolveFunction(
"X509_STORE_CTX_set_chain");
481 K_X509_STORE_CTX_set_purpose = (void (*)(X509_STORE_CTX *, int)) d->cryptoLib->resolveFunction(
"X509_STORE_CTX_set_purpose");
482 K_X509_STORE_CTX_get_current_cert = (X509 * (*)(X509_STORE_CTX *)) d->cryptoLib->resolveFunction(
"X509_STORE_CTX_get_current_cert");
483 K_X509_STORE_CTX_set_error = (void (*)(X509_STORE_CTX *, int)) d->cryptoLib->resolveFunction(
"X509_STORE_CTX_set_error");
484 K_X509_STORE_CTX_get_error = (int (*)(X509_STORE_CTX *)) d->cryptoLib->resolveFunction(
"X509_STORE_CTX_get_error");
485#if OPENSSL_VERSION_NUMBER >= 0x10100000L
486 K_OPENSSL_sk_free = (void (*)(STACK *)) d->cryptoLib->resolveFunction(
"OPENSSL_sk_free");
487 K_OPENSSL_sk_num = (int (*)(STACK *)) d->cryptoLib->resolveFunction(
"OPENSSL_sk_num");
488 K_OPENSSL_sk_pop = (
char *(*)(STACK *)) d->cryptoLib->resolveFunction(
"OPENSSL_sk_pop");
489 K_OPENSSL_sk_value = (
char *(*)(STACK *,
int)) d->cryptoLib->resolveFunction(
"OPENSSL_sk_value");
490 K_OPENSSL_sk_new = (STACK * (*)(
int (*)())) d->cryptoLib->resolveFunction(
"OPENSSL_sk_new");
491 K_OPENSSL_sk_push = (int (*)(STACK *,
char *)) d->cryptoLib->resolveFunction(
"OPENSSL_sk_push");
492 K_OPENSSL_sk_dup = (STACK * (*)(STACK *)) d->cryptoLib->resolveFunction(
"OPENSSL_sk_dup");
494 K_OPENSSL_sk_free = (void (*)(STACK *)) d->cryptoLib->resolveFunction(
"sk_free");
495 K_OPENSSL_sk_num = (int (*)(STACK *)) d->cryptoLib->resolveFunction(
"sk_num");
496 K_OPENSSL_sk_pop = (
char *(*)(STACK *)) d->cryptoLib->resolveFunction(
"sk_pop");
497 K_OPENSSL_sk_value = (
char *(*)(STACK *,
int)) d->cryptoLib->resolveFunction(
"sk_value");
498 K_OPENSSL_sk_new = (STACK * (*)(
int (*)())) d->cryptoLib->resolveFunction(
"sk_new");
499 K_OPENSSL_sk_push = (int (*)(STACK *,
char *)) d->cryptoLib->resolveFunction(
"sk_push");
500 K_OPENSSL_sk_dup = (STACK * (*)(STACK *)) d->cryptoLib->resolveFunction(
"sk_dup");
502 K_i2s_ASN1_INTEGER = (
char *(*) (X509V3_EXT_METHOD *, ASN1_INTEGER *)) d->cryptoLib->resolveFunction(
"i2s_ASN1_INTEGER");
503 K_X509_get_serialNumber = (ASN1_INTEGER * (*) (X509 *)) d->cryptoLib->resolveFunction(
"X509_get_serialNumber");
504 K_X509_get_pubkey = (EVP_PKEY *(*)(X509 *)) d->cryptoLib->resolveFunction(
"X509_get_pubkey");
505 K_i2d_PublicKey = (int (*)(EVP_PKEY *,
unsigned char **)) d->cryptoLib->resolveFunction(
"i2d_PublicKey");
506 K_X509_check_private_key = (int (*)(X509 *, EVP_PKEY *)) d->cryptoLib->resolveFunction(
"X509_check_private_key");
507 K_BN_bn2hex = (
char *(*)(
const BIGNUM *)) d->cryptoLib->resolveFunction(
"BN_bn2hex");
508 K_X509_digest = (int (*)(
const X509 *,
const EVP_MD *,
unsigned char *,
unsigned int *)) d->cryptoLib->resolveFunction(
"X509_digest");
509 K_EVP_md5 = (EVP_MD *(*)()) d->cryptoLib->resolveFunction(
"EVP_md5");
510 K_ASN1_INTEGER_free = (void (*)(ASN1_INTEGER *)) d->cryptoLib->resolveFunction(
"ASN1_INTEGER_free");
511 K_OBJ_obj2nid = (int (*)(ASN1_OBJECT *)) d->cryptoLib->resolveFunction(
"OBJ_obj2nid");
512 K_OBJ_nid2ln = (
const char *(*)(
int)) d->cryptoLib->resolveFunction(
"OBJ_nid2ln");
513 K_X509_get_ext_count = (int (*)(X509*)) d->cryptoLib->resolveFunction(
"X509_get_ext_count");
514 K_X509_get_ext_by_NID = (int (*)(X509*,int,int)) d->cryptoLib->resolveFunction(
"X509_get_ext_by_NID");
515 K_X509_get_ext_by_OBJ = (int (*)(X509*,ASN1_OBJECT*,int)) d->cryptoLib->resolveFunction(
"X509_get_ext_by_OBJ");
516 K_X509_get_ext = (X509_EXTENSION* (*)(X509*,
int)) d->cryptoLib->resolveFunction(
"X509_get_ext");
517 K_X509_delete_ext = (X509_EXTENSION* (*)(X509*,
int)) d->cryptoLib->resolveFunction(
"X509_delete_ext");
518 K_X509_add_ext = (int (*)(X509*,X509_EXTENSION*,int)) d->cryptoLib->resolveFunction(
"X509_add_ext");
519 K_X509_get_ext_d2i = (
void* (*)(X509*,
int,
int*,
int*)) d->cryptoLib->resolveFunction(
"X509_get_ext_d2i");
520 K_i2s_ASN1_OCTET_STRING = (
char *(*)(X509V3_EXT_METHOD*,ASN1_OCTET_STRING*)) d->cryptoLib->resolveFunction(
"i2s_ASN1_OCTET_STRING");
521 K_ASN1_BIT_STRING_get_bit = (int (*)(ASN1_BIT_STRING*,int)) d->cryptoLib->resolveFunction(
"ASN1_BIT_STRING_get_bit");
522 K_PKCS7_new = (PKCS7 *(*)()) d->cryptoLib->resolveFunction(
"PKCS7_new");
523 K_PKCS7_free = (void (*)(PKCS7*)) d->cryptoLib->resolveFunction(
"PKCS7_free");
524 K_PKCS7_content_free = (void (*)(PKCS7*)) d->cryptoLib->resolveFunction(
"PKCS7_content_free");
525 K_i2d_PKCS7 = (int (*)(PKCS7*,
unsigned char**)) d->cryptoLib->resolveFunction(
"i2d_PKCS7");
526 K_i2d_PKCS7_fp = (int (*)(FILE*,PKCS7*)) d->cryptoLib->resolveFunction(
"i2d_PKCS7_fp");
527 K_i2d_PKCS7_bio = (int (*)(BIO *bp,PKCS7 *p7)) d->cryptoLib->resolveFunction(
"i2d_PKCS7_bio");
528 K_d2i_PKCS7 = (PKCS7* (*)(PKCS7**,
unsigned char**,
long)) d->cryptoLib->resolveFunction(
"d2i_PKCS7");
529 K_d2i_PKCS7_fp = (PKCS7 *(*)(FILE *,PKCS7**)) d->cryptoLib->resolveFunction(
"d2i_PKCS7_fp");
530 K_d2i_PKCS7_bio = (PKCS7 *(*)(BIO *bp,PKCS7 **p7)) d->cryptoLib->resolveFunction(
"d2i_PKCS7_bio");
531 K_PKCS7_dup = (PKCS7* (*)(PKCS7*)) d->cryptoLib->resolveFunction(
"PKCS7_dup");
532 K_PKCS7_sign = (PKCS7 *(*)(X509*, EVP_PKEY*,
STACK_OF(X509)*, BIO*, int)) d->cryptoLib->resolveFunction(
"PKCS7_sign");
533 K_PKCS7_verify = (int (*)(PKCS7*,
STACK_OF(X509)*,X509_STORE*,BIO*,BIO*,int)) d->cryptoLib->resolveFunction(
"PKCS7_verify");
534 K_PKCS7_get0_signers = (
STACK_OF(X509) *(*)(PKCS7 *,
STACK_OF(X509) *, int)) d->cryptoLib->resolveFunction(
"PKCS7_get0_signers");
535 K_PKCS7_encrypt = (PKCS7* (*)(
STACK_OF(X509) *, BIO *, EVP_CIPHER *, int)) d->cryptoLib->resolveFunction(
"PKCS7_encrypt");
536 K_PKCS7_decrypt = (int (*)(PKCS7 *, EVP_PKEY *, X509 *, BIO *, int)) d->cryptoLib->resolveFunction(
"PKCS7_decrypt");
537 K_PEM_X509_INFO_read = (
STACK_OF(X509_INFO) *(*)(FILE*,
STACK_OF(X509_INFO)*, pem_password_cb*,
void *)) d->cryptoLib->resolveFunction(
"PEM_X509_INFO_read");
538 K_ASN1_d2i_fp = (
char *(*)(
char *(*)(),
char *(*)(),FILE*,
unsigned char**)) d->cryptoLib->resolveFunction(
"ASN1_d2i_fp");
539 K_X509_new = (X509 *(*)()) d->cryptoLib->resolveFunction(
"X509_new");
540 K_X509_PURPOSE_get_count = (int (*)()) d->cryptoLib->resolveFunction(
"X509_PURPOSE_get_count");
541 K_X509_PURPOSE_get_id = (int (*)(X509_PURPOSE *)) d->cryptoLib->resolveFunction(
"X509_PURPOSE_get_id");
542 K_X509_check_purpose = (int (*)(X509*,int,int)) d->cryptoLib->resolveFunction(
"X509_check_purpose");
543 K_X509_PURPOSE_get0 = (X509_PURPOSE *(*)(
int)) d->cryptoLib->resolveFunction(
"X509_PURPOSE_get0");
544 K_EVP_PKEY_assign = (int (*)(EVP_PKEY*, int,
char*)) d->cryptoLib->resolveFunction(
"EVP_PKEY_assign");
545 K_EVP_PKEY_base_id = (int (*)(EVP_PKEY *)) d->cryptoLib->resolveFunction(
"EVP_PKEY_base_id");
546 K_EVP_PKEY_get0_RSA = (RSA *(*)(EVP_PKEY *)) d->cryptoLib->resolveFunction(
"EVP_PKEY_get0_RSA");
547 K_RSA_get0_key = (void (*)(RSA *,
const BIGNUM **,
const BIGNUM **,
const BIGNUM **)) d->cryptoLib->resolveFunction(
"ESA_get0_key");
548 K_EVP_PKEY_get0_DSA = (DSA *(*)(EVP_PKEY *)) d->cryptoLib->resolveFunction(
"EVP_PKEY_get0_DSA");
549 K_DSA_get0_pqg = (void (*)(DSA *,
const BIGNUM **,
const BIGNUM **,
const BIGNUM **)) d->cryptoLib->resolveFunction(
"DSA_get0_pqg");
550 K_DSA_get0_key = (void (*)(DSA *,
const BIGNUM **,
const BIGNUM **)) d->cryptoLib->resolveFunction(
"DSA_get0_key");
551 K_X509_REQ_set_pubkey = (int (*)(X509_REQ*, EVP_PKEY*)) d->cryptoLib->resolveFunction(
"X509_REQ_set_pubkey");
552 K_RSA_generate_key = (RSA* (*)(
int,
unsigned long,
void (*)(int,int,
void *),
void *)) d->cryptoLib->resolveFunction(
"RSA_generate_key");
553 K_i2d_X509_REQ_fp = (int (*)(FILE *, X509_REQ *)) d->cryptoLib->resolveFunction(
"i2d_X509_REQ_fp");
554 K_ERR_clear_error = (void (*)()) d->cryptoLib->resolveFunction(
"ERR_clear_error");
555 K_ERR_get_error = (
unsigned long (*)()) d->cryptoLib->resolveFunction(
"ERR_get_error");
556 K_ERR_print_errors_fp = (void (*)(FILE*)) d->cryptoLib->resolveFunction(
"ERR_print_errors_fp");
557 K_X509_get1_email = (STACK *(*)(X509 *x)) d->cryptoLib->resolveFunction(
"X509_get1_email");
558 K_X509_email_free = (void (*)(STACK *sk)) d->cryptoLib->resolveFunction(
"X509_email_free");
559 K_EVP_des_ede3_cbc = (EVP_CIPHER *(*)()) d->cryptoLib->resolveFunction(
"EVP_des_ede3_cbc");
560 K_EVP_des_cbc = (EVP_CIPHER *(*)()) d->cryptoLib->resolveFunction(
"EVP_des_cbc");
561 K_EVP_rc2_cbc = (EVP_CIPHER *(*)()) d->cryptoLib->resolveFunction(
"EVP_rc2_cbc");
562 K_EVP_rc2_64_cbc = (EVP_CIPHER *(*)()) d->cryptoLib->resolveFunction(
"EVP_rc2_64_cbc");
563 K_EVP_rc2_40_cbc = (EVP_CIPHER *(*)()) d->cryptoLib->resolveFunction(
"EVP_rc2_40_cbc");
564 K_i2d_PrivateKey_fp = (int (*)(FILE*,EVP_PKEY*)) d->cryptoLib->resolveFunction(
"i2d_PrivateKey_fp");
565 K_i2d_PKCS8PrivateKey_fp = (int (*)(FILE*, EVP_PKEY*,
const EVP_CIPHER*,
char*, int, pem_password_cb*,
void*)) d->cryptoLib->resolveFunction(
"i2d_PKCS8PrivateKey_fp");
566 K_RSA_free = (void (*)(RSA*)) d->cryptoLib->resolveFunction(
"RSA_free");
567 K_EVP_bf_cbc = (EVP_CIPHER *(*)()) d->cryptoLib->resolveFunction(
"EVP_bf_cbc");
568 K_X509_REQ_sign = (int (*)(X509_REQ*, EVP_PKEY*,
const EVP_MD*)) d->cryptoLib->resolveFunction(
"X509_REQ_sign");
569 K_X509_NAME_add_entry_by_txt = (int (*)(X509_NAME*,
char*, int,
unsigned char*, int, int, int)) d->cryptoLib->resolveFunction(
"X509_NAME_add_entry_by_txt");
570 K_X509_NAME_new = (X509_NAME *(*)()) d->cryptoLib->resolveFunction(
"X509_NAME_new");
571 K_X509_REQ_set_subject_name = (int (*)(X509_REQ*,X509_NAME*)) d->cryptoLib->resolveFunction(
"X509_REQ_set_subject_name");
572 K_ASN1_STRING_data = (
unsigned char *(*)(ASN1_STRING*)) d->cryptoLib->resolveFunction(
"ASN1_STRING_data");
573 K_ASN1_STRING_length = (int (*)(ASN1_STRING*)) d->cryptoLib->resolveFunction(
"ASN1_STRING_length");
578 d->sslLib =
new KLibrary(
"ssleay32.dll");
579 if (!d->sslLib->load()) {
583#elif defined(__OpenBSD__)
585 QString libname = findMostRecentLib(
"/usr/lib",
"ssl");
586 if (!libname.isNull()) {
588 d->sslLib->setLoadHints(QLibrary::ExportExternalSymbolsHint);
589 if (!d->sslLib->load()) {
596 for (QStringList::const_iterator it = libpaths.constBegin();
597 it != libpaths.constEnd();
599 for (QStringList::const_iterator shit = libnamess.constBegin();
600 shit != libnamess.constEnd();
603 if (!alib.isEmpty() && !alib.endsWith(
'/'))
606 QString tmpStr(alib.toLatin1());
607 tmpStr.remove(QRegExp(
"\\(.*\\)"));
608 if (!
access(tmpStr.toLatin1(), R_OK)) {
610 d->sslLib->setLoadHints(QLibrary::ExportExternalSymbolsHint);
612 if (d->sslLib && d->sslLib->load()) {
620 if (d->sslLib)
break;
627 K_SSL_connect = (int (*)(SSL *)) d->sslLib->resolveFunction(
"SSL_connect");
628 K_SSL_accept = (int (*)(SSL *)) d->sslLib->resolveFunction(
"SSL_accept");
629 K_SSL_read = (int (*)(SSL *,
void *, int)) d->sslLib->resolveFunction(
"SSL_read");
630 K_SSL_write = (int (*)(SSL *,
const void *, int))
631 d->sslLib->resolveFunction(
"SSL_write");
632 K_SSL_new = (SSL* (*)(SSL_CTX *)) d->sslLib->resolveFunction(
"SSL_new");
633 K_SSL_free = (void (*)(SSL *)) d->sslLib->resolveFunction(
"SSL_free");
634 K_SSL_shutdown = (int (*)(SSL *)) d->sslLib->resolveFunction(
"SSL_shutdown");
635 K_SSL_CTX_new = (SSL_CTX* (*)(SSL_METHOD*)) d->sslLib->resolveFunction(
"SSL_CTX_new");
636 K_SSL_CTX_free = (void (*)(SSL_CTX*)) d->sslLib->resolveFunction(
"SSL_CTX_free");
637 K_SSL_set_fd = (int (*)(SSL *, int)) d->sslLib->resolveFunction(
"SSL_set_fd");
638 K_SSL_pending = (int (*)(SSL *)) d->sslLib->resolveFunction(
"SSL_pending");
639 K_SSL_CTX_set_cipher_list = (int (*)(SSL_CTX *,
const char *))
640 d->sslLib->resolveFunction(
"SSL_CTX_set_cipher_list");
641 K_SSL_CTX_set_verify = (void (*)(SSL_CTX*, int, int (*)(int, X509_STORE_CTX*))) d->sslLib->resolveFunction(
"SSL_CTX_set_verify");
642 K_SSL_use_certificate = (int (*)(SSL*, X509*))
643 d->sslLib->resolveFunction(
"SSL_CTX_use_certificate");
644 K_SSL_get_current_cipher = (SSL_CIPHER *(*)(SSL *))
645 d->sslLib->resolveFunction(
"SSL_get_current_cipher");
646 K_SSL_ctrl = (long (*)(SSL * ,int, long,
char *))
647 d->sslLib->resolveFunction(
"SSL_ctrl");
648 K_TLSv1_client_method = (SSL_METHOD *(*)()) d->sslLib->resolveFunction(
"TLSv1_client_method");
649 K_SSLv23_client_method = (SSL_METHOD *(*)()) d->sslLib->resolveFunction(
"SSLv23_client_method");
650 K_SSL_get_peer_certificate = (X509 *(*)(SSL *)) d->sslLib->resolveFunction(
"SSL_get_peer_certificate");
651 K_SSL_CIPHER_get_bits = (int (*)(SSL_CIPHER *,
int *)) d->sslLib->resolveFunction(
"SSL_CIPHER_get_bits");
652 K_SSL_CIPHER_get_version = (
char * (*)(SSL_CIPHER *)) d->sslLib->resolveFunction(
"SSL_CIPHER_get_version");
653 K_SSL_CIPHER_get_name = (
const char * (*)(SSL_CIPHER *)) d->sslLib->resolveFunction(
"SSL_CIPHER_get_name");
654 K_SSL_CIPHER_description = (
char * (*)(SSL_CIPHER *,
char *,
int)) d->sslLib->resolveFunction(
"SSL_CIPHER_description");
655 K_SSL_CTX_use_PrivateKey = (int (*)(SSL_CTX*, EVP_PKEY*)) d->sslLib->resolveFunction(
"SSL_CTX_use_PrivateKey");
656 K_SSL_CTX_use_certificate = (int (*)(SSL_CTX*, X509*)) d->sslLib->resolveFunction(
"SSL_CTX_use_certificate");
657 K_SSL_get_error = (int (*)(SSL*, int)) d->sslLib->resolveFunction(
"SSL_get_error");
658 K_SSL_get_peer_cert_chain = (
STACK_OF(X509)* (*)(SSL*)) d->sslLib->resolveFunction(
"SSL_get_peer_cert_chain");
659 K_SSL_load_client_CA_file = (
STACK_OF(X509_NAME)* (*)(
const char *)) d->sslLib->resolveFunction(
"SSL_load_client_CA_file");
660 K_SSL_peek = (int (*)(SSL*,
void*,int)) d->sslLib->resolveFunction(
"SSL_peek");
661 K_SSL_get1_session = (SSL_SESSION* (*)(SSL*)) d->sslLib->resolveFunction(
"SSL_get1_session");
662 K_SSL_SESSION_free = (void (*)(SSL_SESSION*)) d->sslLib->resolveFunction(
"SSL_SESSION_free");
663 K_SSL_set_session = (int (*)(SSL*,SSL_SESSION*)) d->sslLib->resolveFunction(
"SSL_set_session");
664 K_d2i_SSL_SESSION = (SSL_SESSION* (*)(SSL_SESSION**,
unsigned char**,
long)) d->sslLib->resolveFunction(
"d2i_SSL_SESSION");
665 K_i2d_SSL_SESSION = (int (*)(SSL_SESSION*,
unsigned char**)) d->sslLib->resolveFunction(
"i2d_SSL_SESSION");
666 K_SSL_get_ciphers = (
STACK_OF(SSL_CIPHER) *(*)(
const SSL*)) d->sslLib->resolveFunction(
"SSL_get_ciphers");
672 x = d->sslLib->resolveFunction(
"SSL_library_init");
674 if (x) ((int (*)())x)();
675 x = d->cryptoLib->resolveFunction(
"OpenSSL_add_all_algorithms");
677 x = d->cryptoLib->resolveFunction(
"OPENSSL_add_all_algorithms");
681 x = d->cryptoLib->resolveFunction(
"OpenSSL_add_all_algorithms_conf");
683 x = d->cryptoLib->resolveFunction(
"OPENSSL_add_all_algorithms_conf");
687 x = d->cryptoLib->resolveFunction(
"OpenSSL_add_all_algorithms_noconf");
689 x = d->cryptoLib->resolveFunction(
"OPENSSL_add_all_algorithms_noconf");
694 x = d->cryptoLib->resolveFunction(
"OpenSSL_add_all_ciphers");
696 x = d->cryptoLib->resolveFunction(
"OPENSSL_add_all_ciphers");
697 if (x) ((void (*)())x)();
698 x = d->cryptoLib->resolveFunction(
"OpenSSL_add_all_digests");
700 x = d->cryptoLib->resolveFunction(
"OPENSSL_add_all_digests");
701 if (x) ((void (*)())x)();
707KOpenSSLProxy::~KOpenSSLProxy() {
712 d->cryptoLib->unload();
715 KOpenSSLProxyPrivate::sSelf = 0;
724 if(!KOpenSSLProxyPrivate::sSelf) {
726 qAddPostRoutine(KOpenSSLProxyPrivate::cleanupKOpenSSLProxy);
729 return KOpenSSLProxyPrivate::sSelf;
742int KOpenSSLProxy::SSL_connect(SSL *ssl) {
743 if (K_SSL_connect)
return (K_SSL_connect)(ssl);
748int KOpenSSLProxy::SSL_accept(SSL *ssl) {
749 if (K_SSL_accept)
return (K_SSL_accept)(ssl);
754int KOpenSSLProxy::SSL_read(SSL *ssl,
void *buf,
int num) {
755 if (K_SSL_read)
return (K_SSL_read)(ssl, buf, num);
760int KOpenSSLProxy::SSL_write(SSL *ssl,
const void *buf,
int num) {
761 if (K_SSL_write)
return (K_SSL_write)(ssl, buf, num);
766SSL *KOpenSSLProxy::SSL_new(SSL_CTX *ctx) {
767 if (K_SSL_new)
return (K_SSL_new)(ctx);
772void KOpenSSLProxy::SSL_free(SSL *ssl) {
773 if (K_SSL_free) (K_SSL_free)(ssl);
777int KOpenSSLProxy::SSL_shutdown(SSL *ssl) {
778 if (K_SSL_shutdown)
return (K_SSL_shutdown)(ssl);
783SSL_CTX *KOpenSSLProxy::SSL_CTX_new(SSL_METHOD *method) {
784 if (K_SSL_CTX_new)
return (K_SSL_CTX_new)(method);
789void KOpenSSLProxy::SSL_CTX_free(SSL_CTX *ctx) {
790 if (K_SSL_CTX_free) (K_SSL_CTX_free)(ctx);
794int KOpenSSLProxy::SSL_set_fd(SSL *ssl,
int fd) {
795 if (K_SSL_set_fd)
return (K_SSL_set_fd)(ssl, fd);
800int KOpenSSLProxy::SSL_pending(SSL *ssl) {
801 if (K_SSL_pending)
return (K_SSL_pending)(ssl);
806int KOpenSSLProxy::SSL_CTX_set_cipher_list(SSL_CTX *ctx,
const char *str) {
807 if (K_SSL_CTX_set_cipher_list)
return (K_SSL_CTX_set_cipher_list)(ctx, str);
812void KOpenSSLProxy::SSL_CTX_set_verify(SSL_CTX *ctx,
int mode,
813 int (*verify_callback)(
int, X509_STORE_CTX *)) {
814 if (K_SSL_CTX_set_verify) (K_SSL_CTX_set_verify)(ctx, mode, verify_callback);
818int KOpenSSLProxy::SSL_use_certificate(SSL *ssl, X509 *x) {
819 if (K_SSL_use_certificate)
return (K_SSL_use_certificate)(ssl, x);
824SSL_CIPHER *KOpenSSLProxy::SSL_get_current_cipher(SSL *ssl) {
825 if (K_SSL_get_current_cipher)
return (K_SSL_get_current_cipher)(ssl);
830long KOpenSSLProxy::SSL_ctrl(SSL *ssl,
int cmd,
long larg,
char *parg) {
831 if (K_SSL_ctrl)
return (K_SSL_ctrl)(ssl, cmd, larg, parg);
836int KOpenSSLProxy::RAND_egd(
const char *path) {
837 if (K_RAND_egd)
return (K_RAND_egd)(path);
842SSL_METHOD *KOpenSSLProxy::TLSv1_client_method() {
843 if (K_TLSv1_client_method)
return (K_TLSv1_client_method)();
848SSL_METHOD *KOpenSSLProxy::SSLv23_client_method() {
849 if (K_SSLv23_client_method)
return (K_SSLv23_client_method)();
854X509 *KOpenSSLProxy::SSL_get_peer_certificate(SSL *s) {
855 if (K_SSL_get_peer_certificate)
return (K_SSL_get_peer_certificate)(s);
860int KOpenSSLProxy::SSL_CIPHER_get_bits(SSL_CIPHER *c,
int *alg_bits) {
861 if (K_SSL_CIPHER_get_bits)
return (K_SSL_CIPHER_get_bits)(c, alg_bits);
866char * KOpenSSLProxy::SSL_CIPHER_get_version(SSL_CIPHER *c) {
867 if (K_SSL_CIPHER_get_version)
return (K_SSL_CIPHER_get_version)(c);
872const char * KOpenSSLProxy::SSL_CIPHER_get_name(SSL_CIPHER *c) {
873 if (K_SSL_CIPHER_get_name)
return (K_SSL_CIPHER_get_name)(c);
878char * KOpenSSLProxy::SSL_CIPHER_description(SSL_CIPHER *c,
char *buf,
int size) {
879 if (K_SSL_CIPHER_description)
return (K_SSL_CIPHER_description)(c,buf,size);
884X509 * KOpenSSLProxy::d2i_X509(X509 **a,
unsigned char **pp,
long length) {
885 if (K_d2i_X509)
return (K_d2i_X509)(a,pp,length);
890int KOpenSSLProxy::i2d_X509(X509 *a,
unsigned char **pp) {
891 if (K_i2d_X509)
return (K_i2d_X509)(a,pp);
896int KOpenSSLProxy::X509_cmp(X509 *a, X509 *b) {
897 if (K_X509_cmp)
return (K_X509_cmp)(a,b);
902X509_STORE *KOpenSSLProxy::X509_STORE_new(
void) {
903 if (K_X509_STORE_new)
return (K_X509_STORE_new)();
908void KOpenSSLProxy::X509_STORE_free(X509_STORE *v) {
909 if (K_X509_STORE_free) (K_X509_STORE_free)(v);
913void KOpenSSLProxy::X509_STORE_set_verify_cb(X509_STORE *store,
int (*verify_cb)(
int, X509_STORE_CTX *))
915#if OPENSSL_VERSION_NUMBER < 0x10100000L
916 X509_STORE_set_verify_cb_func(store, verify_cb);
918 if (K_X509_STORE_set_verify_cb) (K_X509_STORE_set_verify_cb)(store, verify_cb);
923X509_STORE_CTX *KOpenSSLProxy::X509_STORE_CTX_new(
void) {
924 if (K_X509_STORE_CTX_new)
return (K_X509_STORE_CTX_new)();
929void KOpenSSLProxy::X509_STORE_CTX_free(X509_STORE_CTX *ctx) {
930 if (K_X509_STORE_CTX_free) (K_X509_STORE_CTX_free)(ctx);
934int KOpenSSLProxy::X509_verify_cert(X509_STORE_CTX *ctx) {
935 if (K_X509_verify_cert)
return (K_X509_verify_cert)(ctx);
940void KOpenSSLProxy::X509_free(X509 *a) {
941 if (K_X509_free) (K_X509_free)(a);
945char *KOpenSSLProxy::X509_NAME_oneline(X509_NAME *a,
char *buf,
int size) {
946 if (K_X509_NAME_oneline)
return (K_X509_NAME_oneline)(a,buf,size);
951X509_NAME *KOpenSSLProxy::X509_get_subject_name(X509 *a) {
952 if (K_X509_get_subject_name)
return (K_X509_get_subject_name)(a);
957X509_NAME *KOpenSSLProxy::X509_get_issuer_name(X509 *a) {
958 if (K_X509_get_issuer_name)
return (K_X509_get_issuer_name)(a);
963void KOpenSSLProxy::X509_get0_signature(
const ASN1_BIT_STRING **psig,
const X509_ALGOR **algor,
const X509 *x)
965#if OPENSSL_VERSION_NUMBER < 0x10100000L
966 if (psig) *psig = x->signature;
967 if (algor) *algor = x->sig_alg;
969 if (K_X509_get0_signature)
return (K_X509_get0_signature)(psig, algor, x);
974X509_LOOKUP *KOpenSSLProxy::X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m) {
975 if (K_X509_STORE_add_lookup)
return (K_X509_STORE_add_lookup)(v,m);
980X509_LOOKUP_METHOD *KOpenSSLProxy::X509_LOOKUP_file(
void) {
981 if (K_X509_LOOKUP_file)
return (K_X509_LOOKUP_file)();
986void KOpenSSLProxy::X509_LOOKUP_free(X509_LOOKUP *x) {
987 if (K_X509_LOOKUP_free) (K_X509_LOOKUP_free)(x);
991int KOpenSSLProxy::X509_LOOKUP_ctrl(X509_LOOKUP *ctx,
int cmd,
const char *argc,
long argl,
char **ret) {
992 if (K_X509_LOOKUP_ctrl)
return (K_X509_LOOKUP_ctrl)(ctx,cmd,argc,argl,ret);
997void KOpenSSLProxy::X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509,
STACK_OF(X509) *chain) {
998 if (K_X509_STORE_CTX_init) (K_X509_STORE_CTX_init)(ctx,store,x509,chain);
1002#if OPENSSL_VERSION_NUMBER < 0x10100000L
1003void KOpenSSLProxy::CRYPTO_free(
void *x) {
1004 if (K_CRYPTO_free) (K_CRYPTO_free)(x);
1007void KOpenSSLProxy::CRYPTO_free(
void *x,
const char *file,
int line)
1009 if (K_CRYPTO_free) K_CRYPTO_free(x, file, line);
1014X509 *KOpenSSLProxy::X509_dup(X509 *x509) {
1015 if (K_X509_dup)
return (K_X509_dup)(x509);
1020ASN1_TIME *KOpenSSLProxy::X509_getm_notBefore(
const X509 *x)
1022#if OPENSSL_VERSION_NUMBER < 0x10100000L
1023 return X509_get_notBefore(x);
1025 if (K_X509_getm_notBefore)
return (K_X509_getm_notBefore)(x);
1031ASN1_TIME *KOpenSSLProxy::X509_getm_notAfter(
const X509 *x)
1033#if OPENSSL_VERSION_NUMBER < 0x10100000L
1034 return X509_get_notAfter(x);
1036 if (K_X509_getm_notAfter)
return (K_X509_getm_notAfter)(x);
1042BIO *KOpenSSLProxy::BIO_new(BIO_METHOD *type) {
1043 if (K_BIO_new)
return (K_BIO_new)(type);
1048BIO_METHOD *KOpenSSLProxy::BIO_s_mem(
void) {
1049 if (K_BIO_s_mem)
return (K_BIO_s_mem)();
1054BIO *KOpenSSLProxy::BIO_new_fp(FILE *stream,
int close_flag) {
1055 if (K_BIO_new_fp)
return (K_BIO_new_fp)(stream, close_flag);
1060BIO *KOpenSSLProxy::BIO_new_mem_buf(
void *buf,
int len) {
1061 if (K_BIO_new_mem_buf)
return (K_BIO_new_mem_buf)(buf,len);
1066int KOpenSSLProxy::BIO_free(BIO *a) {
1067 if (K_BIO_free)
return (K_BIO_free)(a);
1072long KOpenSSLProxy::BIO_ctrl(BIO *bp,
int cmd,
long larg,
void *parg) {
1073 if (K_BIO_ctrl)
return (K_BIO_ctrl)(bp,cmd,larg,parg);
1078int KOpenSSLProxy::BIO_write(BIO *b,
const void *data,
int len) {
1079 if (K_BIO_write)
return (K_BIO_write)(b, data, len);
1084int KOpenSSLProxy::PEM_write_bio_X509(BIO *bp, X509 *x) {
1085 if (K_PEM_ASN1_write_bio)
return (K_PEM_ASN1_write_bio) ((int (*)())K_i2d_X509, PEM_STRING_X509, bp, (
char *)x, 0L, 0L, 0, 0L, 0L);
1089int KOpenSSLProxy::ASN1_item_i2d_fp(FILE *out,
unsigned char *x) {
1090 if (K_ASN1_item_i2d_fp && K_NETSCAPE_X509_it)
1091 return (K_ASN1_item_i2d_fp)(K_NETSCAPE_X509_it, out, x);
1096int KOpenSSLProxy::X509_print(FILE *
fp, X509 *x) {
1097 if (K_X509_print_fp)
return (K_X509_print_fp)(
fp, x);
1102PKCS12 *KOpenSSLProxy::d2i_PKCS12_fp(FILE *
fp, PKCS12 **p12) {
1103 if (K_d2i_PKCS12_fp)
return (K_d2i_PKCS12_fp)(
fp, p12);
1108int KOpenSSLProxy::PKCS12_newpass(PKCS12 *p12,
char *oldpass,
char *newpass) {
1109 if (K_PKCS12_newpass)
return (K_PKCS12_newpass)(p12, oldpass, newpass);
1114int KOpenSSLProxy::i2d_PKCS12(PKCS12 *p12,
unsigned char **p) {
1115 if (K_i2d_PKCS12)
return (K_i2d_PKCS12)(p12, p);
1120int KOpenSSLProxy::i2d_PKCS12_fp(FILE *
fp, PKCS12 *p12) {
1121 if (K_i2d_PKCS12_fp)
return (K_i2d_PKCS12_fp)(
fp, p12);
1126PKCS12 *KOpenSSLProxy::PKCS12_new(
void) {
1127 if (K_PKCS12_new)
return (K_PKCS12_new)();
1132void KOpenSSLProxy::PKCS12_free(PKCS12 *a) {
1133 if (K_PKCS12_free) (K_PKCS12_free)(a);
1137int KOpenSSLProxy::PKCS12_parse(PKCS12 *p12,
const char *pass, EVP_PKEY **pkey,
1138 X509 **cert,
STACK_OF(X509) **ca) {
1139 if (K_PKCS12_parse)
return (K_PKCS12_parse) (p12, pass, pkey, cert, ca);
1144void KOpenSSLProxy::EVP_PKEY_free(EVP_PKEY *x) {
1145 if (K_EVP_PKEY_free) (K_EVP_PKEY_free)(x);
1149EVP_PKEY* KOpenSSLProxy::EVP_PKEY_new() {
1150 if (K_EVP_PKEY_new)
return (K_EVP_PKEY_new)();
1155void KOpenSSLProxy::X509_REQ_free(X509_REQ *x) {
1156 if (K_X509_REQ_free) (K_X509_REQ_free)(x);
1160X509_REQ* KOpenSSLProxy::X509_REQ_new() {
1161 if (K_X509_REQ_new)
return (K_X509_REQ_new)();
1166int KOpenSSLProxy::SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) {
1167 if (K_SSL_CTX_use_PrivateKey)
return (K_SSL_CTX_use_PrivateKey)(ctx,pkey);
1172int KOpenSSLProxy::SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) {
1173 if (K_SSL_CTX_use_certificate)
return (K_SSL_CTX_use_certificate)(ctx,x);
1178int KOpenSSLProxy::SSL_get_error(SSL *ssl,
int rc) {
1179 if (K_SSL_get_error)
return (K_SSL_get_error)(ssl,rc);
1184STACK_OF(X509) *KOpenSSLProxy::SSL_get_peer_cert_chain(SSL *s) {
1185 if (K_SSL_get_peer_cert_chain)
return (K_SSL_get_peer_cert_chain)(s);
1190void KOpenSSLProxy::OPENSSL_sk_free(STACK *s) {
1191 if (K_OPENSSL_sk_free) (K_OPENSSL_sk_free)(s);
1195int KOpenSSLProxy::OPENSSL_sk_num(STACK *s) {
1196 if (K_OPENSSL_sk_num)
return (K_OPENSSL_sk_num)(s);
1201char *KOpenSSLProxy::OPENSSL_sk_pop(STACK *s) {
1202 if (K_OPENSSL_sk_pop)
return (K_OPENSSL_sk_pop)(s);
1207char *KOpenSSLProxy::OPENSSL_sk_value(STACK *s,
int n) {
1208 if (K_OPENSSL_sk_value)
return (K_OPENSSL_sk_value)(s, n);
1213void KOpenSSLProxy::X509_STORE_CTX_set_chain(X509_STORE_CTX *v,
STACK_OF(X509)* x) {
1214 if (K_X509_STORE_CTX_set_chain) (K_X509_STORE_CTX_set_chain)(v,x);
1217void KOpenSSLProxy::X509_STORE_CTX_set_purpose(X509_STORE_CTX *v,
int purpose) {
1218 if (K_X509_STORE_CTX_set_purpose) (K_X509_STORE_CTX_set_purpose)(v,purpose);
1222X509 *KOpenSSLProxy::X509_STORE_CTX_get_current_cert(X509_STORE_CTX *v)
1224#if OPENSSL_VERSION_NUMBER < 0x10100000L
1225 return v->current_cert;
1227 if (K_X509_STORE_CTX_get_current_cert)
return (K_X509_STORE_CTX_get_current_cert)(v);
1233void KOpenSSLProxy::X509_STORE_CTX_set_error(X509_STORE_CTX *v,
int error)
1235#if OPENSSL_VERSION_NUMBER < 0x10100000L
1238 if (K_X509_STORE_CTX_set_error) (K_X509_STORE_CTX_set_error)(v, error);
1243int KOpenSSLProxy::X509_STORE_CTX_get_error(X509_STORE_CTX *v)
1245#if OPENSSL_VERSION_NUMBER < 0x10100000L
1248 if (K_X509_STORE_CTX_get_error)
return (K_X509_STORE_CTX_get_error)(v);
1254STACK* KOpenSSLProxy::OPENSSL_sk_dup(STACK *s) {
1255 if (K_OPENSSL_sk_dup)
return (K_OPENSSL_sk_dup)(s);
1260STACK* KOpenSSLProxy::OPENSSL_sk_new(
int (*cmp)()) {
1261 if (K_OPENSSL_sk_new)
return (K_OPENSSL_sk_new)(cmp);
1266int KOpenSSLProxy::OPENSSL_sk_push(STACK* s,
char* d) {
1267 if (K_OPENSSL_sk_push)
return (K_OPENSSL_sk_push)(s,d);
1272char *KOpenSSLProxy::i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint) {
1273 if (K_i2s_ASN1_INTEGER)
return (K_i2s_ASN1_INTEGER)(meth, aint);
1278ASN1_INTEGER *KOpenSSLProxy::X509_get_serialNumber(X509 *x) {
1279 if (K_X509_get_serialNumber)
return (K_X509_get_serialNumber)(x);
1284EVP_PKEY *KOpenSSLProxy::X509_get_pubkey(X509 *x) {
1285 if (K_X509_get_pubkey)
return (K_X509_get_pubkey)(x);
1290int KOpenSSLProxy::i2d_PublicKey(EVP_PKEY *a,
unsigned char **pp) {
1291 if (K_i2d_PublicKey)
return (K_i2d_PublicKey)(a,pp);
1296int KOpenSSLProxy::X509_check_private_key(X509 *x, EVP_PKEY *p) {
1297 if (K_X509_check_private_key)
return (K_X509_check_private_key)(x,p);
1302char *KOpenSSLProxy::BN_bn2hex(
const BIGNUM *a) {
1303 if (K_BN_bn2hex)
return (K_BN_bn2hex)(a);
1308int KOpenSSLProxy::X509_digest(
const X509 *x,
const EVP_MD *t,
unsigned char *md,
unsigned int *len) {
1309 if (K_X509_digest)
return (K_X509_digest)(x, t, md, len);
1314EVP_MD *KOpenSSLProxy::EVP_md5() {
1315 if (K_EVP_md5)
return (K_EVP_md5)();
1320void KOpenSSLProxy::ASN1_INTEGER_free(ASN1_INTEGER *a) {
1321 if (K_ASN1_INTEGER_free) (K_ASN1_INTEGER_free)(a);
1325int KOpenSSLProxy::OBJ_obj2nid(ASN1_OBJECT *o) {
1326 if (K_OBJ_obj2nid)
return (K_OBJ_obj2nid)(o);
1331const char * KOpenSSLProxy::OBJ_nid2ln(
int n) {
1332 if (K_OBJ_nid2ln)
return (K_OBJ_nid2ln)(n);
1337int KOpenSSLProxy::X509_get_ext_count(X509 *x) {
1338 if (K_X509_get_ext_count)
return (K_X509_get_ext_count)(x);
1343int KOpenSSLProxy::X509_get_ext_by_NID(X509 *x,
int nid,
int lastpos) {
1344 if (K_X509_get_ext_by_NID)
return (K_X509_get_ext_by_NID)(x,nid,lastpos);
1349int KOpenSSLProxy::X509_get_ext_by_OBJ(X509 *x,ASN1_OBJECT *obj,
int lastpos) {
1350 if (K_X509_get_ext_by_OBJ)
return (K_X509_get_ext_by_OBJ)(x,obj,lastpos);
1355X509_EXTENSION *KOpenSSLProxy::X509_get_ext(X509 *x,
int loc) {
1356 if (K_X509_get_ext)
return (K_X509_get_ext)(x,loc);
1361X509_EXTENSION *KOpenSSLProxy::X509_delete_ext(X509 *x,
int loc) {
1362 if (K_X509_delete_ext)
return (K_X509_delete_ext)(x,loc);
1367int KOpenSSLProxy::X509_add_ext(X509 *x, X509_EXTENSION *ex,
int loc) {
1368 if (K_X509_add_ext)
return (K_X509_add_ext)(x,ex,loc);
1373void *KOpenSSLProxy::X509_get_ext_d2i(X509 *x,
int nid,
int *crit,
int *idx) {
1374 if (K_X509_get_ext_d2i)
return (K_X509_get_ext_d2i)(x,nid,crit,idx);
1379char *KOpenSSLProxy::i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *ia5) {
1380 if (K_i2s_ASN1_OCTET_STRING)
return (K_i2s_ASN1_OCTET_STRING)(method,ia5);
1385int KOpenSSLProxy::ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a,
int n) {
1386 if (K_ASN1_BIT_STRING_get_bit)
return (K_ASN1_BIT_STRING_get_bit)(a,n);
1391PKCS7 *KOpenSSLProxy::PKCS7_new(
void) {
1392 if (K_PKCS7_new)
return (K_PKCS7_new)();
1397void KOpenSSLProxy::PKCS7_free(PKCS7 *a) {
1398 if (K_PKCS7_free) (K_PKCS7_free)(a);
1402void KOpenSSLProxy::PKCS7_content_free(PKCS7 *a) {
1403 if (K_PKCS7_content_free) (K_PKCS7_content_free)(a);
1407int KOpenSSLProxy::i2d_PKCS7(PKCS7 *a,
unsigned char **pp) {
1408 if (K_i2d_PKCS7)
return (K_i2d_PKCS7)(a,pp);
1413PKCS7 *KOpenSSLProxy::d2i_PKCS7(PKCS7 **a,
unsigned char **pp,
long length) {
1414 if (K_d2i_PKCS7)
return (K_d2i_PKCS7)(a,pp,length);
1419int KOpenSSLProxy::i2d_PKCS7_fp(FILE *
fp,PKCS7 *p7) {
1420 if (K_i2d_PKCS7_fp)
return (K_i2d_PKCS7_fp)(
fp,p7);
1425PKCS7 *KOpenSSLProxy::d2i_PKCS7_fp(FILE *
fp,PKCS7 **p7) {
1426 if (K_d2i_PKCS7_fp)
return (K_d2i_PKCS7_fp)(
fp,p7);
1431int KOpenSSLProxy::i2d_PKCS7_bio(BIO *bp,PKCS7 *p7) {
1432 if (K_i2d_PKCS7_bio)
return (K_i2d_PKCS7_bio)(bp, p7);
1437PKCS7 *KOpenSSLProxy::d2i_PKCS7_bio(BIO *bp,PKCS7 **p7) {
1438 if (K_d2i_PKCS7_bio)
return (K_d2i_PKCS7_bio)(bp, p7);
1443PKCS7 *KOpenSSLProxy::PKCS7_dup(PKCS7 *p7) {
1444 if (K_PKCS7_dup)
return (K_PKCS7_dup)(p7);
1449PKCS7 *KOpenSSLProxy::PKCS7_sign(X509 *signcert, EVP_PKEY *pkey,
STACK_OF(X509) *certs,
1450 BIO *data,
int flags) {
1451 if (K_PKCS7_sign)
return (K_PKCS7_sign)(signcert,pkey,certs,data,flags);
1456int KOpenSSLProxy::PKCS7_verify(PKCS7* p,
STACK_OF(X509)* st, X509_STORE* s, BIO* in, BIO *out,
int flags) {
1457 if (K_PKCS7_verify)
return (K_PKCS7_verify)(p,st,s,in,out,flags);
1462STACK_OF(X509) *KOpenSSLProxy::PKCS7_get0_signers(PKCS7 *p7,
STACK_OF(X509) *certs,
int flags) {
1463 if (K_PKCS7_get0_signers)
return (K_PKCS7_get0_signers)(p7,certs,flags);
1468PKCS7 *KOpenSSLProxy::PKCS7_encrypt(
STACK_OF(X509) *certs, BIO *in, EVP_CIPHER *cipher,
1470 if (K_PKCS7_encrypt)
return (K_PKCS7_encrypt)(certs,in,cipher,flags);
1475int KOpenSSLProxy::PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data,
int flags) {
1476 if (K_PKCS7_decrypt)
return (K_PKCS7_decrypt)(p7,pkey,cert,data,flags);
1481STACK_OF(X509_NAME) *KOpenSSLProxy::SSL_load_client_CA_file(
const char *file) {
1482 if (K_SSL_load_client_CA_file)
return (K_SSL_load_client_CA_file)(file);
1487STACK_OF(X509_INFO) *KOpenSSLProxy::PEM_X509_INFO_read(FILE *
fp,
STACK_OF(X509_INFO) *sk, pem_password_cb *cb,
void *u) {
1488 if (K_PEM_X509_INFO_read)
return (K_PEM_X509_INFO_read)(
fp,sk,cb,u);
1493X509 *KOpenSSLProxy::X509_d2i_fp(FILE *out, X509** buf) {
1494 if (K_ASN1_d2i_fp)
return reinterpret_cast<X509 *
>((K_ASN1_d2i_fp)(
reinterpret_cast<char *(*)()
>(K_X509_new),
reinterpret_cast<char *(*)()
>(K_d2i_X509), out,
reinterpret_cast<unsigned char **
>(buf)));
1499int KOpenSSLProxy::SSL_peek(SSL *ssl,
void *buf,
int num) {
1500 if (K_SSL_peek)
return (K_SSL_peek)(ssl,buf,num);
1505const char *KOpenSSLProxy::RAND_file_name(
char *buf,
size_t num) {
1506 if (K_RAND_file_name)
return (K_RAND_file_name)(buf, num);
1511int KOpenSSLProxy::RAND_load_file(
const char *filename,
long max_bytes) {
1512 if (K_RAND_load_file)
return (K_RAND_load_file)(filename, max_bytes);
1517int KOpenSSLProxy::RAND_write_file(
const char *filename) {
1518 if (K_RAND_write_file)
return (K_RAND_write_file)(filename);
1523int KOpenSSLProxy::X509_PURPOSE_get_count() {
1524 if (K_X509_PURPOSE_get_count)
return (K_X509_PURPOSE_get_count)();
1529int KOpenSSLProxy::X509_PURPOSE_get_id(X509_PURPOSE *p) {
1530 if (K_X509_PURPOSE_get_id)
return (K_X509_PURPOSE_get_id)(p);
1535int KOpenSSLProxy::X509_check_purpose(X509 *x,
int id,
int ca) {
1536 if (K_X509_check_purpose)
return (K_X509_check_purpose)(x, id, ca);
1541X509_PURPOSE *KOpenSSLProxy::X509_PURPOSE_get0(
int idx) {
1542 if (K_X509_PURPOSE_get0)
return (K_X509_PURPOSE_get0)(idx);
1547int KOpenSSLProxy::EVP_PKEY_assign(EVP_PKEY *pkey,
int type,
char *key) {
1548 if (K_EVP_PKEY_assign)
return (K_EVP_PKEY_assign)(pkey, type, key);
1553int KOpenSSLProxy::EVP_PKEY_base_id(EVP_PKEY *pkey)
1555#if OPENSSL_VERSION_NUMBER < 0x10100000L
1558 if (K_EVP_PKEY_base_id)
return (K_EVP_PKEY_base_id)(pkey);
1564RSA *KOpenSSLProxy::EVP_PKEY_get0_RSA(EVP_PKEY *pkey)
1566#if OPENSSL_VERSION_NUMBER < 0x10100000L
1567 return pkey->pkey.rsa;
1569 if (K_EVP_PKEY_get0_RSA)
return (K_EVP_PKEY_get0_RSA)(pkey);
1575void KOpenSSLProxy::RSA_get0_key(RSA *rsa,
const BIGNUM **n,
const BIGNUM **e,
const BIGNUM **d)
1577#if OPENSSL_VERSION_NUMBER < 0x10100000L
1582 if (K_RSA_get0_key) (K_RSA_get0_key)(rsa, n, e, d);
1587DSA *KOpenSSLProxy::EVP_PKEY_get0_DSA(EVP_PKEY *pkey)
1589#if OPENSSL_VERSION_NUMBER < 0x10100000L
1590 return pkey->pkey.dsa;
1592 if (K_EVP_PKEY_get0_DSA)
return (K_EVP_PKEY_get0_DSA)(pkey);
1598void KOpenSSLProxy::DSA_get0_pqg(DSA *dsa,
const BIGNUM **p,
const BIGNUM **q,
const BIGNUM **g)
1600#if OPENSSL_VERSION_NUMBER < 0x10100000L
1605 if (K_DSA_get0_pqg) (K_DSA_get0_pqg)(dsa, p, q, g);
1610void KOpenSSLProxy::DSA_get0_key(DSA *dsa,
const BIGNUM **pub_key,
const BIGNUM **priv_key)
1612#if OPENSSL_VERSION_NUMBER < 0x10100000L
1613 if (pub_key) *pub_key = dsa->pub_key;
1614 if (priv_key) *priv_key = dsa->priv_key;
1616 if (K_DSA_get0_key) (K_DSA_get0_key)(dsa, pub_key, priv_key);
1621int KOpenSSLProxy::X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey) {
1622 if (K_X509_REQ_set_pubkey)
return (K_X509_REQ_set_pubkey)(x, pkey);
1627RSA* KOpenSSLProxy::RSA_generate_key(
int bits,
unsigned long e,
void
1628 (*callback)(
int,
int,
void *),
void *cb_arg) {
1629 if (K_RSA_generate_key)
return (K_RSA_generate_key)(bits, e, callback, cb_arg);
1633STACK *KOpenSSLProxy::X509_get1_email(X509 *x) {
1634 if (K_X509_get1_email)
return (K_X509_get1_email)(x);
1638void KOpenSSLProxy::X509_email_free(STACK *sk) {
1639 if (K_X509_email_free) (K_X509_email_free)(sk);
1642EVP_CIPHER *KOpenSSLProxy::EVP_des_ede3_cbc() {
1643 if (K_EVP_des_ede3_cbc)
return (K_EVP_des_ede3_cbc)();
1647EVP_CIPHER *KOpenSSLProxy::EVP_des_cbc() {
1648 if (K_EVP_des_cbc)
return (K_EVP_des_cbc)();
1652EVP_CIPHER *KOpenSSLProxy::EVP_rc2_cbc() {
1653 if (K_EVP_rc2_cbc)
return (K_EVP_rc2_cbc)();
1657EVP_CIPHER *KOpenSSLProxy::EVP_rc2_64_cbc() {
1658 if (K_EVP_rc2_64_cbc)
return (K_EVP_rc2_64_cbc)();
1662EVP_CIPHER *KOpenSSLProxy::EVP_rc2_40_cbc() {
1663 if (K_EVP_rc2_40_cbc)
return (K_EVP_rc2_40_cbc)();
1667int KOpenSSLProxy::i2d_X509_REQ_fp(FILE *
fp, X509_REQ *x) {
1668 if (K_i2d_X509_REQ_fp)
return (K_i2d_X509_REQ_fp)(
fp,x);
1673void KOpenSSLProxy::ERR_clear_error() {
1674 if (K_ERR_clear_error) (K_ERR_clear_error)();
1678unsigned long KOpenSSLProxy::ERR_get_error() {
1679 if (K_ERR_get_error)
return (K_ERR_get_error)();
1680 else return 0xffffffff;
1684void KOpenSSLProxy::ERR_print_errors_fp(FILE*
fp) {
1685 if (K_ERR_print_errors_fp) (K_ERR_print_errors_fp)(
fp);
1689SSL_SESSION *KOpenSSLProxy::SSL_get1_session(SSL *ssl) {
1690 if (K_SSL_get1_session)
return (K_SSL_get1_session)(ssl);
1695void KOpenSSLProxy::SSL_SESSION_free(SSL_SESSION *session) {
1696 if (K_SSL_SESSION_free) (K_SSL_SESSION_free)(session);
1700int KOpenSSLProxy::SSL_set_session(SSL *ssl, SSL_SESSION *session) {
1701 if (K_SSL_set_session)
return (K_SSL_set_session)(ssl, session);
1706SSL_SESSION *KOpenSSLProxy::d2i_SSL_SESSION(SSL_SESSION **a,
unsigned char **pp,
long length) {
1707 if (K_d2i_SSL_SESSION)
return (K_d2i_SSL_SESSION)(a, pp, length);
1712int KOpenSSLProxy::i2d_SSL_SESSION(SSL_SESSION *in,
unsigned char **pp) {
1713 if (K_i2d_SSL_SESSION)
return (K_i2d_SSL_SESSION)(in, pp);
1718int KOpenSSLProxy::i2d_PrivateKey_fp(FILE *
fp, EVP_PKEY *p) {
1719 if (K_i2d_PrivateKey_fp)
return (K_i2d_PrivateKey_fp)(
fp, p);
1724int KOpenSSLProxy::i2d_PKCS8PrivateKey_fp(FILE *
fp, EVP_PKEY *p,
const EVP_CIPHER *c,
char *k,
int klen, pem_password_cb *cb,
void *u) {
1725 if (K_i2d_PKCS8PrivateKey_fp)
return (K_i2d_PKCS8PrivateKey_fp)(
fp, p, c, k, klen, cb, u);
1730void KOpenSSLProxy::RSA_free(RSA *rsa) {
1731 if (K_RSA_free) (K_RSA_free)(rsa);
1735EVP_CIPHER *KOpenSSLProxy::EVP_bf_cbc() {
1736 if (K_EVP_bf_cbc)
return (K_EVP_bf_cbc)();
1741int KOpenSSLProxy::X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey,
const EVP_MD *md) {
1742 if (K_X509_REQ_sign)
return (K_X509_REQ_sign)(x, pkey, md);
1747int KOpenSSLProxy::X509_NAME_add_entry_by_txt(X509_NAME *name,
char *field,
1748 int type,
unsigned char *bytes,
int len,
int loc,
int set) {
1749 if (K_X509_NAME_add_entry_by_txt)
return (K_X509_NAME_add_entry_by_txt)(
name, field, type, bytes, len, loc, set);
1754X509_NAME *KOpenSSLProxy::X509_NAME_new() {
1755 if (K_X509_NAME_new)
return (K_X509_NAME_new)();
1760int KOpenSSLProxy::X509_REQ_set_subject_name(X509_REQ *req,X509_NAME *name) {
1761 if (K_X509_REQ_set_subject_name)
return (K_X509_REQ_set_subject_name)(req,
name);
1766unsigned char *KOpenSSLProxy::ASN1_STRING_data(ASN1_STRING *x) {
1767 if (K_ASN1_STRING_data)
return (K_ASN1_STRING_data)(x);
1772int KOpenSSLProxy::ASN1_STRING_length(ASN1_STRING *x) {
1773 if (K_ASN1_STRING_length)
return (K_ASN1_STRING_length)(x);
1778STACK_OF(SSL_CIPHER) *KOpenSSLProxy::SSL_get_ciphers(
const SSL* ssl) {
1779 if (K_SSL_get_ciphers)
return (K_SSL_get_ciphers)(ssl);
void(* void_function_ptr)()
Dynamically load and wrap OpenSSL.
void destroy()
Destroy the class and start over - don't use this unless you know what you are doing.
bool hasLibSSL() const
Return true of libssl was found and loaded.
bool hasLibCrypto() const
Return true of libcrypto was found and loaded.
static KOpenSSLProxy * self()
Return an instance of class KOpenSSLProxy * You cannot delete this object.
int access(const QString &path, int mode)
QString dir(const QString &fileClass)
Returns the most recently used directory accociated with this file-class.
const char * name(StandardAction id)