24#include <openssl/opensslv.h>
29#include <kstaticdeleter.h>
36#define STRINGIFY(x) #x
38#define GET_CRYPTOLIB_SYMBOL(a) ((_cryptoLib->hasSymbol(a)) ? _cryptoLib->symbol(a) : NULL)
39#define GET_SSLLIB_SYMBOL(a) ((_sslLib->hasSymbol(a)) ? _sslLib->symbol(a) : NULL)
42#if !defined(OPENSSL_INIT_ADD_ALL_CIPHERS)
43# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L
44# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L
45# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L
50static int (*K_SSL_connect) (SSL *) = 0L;
51static int (*K_SSL_accept) (SSL *) = 0L;
52static int (*K_SSL_read) (SSL *,
void *, int) = 0L;
53static int (*K_SSL_write) (SSL *,
const void *, int) = 0L;
54static SSL *(*K_SSL_new) (SSL_CTX *) = 0L;
55static void (*K_SSL_free) (SSL *) = 0L;
56static int (*K_SSL_shutdown) (SSL *) = 0L;
57static SSL_CTX *(*K_SSL_CTX_new)(SSL_METHOD *) = 0L;
58static void (*K_SSL_CTX_free) (SSL_CTX *) = 0L;
59static int (*K_SSL_set_fd) (SSL *, int) = 0L;
60static int (*K_SSL_pending) (SSL *) = 0L;
61static int (*K_SSL_peek) (SSL *,
void *, int) = 0L;
62static int (*K_SSL_CTX_set_cipher_list)(SSL_CTX *,
const char *) = 0L;
63static void (*K_SSL_CTX_set_verify)(SSL_CTX *, int,
64 int (*)(int, X509_STORE_CTX *)) = 0L;
65static int (*K_SSL_use_certificate)(SSL *, X509 *) = 0L;
66static SSL_CIPHER *(*K_SSL_get_current_cipher)(SSL *) = 0L;
67static long (*K_SSL_set_options)(SSL *ssl,
long options) = 0L;
68static int (*K_SSL_session_reused)(SSL *ssl) = 0L;
69static long (*K_SSL_ctrl) (SSL *,int, long,
void *) = 0L;
70static int (*K_RAND_egd) (
const char *) = 0L;
71static const char* (*K_RAND_file_name) (
char *, size_t) = 0L;
72static int (*K_RAND_load_file) (
const char *, long) = 0L;
73static int (*K_RAND_write_file) (
const char *) = 0L;
74static SSL_METHOD * (*K_TLSv1_client_method) () = 0L;
75static SSL_METHOD * (*K_SSLv2_client_method) () = 0L;
76static SSL_METHOD * (*K_SSLv3_client_method) () = 0L;
77static SSL_METHOD * (*K_TLS_client_method) () = 0L;
78static X509 * (*K_SSL_get_peer_certificate) (SSL *) = 0L;
79static int (*K_SSL_CIPHER_get_bits) (SSL_CIPHER *,
int *) = 0L;
80static char * (*K_SSL_CIPHER_get_version) (SSL_CIPHER *) = 0L;
81static const char * (*K_SSL_CIPHER_get_name) (SSL_CIPHER *) = 0L;
82static char * (*K_SSL_CIPHER_description) (SSL_CIPHER *,
char *, int) = 0L;
83static X509 * (*K_d2i_X509) (X509 **,
unsigned char **,long) = 0L;
84static X509_CRL * (*K_d2i_X509_CRL) (X509_CRL **,
unsigned char **,long) = 0L;
85static int (*K_i2d_X509) (X509 *,
unsigned char **) = 0L;
86static int (*K_X509_cmp) (X509 *, X509 *) = 0L;
87static int (*K_X509_subject_name_cmp) (
const X509 *,
const X509 *) = 0L;
88static void (*K_X509_STORE_CTX_free) (X509_STORE_CTX *) = 0L;
89static int (*K_X509_verify_cert) (X509_STORE_CTX *) = 0L;
90static X509_STORE_CTX *(*K_X509_STORE_CTX_new) (void) = 0L;
91static void (*K_X509_STORE_free) (X509_STORE *) = 0L;
92static X509_STORE *(*K_X509_STORE_new) (void) = 0L;
93static void (*K_X509_free) (X509 *) = 0L;
94static void (*K_X509_CRL_free) (X509_CRL *) = 0L;
95static char *(*K_X509_NAME_oneline) (X509_NAME *,
char *,int) = 0L;
96static X509_NAME *(*K_X509_get_subject_name) (X509 *) = 0L;
97static X509_NAME *(*K_X509_get_issuer_name) (X509 *) = 0L;
98static X509_LOOKUP *(*K_X509_STORE_add_lookup) (X509_STORE *, X509_LOOKUP_METHOD *) = 0L;
99static X509_LOOKUP_METHOD *(*K_X509_LOOKUP_file)(void) = 0L;
100static void (*K_X509_LOOKUP_free)(X509_LOOKUP *) = 0L;
101static int (*K_X509_LOOKUP_ctrl)(X509_LOOKUP *, int,
const char *, long,
char **) = 0L;
102static void (*K_X509_STORE_CTX_init)(X509_STORE_CTX *, X509_STORE *, X509 *, STACK_OF(X509) *) = 0L;
103static void (*K_CRYPTO_free) (
void *) = 0L;
104static X509* (*K_X509_dup) (X509 *) = 0L;
105static void (*K_X509_get0_signature)(
const ASN1_BIT_STRING **psig,
106 const X509_ALGOR **palg,
const X509 *x) = 0L;
107static BIO_METHOD *(*K_BIO_s_mem) (void) = 0L;
108static BIO* (*K_BIO_new) (BIO_METHOD *) = 0L;
109static BIO* (*K_BIO_new_fp) (FILE *, int) = 0L;
110static BIO* (*K_BIO_new_mem_buf) (
void *, int) = 0L;
111static int (*K_BIO_free) (BIO *) = 0L;
112static long (*K_BIO_ctrl) (BIO *,int,long,
void *) = 0L;
113static int (*K_BIO_write) (BIO *b,
const void *data,
int len) = 0L;
114static void* (*K_BIO_get_data) (BIO *a) = 0L;
115static int (*K_PEM_ASN1_write_bio) (int (*)(),
const char *,BIO *,
char *,
116 const EVP_CIPHER *,
unsigned char *,
int ,
117 pem_password_cb *,
void *) = 0L;
118#if OPENSSL_VERSION_NUMBER >= 0x10000000L
119static int (*K_ASN1_item_i2d_fp)(ASN1_ITEM *,FILE *,
unsigned char *) = 0L;
120static ASN1_ITEM *K_NETSCAPE_X509_it = 0L;
122static ASN1_METHOD* (*K_X509_asn1_meth) (void) = 0L;
123static int (*K_ASN1_i2d_fp)(int (*)(),FILE *,
unsigned char *) = 0L;
124static int (*K_i2d_ASN1_HEADER)(ASN1_HEADER *,
unsigned char **) = 0L;
126static int (*K_X509_print_fp) (FILE *, X509*) = 0L;
127static int (*K_i2d_PKCS12) (PKCS12*,
unsigned char**) = 0L;
128static int (*K_i2d_PKCS12_fp) (FILE *, PKCS12*) = 0L;
129static int (*K_PKCS12_newpass) (PKCS12*,
char*,
char*) = 0L;
130static PKCS12* (*K_d2i_PKCS12_fp) (FILE*, PKCS12**) = 0L;
131static PKCS12* (*K_PKCS12_new) (void) = 0L;
132static void (*K_PKCS12_free) (PKCS12 *) = 0L;
133static int (*K_PKCS12_parse) (PKCS12*,
const char *, EVP_PKEY**,
134 X509**, STACK_OF(X509)**) = 0L;
135static void (*K_EVP_PKEY_free) (EVP_PKEY *) = 0L;
136static EVP_PKEY* (*K_EVP_PKEY_new) () = 0L;
137static int (*K_EVP_PKEY_base_id)(
const EVP_PKEY *pkey) = 0L;
138static RSA* (*K_EVP_PKEY_get0_RSA)(EVP_PKEY *pkey) = 0L;
139static DSA* (*K_EVP_PKEY_get0_DSA)(EVP_PKEY *pkey) = 0L;
140static void (*K_X509_REQ_free) (X509_REQ *) = 0L;
141static X509_REQ* (*K_X509_REQ_new) () = 0L;
142static int (*K_SSL_CTX_use_PrivateKey) (SSL_CTX*, EVP_PKEY*) = 0L;
143static int (*K_SSL_CTX_use_certificate) (SSL_CTX*, X509*) = 0L;
144static int (*K_SSL_get_error) (SSL*, int) = 0L;
145static STACK_OF(X509)* (*K_SSL_get_peer_cert_chain) (SSL*) = 0L;
146static void (*K_X509_STORE_CTX_set0_untrusted) (X509_STORE_CTX *, STACK_OF(X509)*) = 0L;
147static void (*K_X509_STORE_CTX_set_purpose) (X509_STORE_CTX *, int) = 0L;
148static void (*K_sk_free) (STACK*) = 0L;
149static int (*K_sk_num) (STACK*) = 0L;
150static char* (*K_sk_pop) (STACK*) = 0L;
151static char* (*K_sk_value) (STACK*, int) = 0L;
152static STACK* (*K_sk_new) (int (*)()) = 0L;
153static int (*K_sk_push) (STACK*,
char*) = 0L;
154static STACK* (*K_sk_dup) (
const STACK *) = 0L;
155static char * (*K_i2s_ASN1_INTEGER) (X509V3_EXT_METHOD *, ASN1_INTEGER *) =0L;
156static ASN1_INTEGER * (*K_X509_get_serialNumber) (X509 *) = 0L;
157static EVP_PKEY *(*K_X509_get_pubkey)(X509 *) = 0L;
158static int (*K_i2d_PublicKey)(EVP_PKEY *,
unsigned char **) = 0L;
159static int (*K_X509_check_private_key)(X509 *, EVP_PKEY *) = 0L;
160static char * (*K_BN_bn2hex)(
const BIGNUM *) = 0L;
161static int (*K_X509_digest)(
const X509 *,
const EVP_MD *,
unsigned char *,
unsigned int *) = 0L;
162static EVP_MD* (*K_EVP_md5)() = 0L;
163static void (*K_ASN1_INTEGER_free)(ASN1_INTEGER *) = 0L;
164static int (*K_OBJ_obj2nid)(ASN1_OBJECT *) = 0L;
165static const char * (*K_OBJ_nid2ln)(int) = 0L;
166static int (*K_X509_get_ext_count)(X509*) = 0L;
167static int (*K_X509_get_ext_by_NID)(X509*, int, int) = 0L;
168static int (*K_X509_get_ext_by_OBJ)(X509*,ASN1_OBJECT*,int) = 0L;
169static X509_EXTENSION *(*K_X509_get_ext)(X509*,
int loc) = 0L;
170static X509_EXTENSION *(*K_X509_delete_ext)(X509*, int) = 0L;
171static int (*K_X509_add_ext)(X509*, X509_EXTENSION*, int) = 0L;
172static void *(*K_X509_get_ext_d2i)(X509*, int,
int*,
int*) = 0L;
173static char *(*K_i2s_ASN1_OCTET_STRING)(X509V3_EXT_METHOD*, ASN1_OCTET_STRING*) = 0L;
174static int (*K_ASN1_BIT_STRING_get_bit)(ASN1_BIT_STRING*, int) = 0L;
175static PKCS7 *(*K_PKCS7_new)() = 0L;
176static void (*K_PKCS7_free)(PKCS7*) = 0L;
177static void (*K_PKCS7_content_free)(PKCS7*) = 0L;
178static int (*K_i2d_PKCS7)(PKCS7*,
unsigned char**) = 0L;
179static PKCS7 *(*K_d2i_PKCS7)(PKCS7**,
unsigned char**,long) = 0L;
180static int (*K_i2d_PKCS7_fp)(FILE*,PKCS7*) = 0L;
181static PKCS7* (*K_d2i_PKCS7_fp)(FILE*,PKCS7**) = 0L;
182static int (*K_i2d_PKCS7_bio)(BIO *bp,PKCS7 *p7) = 0L;
183static PKCS7 *(*K_d2i_PKCS7_bio)(BIO *bp,PKCS7 **p7) = 0L;
184static PKCS7* (*K_PKCS7_dup)(PKCS7*) = 0L;
185static STACK_OF(X509_NAME) *(*K_SSL_load_client_CA_file)(
const char*) = 0L;
186static STACK_OF(X509_INFO) *(*K_PEM_X509_INFO_read)(FILE*, STACK_OF(X509_INFO)*, pem_password_cb*,
void*) = 0L;
187static char *(*K_ASN1_d2i_fp)(
char *(*)(),
char *(*)(),FILE*,
unsigned char**) = 0L;
188static X509 *(*K_X509_new)() = 0L;
189static int (*K_X509_PURPOSE_get_count)() = 0L;
190static int (*K_X509_PURPOSE_get_id)(X509_PURPOSE *) = 0L;
191static int (*K_X509_check_purpose)(X509*,int,int) = 0L;
192static X509_PURPOSE* (*K_X509_PURPOSE_get0)(int) = 0L;
193static int (*K_EVP_PKEY_assign)(EVP_PKEY*, int,
char*) = 0L;
194static int (*K_X509_REQ_set_pubkey)(X509_REQ*, EVP_PKEY*) = 0L;
195static void (*K_RSA_get0_key)(
const RSA *r,
const BIGNUM **n,
const BIGNUM **e,
const BIGNUM **d) = 0L;
196static RSA *(*K_RSA_generate_key)(int,
unsigned long, void (*)(int,int,
void *),
void *) = 0L;
197static void (*K_DSA_get0_pqg)(
const DSA *d,
const BIGNUM **p,
const BIGNUM **q,
const BIGNUM **g) = 0L;
198static void (*K_DSA_get0_key)(
const DSA *d,
const BIGNUM **pub_key,
const BIGNUM **priv_key) = 0L;
199static int (*K_i2d_X509_REQ_fp)(FILE*, X509_REQ*) = 0L;
200static void (*K_ERR_clear_error)() = 0L;
201static unsigned long (*K_ERR_get_error)() = 0L;
202static void (*K_ERR_print_errors_fp)(FILE*) = 0L;
203static PKCS7 *(*K_PKCS7_sign)(X509*, EVP_PKEY*, STACK_OF(X509)*, BIO*, int) = 0L;
204static int (*K_PKCS7_verify)(PKCS7*,STACK_OF(X509)*,X509_STORE*,BIO*,BIO*,int) = 0L;
205static STACK_OF(X509) *(*K_PKCS7_get0_signers)(PKCS7 *, STACK_OF(X509) *, int) = 0L;
206static PKCS7 *(*K_PKCS7_encrypt)(STACK_OF(X509) *, BIO *, EVP_CIPHER *, int) = 0L;
207static int (*K_PKCS7_decrypt)(PKCS7 *, EVP_PKEY *, X509 *, BIO *, int) = 0L;
208static SSL_SESSION* (*K_SSL_get1_session)(SSL*) = 0L;
209static void (*K_SSL_SESSION_free)(SSL_SESSION*) = 0L;
210static int (*K_SSL_set_session)(SSL*,SSL_SESSION*) = 0L;
211static SSL_SESSION* (*K_d2i_SSL_SESSION)(SSL_SESSION**,
unsigned char**, long) = 0L;
212static int (*K_i2d_SSL_SESSION)(SSL_SESSION*,
unsigned char**) = 0L;
213static STACK *(*K_X509_get1_email)(X509 *x) = 0L;
214static void (*K_X509_email_free)(STACK *sk) = 0L;
215static EVP_CIPHER *(*K_EVP_des_ede3_cbc)() = 0L;
216static EVP_CIPHER *(*K_EVP_des_cbc)() = 0L;
217static EVP_CIPHER *(*K_EVP_rc2_cbc)() = 0L;
218static EVP_CIPHER *(*K_EVP_rc2_64_cbc)() = 0L;
219static EVP_CIPHER *(*K_EVP_rc2_40_cbc)() = 0L;
220static int (*K_i2d_PrivateKey_fp)(FILE*,EVP_PKEY*) = 0L;
221static int (*K_i2d_PKCS8PrivateKey_fp)(FILE*, EVP_PKEY*,
const EVP_CIPHER*,
char*, int, pem_password_cb*,
void*) = 0L;
222static void (*K_RSA_free)(RSA*) = 0L;
223static EVP_CIPHER *(*K_EVP_bf_cbc)() = 0L;
224static int (*K_X509_REQ_sign)(X509_REQ*, EVP_PKEY*,
const EVP_MD*) = 0L;
225static int (*K_X509_NAME_add_entry_by_txt)(X509_NAME*,
char*, int,
unsigned char*, int, int, int) = 0L;
226static X509_NAME *(*K_X509_NAME_new)() = 0L;
227static int (*K_X509_REQ_set_subject_name)(X509_REQ*,X509_NAME*) = 0L;
228static unsigned char *(*K_ASN1_STRING_data)(ASN1_STRING*) = 0L;
229static int (*K_ASN1_STRING_length)(ASN1_STRING*) = 0L;
230static STACK_OF(SSL_CIPHER) *(*K_SSL_get_ciphers)(
const SSL *ssl) = 0L;
231static const ASN1_TIME* (*K_X509_CRL_get0_lastUpdate)(
const X509_CRL *crl) = 0L;
232static const ASN1_TIME* (*K_X509_CRL_get0_nextUpdate)(
const X509_CRL *crl) = 0L;
233static X509* (*K_X509_STORE_CTX_get_current_cert)(X509_STORE_CTX *ctx) = 0L;
234static int (*K_X509_STORE_CTX_get_error)(X509_STORE_CTX *ctx) = 0L;
235static int (*K_X509_STORE_CTX_get_error_depth)(X509_STORE_CTX *ctx) = 0L;
236static void (*K_X509_STORE_CTX_set_error)(X509_STORE_CTX *ctx,
int s) = 0L;
237static void (*K_X509_STORE_set_verify_cb)(X509_STORE *ctx,
238 X509_STORE_CTX_verify_cb verify_cb) = 0L;
239static STACK_OF(X509_OBJECT)* (*K_X509_STORE_get0_objects)(X509_STORE *v) = 0L;
240static X509_LOOKUP_TYPE (*K_X509_OBJECT_get_type)(
const X509_OBJECT *a) = 0L;
241static X509* (*K_X509_OBJECT_get0_X509)(
const X509_OBJECT *a) = 0L;
242static ASN1_TIME* (*K_X509_getm_notAfter)(
const X509 *x) = 0L;
243static ASN1_TIME* (*K_X509_getm_notBefore)(
const X509 *x) = 0L;
249 return _sslLib != 0L;
254 return _cryptoLib != 0L;
266#include <tqstringlist.h>
268static TQString findMostRecentLib(TQString dir, TQString name)
271 TQString filter =
"lib"+name+
".so.*";
272 TQDir d(dir, filter);
275 TQStringList l = d.entryList();
282 uint s = filter.length()-1;
283 for (TQStringList::Iterator it = l.begin(); it != l.end(); ++it) {
284 TQString numberpart = (*it).mid(s);
285 uint endmaj = numberpart.find(
'.');
289 int maj = numberpart.left(endmaj).toInt(&ok);
292 int min = numberpart.mid(endmaj+1).toInt(&ok);
295 if (maj > bestmaj || (maj == bestmaj && min > bestmin)) {
309KOpenSSLProxy::KOpenSSLProxy() {
310KLibLoader *ll = KLibLoader::self();
312TQStringList libpaths, libnamesc, libnamess;
318 cfg =
new TDEConfig(
"cryptodefaults",
false,
false);
319 cfg->setGroup(
"OpenSSL");
320 TQString upath = cfg->readPathEntry(
"Path");
321 if (!upath.isEmpty())
328 TQString libname = findMostRecentLib(
"/usr/" SYSTEM_LIBDIR,
"crypto");
329 if (!libname.isNull())
330 _cryptoLib = ll->globalLibrary(libname.latin1());
332#elif defined(__CYGWIN__)
333 libpaths <<
"/usr/bin/"
335 <<
"/usr/local/openssl/bin"
336 <<
"/opt/openssl/bin"
337 <<
"/opt/trinity/bin"
340 libnamess <<
"cygssl-0.9.7.dll"
345 libnamesc <<
"cygcrypto.dll"
352 libpaths <<
"/" SYSTEM_LIBDIR KDELIBSUFF
"/"
353 <<
"/usr/" SYSTEM_LIBDIR KDELIBSUFF
"/"
359 <<
"/opt/freeware/lib/"
361 <<
"/usr/" SYSTEM_LIBDIR
"/"
362 <<
"/usr/ssl/" SYSTEM_LIBDIR
"/"
363 <<
"/usr/local/" SYSTEM_LIBDIR
"/"
364 <<
"/usr/local/openssl/" SYSTEM_LIBDIR
"/"
365 <<
"/usr/local/ssl/" SYSTEM_LIBDIR
"/"
366 <<
"/opt/openssl/" SYSTEM_LIBDIR
"/"
367 <<
"/" SYSTEM_LIBDIR
"/"
374 <<
"libssl.a(libssl.so.0)"
375 #elif defined(__APPLE__)
377 <<
"libssl.0.9.dylib"
379 #ifdef OPENSSL_SHLIB_VERSION
380 <<
"libssl.so." STRINGIFY(OPENSSL_SHLIB_VERSION)
382 #ifdef SHLIB_VERSION_NUMBER
383 <<
"libssl.so." SHLIB_VERSION_NUMBER
393 <<
"libcrypto.a(libcrypto.so.0)"
394 #elif defined(__APPLE__)
396 <<
"libcrypto.0.9.dylib"
398 #ifdef OPENSSL_SHLIB_VERSION
399 <<
"libcrypto.so." STRINGIFY(OPENSSL_SHLIB_VERSION)
401 #ifdef SHLIB_VERSION_NUMBER
402 <<
"libcrypto.so." SHLIB_VERSION_NUMBER
411 for (TQStringList::Iterator it = libpaths.begin();
412 it != libpaths.end();
414 for (TQStringList::Iterator shit = libnamesc.begin();
415 shit != libnamesc.end();
418 if (!alib.isEmpty() && !alib.endsWith(
"/"))
421 TQString tmpStr(alib.latin1());
422 tmpStr.replace(TQRegExp(
"\\(.*\\)"),
"");
423 if (!access(tmpStr.latin1(), R_OK))
424 _cryptoLib = ll->globalLibrary(alib.latin1());
425 if (_cryptoLib)
break;
427 if (_cryptoLib)
break;
432 K_X509_free = (void (*) (X509 *)) GET_CRYPTOLIB_SYMBOL(
"X509_free");
433 K_X509_CRL_free = (void (*) (X509_CRL *)) GET_CRYPTOLIB_SYMBOL(
"X509_CRL_free");
434 K_RAND_egd = (int (*)(
const char *)) GET_CRYPTOLIB_SYMBOL(
"RAND_egd");
435 K_RAND_load_file = (int (*)(
const char *, long)) GET_CRYPTOLIB_SYMBOL(
"RAND_load_file");
436 K_RAND_file_name = (
const char* (*)(
char *,
size_t)) GET_CRYPTOLIB_SYMBOL(
"RAND_file_name");
437 K_RAND_write_file = (int (*)(
const char *)) GET_CRYPTOLIB_SYMBOL(
"RAND_write_file");
438 K_CRYPTO_free = (void (*) (
void *)) GET_CRYPTOLIB_SYMBOL(
"CRYPTO_free");
439 K_d2i_X509 = (X509 * (*)(X509 **,
unsigned char **,
long)) GET_CRYPTOLIB_SYMBOL(
"d2i_X509");
440 K_d2i_X509_CRL = (X509_CRL * (*)(X509_CRL **,
unsigned char **,
long)) GET_CRYPTOLIB_SYMBOL(
"d2i_X509_CRL");
441 K_i2d_X509 = (int (*)(X509 *,
unsigned char **)) GET_CRYPTOLIB_SYMBOL(
"i2d_X509");
442 K_X509_cmp = (int (*)(X509 *, X509 *)) GET_CRYPTOLIB_SYMBOL(
"X509_cmp");
443 K_X509_subject_name_cmp = (int (*)(
const X509 *,
const X509 *)) GET_CRYPTOLIB_SYMBOL(
"X509_subject_name_cmp");
444 K_X509_STORE_CTX_new = (X509_STORE_CTX * (*) (
void)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_new");
445 K_X509_STORE_CTX_free = (void (*) (X509_STORE_CTX *)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_free");
446 K_X509_verify_cert = (int (*) (X509_STORE_CTX *)) GET_CRYPTOLIB_SYMBOL(
"X509_verify_cert");
447 K_X509_STORE_new = (X509_STORE * (*) (
void)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_new");
448 K_X509_STORE_free = (void (*) (X509_STORE *)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_free");
449 K_X509_NAME_oneline = (
char * (*) (X509_NAME *,
char *,
int)) GET_CRYPTOLIB_SYMBOL(
"X509_NAME_oneline");
450 K_X509_get_subject_name = (X509_NAME * (*) (X509 *)) GET_CRYPTOLIB_SYMBOL(
"X509_get_subject_name");
451 K_X509_get_issuer_name = (X509_NAME * (*) (X509 *)) GET_CRYPTOLIB_SYMBOL(
"X509_get_issuer_name");
452 K_X509_STORE_add_lookup = (X509_LOOKUP *(*) (X509_STORE *, X509_LOOKUP_METHOD *)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_add_lookup");
453 K_X509_LOOKUP_file = (X509_LOOKUP_METHOD *(*)(
void)) GET_CRYPTOLIB_SYMBOL(
"X509_LOOKUP_file");
454 K_X509_LOOKUP_free = (void (*)(X509_LOOKUP *)) GET_CRYPTOLIB_SYMBOL(
"X509_LOOKUP_free");
455 K_X509_LOOKUP_ctrl = (int (*)(X509_LOOKUP *, int,
const char *, long,
char **)) GET_CRYPTOLIB_SYMBOL(
"X509_LOOKUP_ctrl");
456 K_X509_STORE_CTX_init = (void (*)(X509_STORE_CTX *, X509_STORE *, X509 *, STACK_OF(X509) *)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_init");
457 K_X509_dup = (X509* (*)(X509*)) GET_CRYPTOLIB_SYMBOL(
"X509_dup");
458 K_X509_get0_signature = (void (*)(
const ASN1_BIT_STRING **psig,
459 const X509_ALGOR **palg,
const X509 *x)) GET_CRYPTOLIB_SYMBOL(
"X509_get0_signature");
460 K_BIO_s_mem = (BIO_METHOD *(*) (
void)) GET_CRYPTOLIB_SYMBOL(
"BIO_s_mem");
461 K_BIO_new = (BIO* (*)(BIO_METHOD *)) GET_CRYPTOLIB_SYMBOL(
"BIO_new");
462 K_BIO_new_fp = (BIO* (*)(FILE*,
int)) GET_CRYPTOLIB_SYMBOL(
"BIO_new_fp");
463 K_BIO_new_mem_buf = (BIO* (*)(
void *,
int)) GET_CRYPTOLIB_SYMBOL(
"BIO_new_mem_buf");
464 K_BIO_free = (int (*)(BIO*)) GET_CRYPTOLIB_SYMBOL(
"BIO_free");
465 K_BIO_ctrl = (long (*) (BIO *,int,long,
void *)) GET_CRYPTOLIB_SYMBOL(
"BIO_ctrl");
466 K_BIO_write = (int (*) (BIO *b,
const void *data,
int len)) GET_CRYPTOLIB_SYMBOL(
"BIO_write");
467 K_BIO_get_data = (
void* (*)(BIO *a)) GET_CRYPTOLIB_SYMBOL(
"BIO_get_data");
468 K_PEM_ASN1_write_bio = (int (*)(int (*)(),
const char *,BIO*,
char*,
const EVP_CIPHER *,
unsigned char *,
int, pem_password_cb *,
void *)) GET_CRYPTOLIB_SYMBOL(
"PEM_ASN1_write_bio");
469#if OPENSSL_VERSION_NUMBER >= 0x10000000L
470 K_ASN1_item_i2d_fp = (int (*)(ASN1_ITEM *, FILE*,
unsigned char *)) GET_CRYPTOLIB_SYMBOL(
"ASN1_item_i2d_fp");
471 K_NETSCAPE_X509_it = (ASN1_ITEM *) GET_CRYPTOLIB_SYMBOL(
"NETSCAPE_X509_it");
473 K_X509_asn1_meth = (ASN1_METHOD* (*)(
void)) GET_CRYPTOLIB_SYMBOL(
"X509_asn1_meth");
474 K_ASN1_i2d_fp = (int (*)(int (*)(), FILE*,
unsigned char *)) GET_CRYPTOLIB_SYMBOL(
"ASN1_i2d_fp");
475 K_i2d_ASN1_HEADER = (int (*)(ASN1_HEADER *,
unsigned char **)) GET_CRYPTOLIB_SYMBOL(
"i2d_ASN1_HEADER");
477 K_X509_print_fp = (int (*)(FILE*, X509*)) GET_CRYPTOLIB_SYMBOL(
"X509_print_fp");
478 K_i2d_PKCS12 = (int (*)(PKCS12*,
unsigned char**)) GET_CRYPTOLIB_SYMBOL(
"i2d_PKCS12");
479 K_i2d_PKCS12_fp = (int (*)(FILE *, PKCS12*)) GET_CRYPTOLIB_SYMBOL(
"i2d_PKCS12_fp");
480 K_PKCS12_newpass = (int (*)(PKCS12*,
char*,
char*)) GET_CRYPTOLIB_SYMBOL(
"PKCS12_newpass");
481 K_d2i_PKCS12_fp = (PKCS12* (*)(FILE*, PKCS12**)) GET_CRYPTOLIB_SYMBOL(
"d2i_PKCS12_fp");
482 K_PKCS12_new = (PKCS12* (*)()) GET_CRYPTOLIB_SYMBOL(
"PKCS12_new");
483 K_PKCS12_free = (void (*)(PKCS12 *)) GET_CRYPTOLIB_SYMBOL(
"PKCS12_free");
484 K_PKCS12_parse = (int (*)(PKCS12*,
const char *, EVP_PKEY**,
485 X509**, STACK_OF(X509)**)) GET_CRYPTOLIB_SYMBOL(
"PKCS12_parse");
486 K_EVP_PKEY_free = (void (*) (EVP_PKEY *)) GET_CRYPTOLIB_SYMBOL(
"EVP_PKEY_free");
487 K_EVP_PKEY_new = (EVP_PKEY* (*)()) GET_CRYPTOLIB_SYMBOL(
"EVP_PKEY_new");
488 K_EVP_PKEY_base_id = (int (*)(
const EVP_PKEY *pkey)) GET_CRYPTOLIB_SYMBOL(
"EVP_PKEY_base_id");
489 K_EVP_PKEY_get0_RSA = (RSA* (*)(EVP_PKEY *pkey)) GET_CRYPTOLIB_SYMBOL(
"EVP_PKEY_get0_RSA");
490 K_EVP_PKEY_get0_DSA = (DSA* (*)(EVP_PKEY *pkey)) GET_CRYPTOLIB_SYMBOL(
"EVP_PKEY_get0_DSA");
491 K_X509_REQ_free = (void (*)(X509_REQ*)) GET_CRYPTOLIB_SYMBOL(
"X509_REQ_free");
492 K_X509_REQ_new = (X509_REQ* (*)()) GET_CRYPTOLIB_SYMBOL(
"X509_REQ_new");
493 K_X509_STORE_CTX_set0_untrusted = (void (*)(X509_STORE_CTX *, STACK_OF(X509)*)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_set0_untrusted");
494 if (!K_X509_STORE_CTX_set0_untrusted) K_X509_STORE_CTX_set0_untrusted = (void (*)(X509_STORE_CTX *, STACK_OF(X509)*)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_set_chain");
495 K_X509_STORE_CTX_set_purpose = (void (*)(X509_STORE_CTX *, int)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_set_purpose");
496 K_sk_free = (void (*) (STACK *)) GET_CRYPTOLIB_SYMBOL(
"OPENSSL_sk_free");
497 if (!K_sk_free) K_sk_free = (void (*) (STACK *)) GET_CRYPTOLIB_SYMBOL(
"sk_free");
498 K_sk_num = (int (*) (STACK *)) GET_CRYPTOLIB_SYMBOL(
"OPENSSL_sk_num");
499 if (!K_sk_num) K_sk_num = (int (*) (STACK *)) GET_CRYPTOLIB_SYMBOL(
"sk_num");
500 K_sk_pop = (
char* (*) (STACK *)) GET_CRYPTOLIB_SYMBOL(
"OPENSSL_sk_pop");
501 if (!K_sk_pop) K_sk_pop = (
char* (*) (STACK *)) GET_CRYPTOLIB_SYMBOL(
"sk_pop");
502 K_sk_value = (
char* (*) (STACK *,
int)) GET_CRYPTOLIB_SYMBOL(
"OPENSSL_sk_value");
503 if (!K_sk_value) K_sk_value = (
char* (*) (STACK *,
int)) GET_CRYPTOLIB_SYMBOL(
"sk_value");
504 K_sk_new = (STACK* (*) (
int (*)())) GET_CRYPTOLIB_SYMBOL(
"OPENSSL_sk_new");
505 if (!K_sk_new) K_sk_new = (STACK* (*) (
int (*)())) GET_CRYPTOLIB_SYMBOL(
"sk_new");
506 K_sk_push = (int (*) (STACK*,
char*)) GET_CRYPTOLIB_SYMBOL(
"OPENSSL_sk_push");
507 if (!K_sk_push) K_sk_push = (int (*) (STACK*,
char*)) GET_CRYPTOLIB_SYMBOL(
"sk_push");
508 K_sk_dup = (STACK* (*) (
const STACK *)) GET_CRYPTOLIB_SYMBOL(
"OPENSSL_sk_dup");
509 if (!K_sk_dup) K_sk_dup = (STACK* (*) (
const STACK *)) GET_CRYPTOLIB_SYMBOL(
"sk_dup");
510 K_i2s_ASN1_INTEGER = (
char *(*) (X509V3_EXT_METHOD *, ASN1_INTEGER *)) GET_CRYPTOLIB_SYMBOL(
"i2s_ASN1_INTEGER");
511 K_X509_get_serialNumber = (ASN1_INTEGER * (*) (X509 *)) GET_CRYPTOLIB_SYMBOL(
"X509_get_serialNumber");
512 K_X509_get_pubkey = (EVP_PKEY *(*)(X509 *)) GET_CRYPTOLIB_SYMBOL(
"X509_get_pubkey");
513 K_i2d_PublicKey = (int (*)(EVP_PKEY *,
unsigned char **)) GET_CRYPTOLIB_SYMBOL(
"i2d_PublicKey");
514 K_X509_check_private_key = (int (*)(X509 *, EVP_PKEY *)) GET_CRYPTOLIB_SYMBOL(
"X509_check_private_key");
515 K_BN_bn2hex = (
char *(*)(
const BIGNUM *)) GET_CRYPTOLIB_SYMBOL(
"BN_bn2hex");
516 K_X509_digest = (int (*)(
const X509 *,
const EVP_MD *,
unsigned char *,
unsigned int *)) GET_CRYPTOLIB_SYMBOL(
"X509_digest");
517 K_EVP_md5 = (EVP_MD *(*)()) GET_CRYPTOLIB_SYMBOL(
"EVP_md5");
518 K_ASN1_INTEGER_free = (void (*)(ASN1_INTEGER *)) GET_CRYPTOLIB_SYMBOL(
"ASN1_INTEGER_free");
519 K_OBJ_obj2nid = (int (*)(ASN1_OBJECT *)) GET_CRYPTOLIB_SYMBOL(
"OBJ_obj2nid");
520 K_OBJ_nid2ln = (
const char *(*)(
int)) GET_CRYPTOLIB_SYMBOL(
"OBJ_nid2ln");
521 K_X509_get_ext_count = (int (*)(X509*)) GET_CRYPTOLIB_SYMBOL(
"X509_get_ext_count");
522 K_X509_get_ext_by_NID = (int (*)(X509*,int,int)) GET_CRYPTOLIB_SYMBOL(
"X509_get_ext_by_NID");
523 K_X509_get_ext_by_OBJ = (int (*)(X509*,ASN1_OBJECT*,int)) GET_CRYPTOLIB_SYMBOL(
"X509_get_ext_by_OBJ");
524 K_X509_get_ext = (X509_EXTENSION* (*)(X509*,
int)) GET_CRYPTOLIB_SYMBOL(
"X509_get_ext");
525 K_X509_delete_ext = (X509_EXTENSION* (*)(X509*,
int)) GET_CRYPTOLIB_SYMBOL(
"X509_delete_ext");
526 K_X509_add_ext = (int (*)(X509*,X509_EXTENSION*,int)) GET_CRYPTOLIB_SYMBOL(
"X509_add_ext");
527 K_X509_get_ext_d2i = (
void* (*)(X509*,
int,
int*,
int*)) GET_CRYPTOLIB_SYMBOL(
"X509_get_ext_d2i");
528 K_i2s_ASN1_OCTET_STRING = (
char *(*)(X509V3_EXT_METHOD*,ASN1_OCTET_STRING*)) GET_CRYPTOLIB_SYMBOL(
"i2s_ASN1_OCTET_STRING");
529 K_ASN1_BIT_STRING_get_bit = (int (*)(ASN1_BIT_STRING*,int)) GET_CRYPTOLIB_SYMBOL(
"ASN1_BIT_STRING_get_bit");
530 K_PKCS7_new = (PKCS7 *(*)()) GET_CRYPTOLIB_SYMBOL(
"PKCS7_new");
531 K_PKCS7_free = (void (*)(PKCS7*)) GET_CRYPTOLIB_SYMBOL(
"PKCS7_free");
532 K_PKCS7_content_free = (void (*)(PKCS7*)) GET_CRYPTOLIB_SYMBOL(
"PKCS7_content_free");
533 K_i2d_PKCS7 = (int (*)(PKCS7*,
unsigned char**)) GET_CRYPTOLIB_SYMBOL(
"i2d_PKCS7");
534 K_i2d_PKCS7_fp = (int (*)(FILE*,PKCS7*)) GET_CRYPTOLIB_SYMBOL(
"i2d_PKCS7_fp");
535 K_i2d_PKCS7_bio = (int (*)(BIO *bp,PKCS7 *p7)) GET_CRYPTOLIB_SYMBOL(
"i2d_PKCS7_bio");
536 K_d2i_PKCS7 = (PKCS7* (*)(PKCS7**,
unsigned char**,
long)) GET_CRYPTOLIB_SYMBOL(
"d2i_PKCS7");
537 K_d2i_PKCS7_fp = (PKCS7 *(*)(FILE *,PKCS7**)) GET_CRYPTOLIB_SYMBOL(
"d2i_PKCS7_fp");
538 K_d2i_PKCS7_bio = (PKCS7 *(*)(BIO *bp,PKCS7 **p7)) GET_CRYPTOLIB_SYMBOL(
"d2i_PKCS7_bio");
539 K_PKCS7_dup = (PKCS7* (*)(PKCS7*)) GET_CRYPTOLIB_SYMBOL(
"PKCS7_dup");
540 K_PKCS7_sign = (PKCS7 *(*)(X509*, EVP_PKEY*, STACK_OF(X509)*, BIO*, int)) GET_CRYPTOLIB_SYMBOL(
"PKCS7_sign");
541 K_PKCS7_verify = (int (*)(PKCS7*,STACK_OF(X509)*,X509_STORE*,BIO*,BIO*,int)) GET_CRYPTOLIB_SYMBOL(
"PKCS7_verify");
542 K_PKCS7_get0_signers = (STACK_OF(X509) *(*)(PKCS7 *, STACK_OF(X509) *, int)) GET_CRYPTOLIB_SYMBOL(
"PKCS7_get0_signers");
543 K_PKCS7_encrypt = (PKCS7* (*)(STACK_OF(X509) *, BIO *, EVP_CIPHER *, int)) GET_CRYPTOLIB_SYMBOL(
"PKCS7_encrypt");
544 K_PKCS7_decrypt = (int (*)(PKCS7 *, EVP_PKEY *, X509 *, BIO *, int)) GET_CRYPTOLIB_SYMBOL(
"PKCS7_decrypt");
545 K_PEM_X509_INFO_read = (STACK_OF(X509_INFO) *(*)(FILE*, STACK_OF(X509_INFO)*, pem_password_cb*,
void *)) GET_CRYPTOLIB_SYMBOL(
"PEM_X509_INFO_read");
546 K_ASN1_d2i_fp = (
char *(*)(
char *(*)(),
char *(*)(),FILE*,
unsigned char**)) GET_CRYPTOLIB_SYMBOL(
"ASN1_d2i_fp");
547 K_X509_new = (X509 *(*)()) GET_CRYPTOLIB_SYMBOL(
"X509_new");
548 K_X509_PURPOSE_get_count = (int (*)()) GET_CRYPTOLIB_SYMBOL(
"X509_PURPOSE_get_count");
549 K_X509_PURPOSE_get_id = (int (*)(X509_PURPOSE *)) GET_CRYPTOLIB_SYMBOL(
"X509_PURPOSE_get_id");
550 K_X509_check_purpose = (int (*)(X509*,int,int)) GET_CRYPTOLIB_SYMBOL(
"X509_check_purpose");
551 K_X509_PURPOSE_get0 = (X509_PURPOSE *(*)(
int)) GET_CRYPTOLIB_SYMBOL(
"X509_PURPOSE_get0");
552 K_EVP_PKEY_assign = (int (*)(EVP_PKEY*, int,
char*)) GET_CRYPTOLIB_SYMBOL(
"EVP_PKEY_assign");
553 K_X509_REQ_set_pubkey = (int (*)(X509_REQ*, EVP_PKEY*)) GET_CRYPTOLIB_SYMBOL(
"X509_REQ_set_pubkey");
554 K_RSA_get0_key = (void (*)(
const RSA *r,
const BIGNUM **n,
const BIGNUM **e,
const BIGNUM **d)) GET_CRYPTOLIB_SYMBOL(
"RSA_get0_key");
555 K_RSA_generate_key = (RSA* (*)(
int,
unsigned long,
void (*)(int,int,
void *),
void *)) GET_CRYPTOLIB_SYMBOL(
"RSA_generate_key");
556 K_DSA_get0_pqg = (void (*)(
const DSA *d,
const BIGNUM **p,
const BIGNUM **q,
const BIGNUM **g)) GET_CRYPTOLIB_SYMBOL(
"DSA_get0_pqg");
557 K_DSA_get0_key = (void (*)(
const DSA *d,
const BIGNUM **pub_key,
const BIGNUM **priv_key)) GET_CRYPTOLIB_SYMBOL(
"DSA_get0_key");
558 K_i2d_X509_REQ_fp = (int (*)(FILE *, X509_REQ *)) GET_CRYPTOLIB_SYMBOL(
"i2d_X509_REQ_fp");
559 K_ERR_clear_error = (void (*)()) GET_CRYPTOLIB_SYMBOL(
"ERR_clear_error");
560 K_ERR_get_error = (
unsigned long (*)()) GET_CRYPTOLIB_SYMBOL(
"ERR_get_error");
561 K_ERR_print_errors_fp = (void (*)(FILE*)) GET_CRYPTOLIB_SYMBOL(
"ERR_print_errors_fp");
562 K_X509_get1_email = (STACK *(*)(X509 *x)) GET_CRYPTOLIB_SYMBOL(
"X509_get1_email");
563 K_X509_email_free = (void (*)(STACK *sk)) GET_CRYPTOLIB_SYMBOL(
"X509_email_free");
564 K_EVP_des_ede3_cbc = (EVP_CIPHER *(*)()) GET_CRYPTOLIB_SYMBOL(
"EVP_des_ede3_cbc");
565 K_EVP_des_cbc = (EVP_CIPHER *(*)()) GET_CRYPTOLIB_SYMBOL(
"EVP_des_cbc");
566 K_EVP_rc2_cbc = (EVP_CIPHER *(*)()) GET_CRYPTOLIB_SYMBOL(
"EVP_rc2_cbc");
567 K_EVP_rc2_64_cbc = (EVP_CIPHER *(*)()) GET_CRYPTOLIB_SYMBOL(
"EVP_rc2_64_cbc");
568 K_EVP_rc2_40_cbc = (EVP_CIPHER *(*)()) GET_CRYPTOLIB_SYMBOL(
"EVP_rc2_40_cbc");
569 K_i2d_PrivateKey_fp = (int (*)(FILE*,EVP_PKEY*)) GET_CRYPTOLIB_SYMBOL(
"i2d_PrivateKey_fp");
570 K_i2d_PKCS8PrivateKey_fp = (int (*)(FILE*, EVP_PKEY*,
const EVP_CIPHER*,
char*, int, pem_password_cb*,
void*)) GET_CRYPTOLIB_SYMBOL(
"i2d_PKCS8PrivateKey_fp");
571 K_RSA_free = (void (*)(RSA*)) GET_CRYPTOLIB_SYMBOL(
"RSA_free");
572 K_EVP_bf_cbc = (EVP_CIPHER *(*)()) GET_CRYPTOLIB_SYMBOL(
"EVP_bf_cbc");
573 K_X509_REQ_sign = (int (*)(X509_REQ*, EVP_PKEY*,
const EVP_MD*)) GET_CRYPTOLIB_SYMBOL(
"X509_REQ_sign");
574 K_X509_NAME_add_entry_by_txt = (int (*)(X509_NAME*,
char*, int,
unsigned char*, int, int, int)) GET_CRYPTOLIB_SYMBOL(
"X509_NAME_add_entry_by_txt");
575 K_X509_NAME_new = (X509_NAME *(*)()) GET_CRYPTOLIB_SYMBOL(
"X509_NAME_new");
576 K_X509_REQ_set_subject_name = (int (*)(X509_REQ*,X509_NAME*)) GET_CRYPTOLIB_SYMBOL(
"X509_REQ_set_subject_name");
577 K_ASN1_STRING_data = (
unsigned char *(*)(ASN1_STRING*)) GET_CRYPTOLIB_SYMBOL(
"ASN1_STRING_data");
578 K_ASN1_STRING_length = (int (*)(ASN1_STRING*)) GET_CRYPTOLIB_SYMBOL(
"ASN1_STRING_length");
579 K_X509_CRL_get0_lastUpdate = (
const ASN1_TIME* (*)(
const X509_CRL *crl)) GET_CRYPTOLIB_SYMBOL(
"X509_CRL_get0_lastUpdate");
580 K_X509_CRL_get0_nextUpdate = (
const ASN1_TIME* (*)(
const X509_CRL *crl)) GET_CRYPTOLIB_SYMBOL(
"X509_CRL_get0_nextUpdate");
581 K_X509_STORE_CTX_get_current_cert = (X509* (*)(X509_STORE_CTX *ctx)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_get_current_cert");
582 K_X509_STORE_CTX_get_error = (int (*)(X509_STORE_CTX *ctx)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_get_error");
583 K_X509_STORE_CTX_get_error_depth = (int (*)(X509_STORE_CTX *ctx)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_get_error_depth");
584 K_X509_STORE_CTX_set_error = (void (*)(X509_STORE_CTX *ctx,
int s)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_CTX_set_error");
585 K_X509_STORE_set_verify_cb = (void (*)(X509_STORE *ctx,
586 X509_STORE_CTX_verify_cb verify_cb)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_set_verify_cb");
587 K_X509_STORE_get0_objects = (STACK_OF(X509_OBJECT)* (*)(X509_STORE *v)) GET_CRYPTOLIB_SYMBOL(
"X509_STORE_get0_objects");
588 K_X509_OBJECT_get_type = (X509_LOOKUP_TYPE (*)(
const X509_OBJECT *a)) GET_CRYPTOLIB_SYMBOL(
"X509_OBJECT_get_type");
589 K_X509_OBJECT_get0_X509 = (X509* (*)(
const X509_OBJECT *a)) GET_CRYPTOLIB_SYMBOL(
"X509_OBJECT_get0_X509");
590 K_X509_getm_notAfter = (ASN1_TIME* (*)(
const X509 *x)) GET_CRYPTOLIB_SYMBOL(
"X509_getm_notAfter");
591 K_X509_getm_notBefore = (ASN1_TIME* (*)(
const X509 *x)) GET_CRYPTOLIB_SYMBOL(
"X509_getm_notBefore");
597 TQString libname = findMostRecentLib(
"/usr/lib",
"ssl");
598 if (!libname.isNull())
599 _sslLib = ll->globalLibrary(libname.latin1());
602 for (TQStringList::Iterator it = libpaths.begin();
603 it != libpaths.end();
605 for (TQStringList::Iterator shit = libnamess.begin();
606 shit != libnamess.end();
609 if (!alib.isEmpty() && !alib.endsWith(
"/"))
612 TQString tmpStr(alib.latin1());
613 tmpStr.replace(TQRegExp(
"\\(.*\\)"),
"");
614 if (!access(tmpStr.latin1(), R_OK))
615 _sslLib = ll->globalLibrary(alib.latin1());
625 K_SSL_connect = (int (*)(SSL *)) GET_SSLLIB_SYMBOL(
"SSL_connect");
626 K_SSL_accept = (int (*)(SSL *)) GET_SSLLIB_SYMBOL(
"SSL_accept");
627 K_SSL_read = (int (*)(SSL *,
void *, int)) GET_SSLLIB_SYMBOL(
"SSL_read");
628 K_SSL_write = (int (*)(SSL *,
const void *, int))
629 GET_SSLLIB_SYMBOL(
"SSL_write");
630 K_SSL_new = (SSL* (*)(SSL_CTX *)) GET_SSLLIB_SYMBOL(
"SSL_new");
631 K_SSL_free = (void (*)(SSL *)) GET_SSLLIB_SYMBOL(
"SSL_free");
632 K_SSL_shutdown = (int (*)(SSL *)) GET_SSLLIB_SYMBOL(
"SSL_shutdown");
633 K_SSL_CTX_new = (SSL_CTX* (*)(SSL_METHOD*)) GET_SSLLIB_SYMBOL(
"SSL_CTX_new");
634 K_SSL_CTX_free = (void (*)(SSL_CTX*)) GET_SSLLIB_SYMBOL(
"SSL_CTX_free");
635 K_SSL_set_fd = (int (*)(SSL *, int)) GET_SSLLIB_SYMBOL(
"SSL_set_fd");
636 K_SSL_pending = (int (*)(SSL *)) GET_SSLLIB_SYMBOL(
"SSL_pending");
637 K_SSL_CTX_set_cipher_list = (int (*)(SSL_CTX *,
const char *))
638 GET_SSLLIB_SYMBOL(
"SSL_CTX_set_cipher_list");
639 K_SSL_CTX_set_verify = (void (*)(SSL_CTX*, int, int (*)(int, X509_STORE_CTX*))) GET_SSLLIB_SYMBOL(
"SSL_CTX_set_verify");
640 K_SSL_use_certificate = (int (*)(SSL*, X509*))
641 GET_SSLLIB_SYMBOL(
"SSL_CTX_use_certificate");
642 K_SSL_get_current_cipher = (SSL_CIPHER *(*)(SSL *))
643 GET_SSLLIB_SYMBOL(
"SSL_get_current_cipher");
644 K_SSL_set_options = (long (*)(SSL *ssl,
long options)) GET_SSLLIB_SYMBOL(
"SSL_set_options");
645 K_SSL_session_reused = (int (*)(SSL *ssl)) GET_SSLLIB_SYMBOL(
"SSL_session_reused");
646 K_SSL_ctrl = (long (*)(SSL * ,int, long,
void *))
647 GET_SSLLIB_SYMBOL(
"SSL_ctrl");
648 K_TLSv1_client_method = (SSL_METHOD *(*)()) GET_SSLLIB_SYMBOL(
"TLSv1_client_method");
649 K_SSLv2_client_method = (SSL_METHOD *(*)()) GET_SSLLIB_SYMBOL(
"SSLv2_client_method");
650 K_SSLv3_client_method = (SSL_METHOD *(*)()) GET_SSLLIB_SYMBOL(
"SSLv3_client_method");
651 K_TLS_client_method = (SSL_METHOD *(*)()) GET_SSLLIB_SYMBOL(
"TLS_client_method");
652 if (!K_TLS_client_method) K_TLS_client_method = (SSL_METHOD *(*)()) GET_SSLLIB_SYMBOL(
"SSLv23_client_method");
653 K_SSL_get_peer_certificate = (X509 *(*)(SSL *)) GET_SSLLIB_SYMBOL(
"SSL_get1_peer_certificate");
654 if (!K_SSL_get_peer_certificate) K_SSL_get_peer_certificate = (X509 *(*)(SSL *)) GET_SSLLIB_SYMBOL(
"SSL_get_peer_certificate");
655 K_SSL_CIPHER_get_bits = (int (*)(SSL_CIPHER *,
int *)) GET_SSLLIB_SYMBOL(
"SSL_CIPHER_get_bits");
656 K_SSL_CIPHER_get_version = (
char * (*)(SSL_CIPHER *)) GET_SSLLIB_SYMBOL(
"SSL_CIPHER_get_version");
657 K_SSL_CIPHER_get_name = (
const char * (*)(SSL_CIPHER *)) GET_SSLLIB_SYMBOL(
"SSL_CIPHER_get_name");
658 K_SSL_CIPHER_description = (
char * (*)(SSL_CIPHER *,
char *,
int)) GET_SSLLIB_SYMBOL(
"SSL_CIPHER_description");
659 K_SSL_CTX_use_PrivateKey = (int (*)(SSL_CTX*, EVP_PKEY*)) GET_SSLLIB_SYMBOL(
"SSL_CTX_use_PrivateKey");
660 K_SSL_CTX_use_certificate = (int (*)(SSL_CTX*, X509*)) GET_SSLLIB_SYMBOL(
"SSL_CTX_use_certificate");
661 K_SSL_get_error = (int (*)(SSL*, int)) GET_SSLLIB_SYMBOL(
"SSL_get_error");
662 K_SSL_get_peer_cert_chain = (STACK_OF(X509)* (*)(SSL*)) GET_SSLLIB_SYMBOL(
"SSL_get_peer_cert_chain");
663 K_SSL_load_client_CA_file = (STACK_OF(X509_NAME)* (*)(
const char *)) GET_SSLLIB_SYMBOL(
"SSL_load_client_CA_file");
664 K_SSL_peek = (int (*)(SSL*,
void*,int)) GET_SSLLIB_SYMBOL(
"SSL_peek");
665 K_SSL_get1_session = (SSL_SESSION* (*)(SSL*)) GET_SSLLIB_SYMBOL(
"SSL_get1_session");
666 K_SSL_SESSION_free = (void (*)(SSL_SESSION*)) GET_SSLLIB_SYMBOL(
"SSL_SESSION_free");
667 K_SSL_set_session = (int (*)(SSL*,SSL_SESSION*)) GET_SSLLIB_SYMBOL(
"SSL_set_session");
668 K_d2i_SSL_SESSION = (SSL_SESSION* (*)(SSL_SESSION**,
unsigned char**,
long)) GET_SSLLIB_SYMBOL(
"d2i_SSL_SESSION");
669 K_i2d_SSL_SESSION = (int (*)(SSL_SESSION*,
unsigned char**)) GET_SSLLIB_SYMBOL(
"i2d_SSL_SESSION");
670 K_SSL_get_ciphers = (STACK_OF(SSL_CIPHER) *(*)(
const SSL*)) GET_SSLLIB_SYMBOL(
"SSL_get_ciphers");
676 x = GET_SSLLIB_SYMBOL(
"OPENSSL_init_ssl");
680 ((int (*)(
unsigned long long,
void*))x)(0, NULL);
681 x = GET_CRYPTOLIB_SYMBOL(
"OPENSSL_init_crypto");
682 if (x) ((int (*)(
unsigned long long,
void*))x)(OPENSSL_INIT_ADD_ALL_CIPHERS
683 | OPENSSL_INIT_ADD_ALL_DIGESTS
684 | OPENSSL_INIT_LOAD_CONFIG,
690 x = GET_SSLLIB_SYMBOL(
"SSL_library_init");
692 if (x) ((int (*)())x)();
693 x = GET_CRYPTOLIB_SYMBOL(
"OpenSSL_add_all_algorithms");
695 x = GET_CRYPTOLIB_SYMBOL(
"OPENSSL_add_all_algorithms");
699 x = GET_CRYPTOLIB_SYMBOL(
"OpenSSL_add_all_algorithms_conf");
701 x = GET_CRYPTOLIB_SYMBOL(
"OPENSSL_add_all_algorithms_conf");
705 x = GET_CRYPTOLIB_SYMBOL(
"OpenSSL_add_all_algorithms_noconf");
707 x = GET_CRYPTOLIB_SYMBOL(
"OPENSSL_add_all_algorithms_noconf");
712 x = GET_CRYPTOLIB_SYMBOL(
"OpenSSL_add_all_ciphers");
714 x = GET_CRYPTOLIB_SYMBOL(
"OPENSSL_add_all_ciphers");
715 if (x) ((void (*)())x)();
716 x = GET_CRYPTOLIB_SYMBOL(
"OpenSSL_add_all_digests");
718 x = GET_CRYPTOLIB_SYMBOL(
"OPENSSL_add_all_digests");
719 if (x) ((void (*)())x)();
728static KStaticDeleter<KOpenSSLProxy> medProxy;
732KOpenSSLProxy::~KOpenSSLProxy() {
737 _cryptoLib->unload();
739 medProxy.setObject(0);
764int KOpenSSLProxy::SSL_connect(SSL *ssl) {
765 if (K_SSL_connect)
return (K_SSL_connect)(ssl);
766 kdWarning() <<
"SSL_connect not defined!" << endl;
771int KOpenSSLProxy::SSL_accept(SSL *ssl) {
772 if (K_SSL_accept)
return (K_SSL_accept)(ssl);
773 kdWarning() <<
"SSL_accept not defined!" << endl;
778int KOpenSSLProxy::SSL_read(SSL *ssl,
void *buf,
int num) {
779 if (K_SSL_read)
return (K_SSL_read)(ssl, buf, num);
780 kdWarning() <<
"SSL_read not defined!" << endl;
785int KOpenSSLProxy::SSL_write(SSL *ssl,
const void *buf,
int num) {
786 if (K_SSL_write)
return (K_SSL_write)(ssl, buf, num);
787 kdWarning() <<
"SSL_write not defined!" << endl;
792SSL *KOpenSSLProxy::SSL_new(SSL_CTX *ctx) {
793 if (K_SSL_new)
return (K_SSL_new)(ctx);
794 kdWarning() <<
"SSL_new not defined!" << endl;
799void KOpenSSLProxy::SSL_free(SSL *ssl) {
800 if (K_SSL_free) (K_SSL_free)(ssl);
801 else kdWarning() <<
"SSL_free not defined!" << endl;
805int KOpenSSLProxy::SSL_shutdown(SSL *ssl) {
806 if (K_SSL_shutdown)
return (K_SSL_shutdown)(ssl);
807 kdWarning() <<
"SSL_shutdown not defined!" << endl;
812SSL_CTX *KOpenSSLProxy::SSL_CTX_new(SSL_METHOD *method) {
813 if (K_SSL_CTX_new)
return (K_SSL_CTX_new)(method);
814 kdWarning() <<
"SSL_CTX_new not defined!" << endl;
819void KOpenSSLProxy::SSL_CTX_free(SSL_CTX *ctx) {
820 if (K_SSL_CTX_free) (K_SSL_CTX_free)(ctx);
821 else kdWarning() <<
"SSL_CTX_free not defined!" << endl;
825int KOpenSSLProxy::SSL_set_fd(SSL *ssl,
int fd) {
826 if (K_SSL_set_fd)
return (K_SSL_set_fd)(ssl, fd);
827 kdWarning() <<
"SSL_sed_fd not defined!" << endl;
832int KOpenSSLProxy::SSL_pending(SSL *ssl) {
833 if (K_SSL_pending)
return (K_SSL_pending)(ssl);
834 kdWarning() <<
"SSL_pending not defined!" << endl;
839int KOpenSSLProxy::SSL_CTX_set_cipher_list(SSL_CTX *ctx,
const char *str) {
840 if (K_SSL_CTX_set_cipher_list)
return (K_SSL_CTX_set_cipher_list)(ctx, str);
841 kdWarning() <<
"SSL_CTX_set_cipher_list not defined!" << endl;
846void KOpenSSLProxy::SSL_CTX_set_verify(SSL_CTX *ctx,
int mode,
847 int (*verify_callback)(
int, X509_STORE_CTX *)) {
848 if (K_SSL_CTX_set_verify) (K_SSL_CTX_set_verify)(ctx, mode, verify_callback);
849 else kdWarning() <<
"SSL_CTX_set_verify not defined!" << endl;
853int KOpenSSLProxy::SSL_use_certificate(SSL *ssl, X509 *x) {
854 if (K_SSL_use_certificate)
return (K_SSL_use_certificate)(ssl, x);
855 kdWarning() <<
"SSL_use_certificate not defined!" << endl;
860SSL_CIPHER *KOpenSSLProxy::SSL_get_current_cipher(SSL *ssl) {
861 if (K_SSL_get_current_cipher)
return (K_SSL_get_current_cipher)(ssl);
862 kdWarning() <<
"SSL_get_current_cipher not defined!" << endl;
867long KOpenSSLProxy::_SSL_set_options(SSL *ssl,
long options) {
868 if (K_SSL_set_options)
return (K_SSL_set_options)(ssl, options);
869#if OPENSSL_VERSION_NUMBER < 0x10100000L
870 return this->SSL_set_options(ssl, options);
872 kdWarning() <<
"SSL_set_options not defined!" << endl;
877int KOpenSSLProxy::_SSL_session_reused(SSL *ssl) {
878 if (K_SSL_session_reused)
return (K_SSL_session_reused)(ssl);
879#if OPENSSL_VERSION_NUMBER < 0x10100000L
880 return this->SSL_session_reused(ssl);
882 kdWarning() <<
"SSL_session_reused not defined!" << endl;
887long KOpenSSLProxy::SSL_ctrl(SSL *ssl,
int cmd,
long larg,
void *parg) {
888 if (K_SSL_ctrl)
return (K_SSL_ctrl)(ssl, cmd, larg, parg);
889 kdWarning() <<
"SSL_ctrl not defined!" << endl;
894int KOpenSSLProxy::RAND_egd(
const char *path) {
895 if (K_RAND_egd)
return (K_RAND_egd)(path);
896 kdWarning() <<
"RAND_egd not defined!" << endl;
901SSL_METHOD *KOpenSSLProxy::TLSv1_client_method() {
902 if (K_TLSv1_client_method)
return (K_TLSv1_client_method)();
903 kdWarning() <<
"TLSv1_client_method not defined!" << endl;
908SSL_METHOD *KOpenSSLProxy::SSLv2_client_method() {
909 if (K_SSLv2_client_method)
return (K_SSLv2_client_method)();
910 kdWarning() <<
"SSLv2_client_method not defined!" << endl;
915SSL_METHOD *KOpenSSLProxy::SSLv3_client_method() {
916 if (K_SSLv3_client_method)
return (K_SSLv3_client_method)();
917 kdWarning() <<
"SSLv3_client_method not defined!" << endl;
922SSL_METHOD *KOpenSSLProxy::TLS_client_method() {
923 if (K_TLS_client_method)
return (K_TLS_client_method)();
924 kdWarning() <<
"TLS_client_method not defined!" << endl;
929X509 *KOpenSSLProxy::SSL_get_peer_certificate(SSL *s) {
930 if (K_SSL_get_peer_certificate)
return (K_SSL_get_peer_certificate)(s);
931 kdWarning() <<
"SSL_get_peer_certificate not defined!" << endl;
936int KOpenSSLProxy::SSL_CIPHER_get_bits(SSL_CIPHER *c,
int *alg_bits) {
937 if (K_SSL_CIPHER_get_bits)
return (K_SSL_CIPHER_get_bits)(c, alg_bits);
938 kdWarning() <<
"SSL_CIPHER_get_bits not defined!" << endl;
943char * KOpenSSLProxy::SSL_CIPHER_get_version(SSL_CIPHER *c) {
944 if (K_SSL_CIPHER_get_version)
return (K_SSL_CIPHER_get_version)(c);
945 kdWarning() <<
"SSL_CIPHER_get_version not defined!" << endl;
950const char * KOpenSSLProxy::SSL_CIPHER_get_name(SSL_CIPHER *c) {
951 if (K_SSL_CIPHER_get_name)
return (K_SSL_CIPHER_get_name)(c);
952 kdWarning() <<
"SSL_CIPHER_get_name not defined!" << endl;
957char * KOpenSSLProxy::SSL_CIPHER_description(SSL_CIPHER *c,
char *buf,
int size) {
958 if (K_SSL_CIPHER_description)
return (K_SSL_CIPHER_description)(c,buf,size);
959 kdWarning() <<
"SSL_CIPHER_description not defined!" << endl;
964X509 * KOpenSSLProxy::d2i_X509(X509 **a,
unsigned char **pp,
long length) {
965 if (K_d2i_X509)
return (K_d2i_X509)(a,pp,length);
966 kdWarning() <<
"d2i_X509 not defined!" << endl;
971X509_CRL * KOpenSSLProxy::d2i_X509_CRL(X509_CRL **a,
unsigned char **pp,
long length) {
972 if (K_d2i_X509_CRL)
return (K_d2i_X509_CRL)(a,pp,length);
973 kdWarning() <<
"d2i_X509_CRL not defined!" << endl;
978int KOpenSSLProxy::i2d_X509(X509 *a,
unsigned char **pp) {
979 if (K_i2d_X509)
return (K_i2d_X509)(a,pp);
980 kdWarning() <<
"i2d_X509 not defined!" << endl;
985int KOpenSSLProxy::X509_cmp(X509 *a, X509 *b) {
986 if (K_X509_cmp)
return (K_X509_cmp)(a,b);
987 kdWarning() <<
"X509_cmp not defined!" << endl;
992int KOpenSSLProxy::X509_subject_name_cmp(
const X509 *a,
const X509 *b) {
993 if (K_X509_subject_name_cmp)
return (K_X509_subject_name_cmp)(a, b);
994 kdWarning() <<
"X509_subject_name_cmp not defined!" << endl;
999X509_STORE *KOpenSSLProxy::X509_STORE_new(
void) {
1000 if (K_X509_STORE_new)
return (K_X509_STORE_new)();
1001 kdWarning() <<
"X509_STORE_new not defined!" << endl;
1006void KOpenSSLProxy::X509_STORE_free(X509_STORE *v) {
1007 if (K_X509_STORE_free) (K_X509_STORE_free)(v);
1008 else kdWarning() <<
"X509_STORE_free not defined!" << endl;
1012X509_STORE_CTX *KOpenSSLProxy::X509_STORE_CTX_new(
void) {
1013 if (K_X509_STORE_CTX_new)
return (K_X509_STORE_CTX_new)();
1014 kdWarning() <<
"X509_STORE_CTX_new not defined!" << endl;
1019void KOpenSSLProxy::X509_STORE_CTX_free(X509_STORE_CTX *ctx) {
1020 if (K_X509_STORE_CTX_free) (K_X509_STORE_CTX_free)(ctx);
1021 else kdWarning() <<
"X509_STORE_CTX_free not defined!" << endl;
1025int KOpenSSLProxy::X509_verify_cert(X509_STORE_CTX *ctx) {
1026 if (K_X509_verify_cert)
return (K_X509_verify_cert)(ctx);
1027 kdWarning() <<
"X509_verify_cert not defined!" << endl;
1032void KOpenSSLProxy::X509_free(X509 *a) {
1033 if (K_X509_free) (K_X509_free)(a);
1034 else kdWarning() <<
"X509_free not defined!" << endl;
1038void KOpenSSLProxy::X509_CRL_free(X509_CRL *a) {
1039 if (K_X509_CRL_free) (K_X509_CRL_free)(a);
1040 else kdWarning() <<
"X509_CRL_free not defined!" << endl;
1044char *KOpenSSLProxy::X509_NAME_oneline(X509_NAME *a,
char *buf,
int size) {
1045 if (K_X509_NAME_oneline)
return (K_X509_NAME_oneline)(a,buf,size);
1046 kdWarning() <<
"X509_NAME_online not defined!" << endl;
1051X509_NAME *KOpenSSLProxy::X509_get_subject_name(X509 *a) {
1052 if (K_X509_get_subject_name)
return (K_X509_get_subject_name)(a);
1053 kdWarning() <<
"X509_get_subject not defined!" << endl;
1058X509_NAME *KOpenSSLProxy::X509_get_issuer_name(X509 *a) {
1059 if (K_X509_get_issuer_name)
return (K_X509_get_issuer_name)(a);
1060 kdWarning() <<
"X509_get_issuer not defined!" << endl;
1065X509_LOOKUP *KOpenSSLProxy::X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m) {
1066 if (K_X509_STORE_add_lookup)
return (K_X509_STORE_add_lookup)(v,m);
1067 kdWarning() <<
"X509_STORE_add_lookup not defined!" << endl;
1072X509_LOOKUP_METHOD *KOpenSSLProxy::X509_LOOKUP_file(
void) {
1073 if (K_X509_LOOKUP_file)
return (K_X509_LOOKUP_file)();
1074 kdWarning() <<
"X509_LOOKUP_file not defined!" << endl;
1079void KOpenSSLProxy::X509_LOOKUP_free(X509_LOOKUP *x) {
1080 if (K_X509_LOOKUP_free) (K_X509_LOOKUP_free)(x);
1081 else kdWarning() <<
"X509_LOOKUP_free not defined!" << endl;
1085int KOpenSSLProxy::X509_LOOKUP_ctrl(X509_LOOKUP *ctx,
int cmd,
const char *argc,
long argl,
char **ret) {
1086 if (K_X509_LOOKUP_ctrl)
return (K_X509_LOOKUP_ctrl)(ctx,cmd,argc,argl,ret);
1087 kdWarning() <<
"X509_LOOKUP_ctrl not defined!" << endl;
1092void KOpenSSLProxy::X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509, STACK_OF(X509) *chain) {
1093 if (K_X509_STORE_CTX_init) (K_X509_STORE_CTX_init)(ctx,store,x509,chain);
1094 else kdWarning() <<
"X509_STORE_CTX_init not defined!" << endl;
1098void KOpenSSLProxy::CRYPTO_free(
void *x) {
1099 if (K_CRYPTO_free) (K_CRYPTO_free)(x);
1100 else kdWarning() <<
"CRYPTO_free not defined!" << endl;
1104X509 *KOpenSSLProxy::X509_dup(X509 *x509) {
1105 if (K_X509_dup)
return (K_X509_dup)(x509);
1106 kdWarning() <<
"X509_dup not defined!" << endl;
1111void KOpenSSLProxy::X509_get0_signature(
const ASN1_BIT_STRING **psig,
1112 const X509_ALGOR **palg,
const X509 *x) {
1113 if (K_X509_get0_signature) {
1114 (X509_get0_signature)(psig, palg, x);
1117#if OPENSSL_VERSION_NUMBER < 0x10100000L
1119 if (psig) *psig = x->signature;
1120 if (palg) *palg = x->sig_alg;
1123 kdWarning() <<
"X509_get0_signature not defined!" << endl;
1127BIO *KOpenSSLProxy::BIO_new(BIO_METHOD *type) {
1128 if (K_BIO_new)
return (K_BIO_new)(type);
1129 kdWarning() <<
"BIO_new not defined!" << endl;
1134BIO_METHOD *KOpenSSLProxy::BIO_s_mem(
void) {
1135 if (K_BIO_s_mem)
return (K_BIO_s_mem)();
1136 kdWarning() <<
"BIO_s_mem not defined!" << endl;
1141BIO *KOpenSSLProxy::BIO_new_fp(FILE *stream,
int close_flag) {
1142 if (K_BIO_new_fp)
return (K_BIO_new_fp)(stream, close_flag);
1143 kdWarning() <<
"BIO_new_fp not defined!" << endl;
1148BIO *KOpenSSLProxy::BIO_new_mem_buf(
void *buf,
int len) {
1149 if (K_BIO_new_mem_buf)
return (K_BIO_new_mem_buf)(buf,len);
1150 kdWarning() <<
"BIO_new_mem_buf not defined!" << endl;
1155int KOpenSSLProxy::BIO_free(BIO *a) {
1156 if (K_BIO_free)
return (K_BIO_free)(a);
1157 kdWarning() <<
"BIO_free not defined!" << endl;
1162long KOpenSSLProxy::BIO_ctrl(BIO *bp,
int cmd,
long larg,
void *parg) {
1163 if (K_BIO_ctrl)
return (K_BIO_ctrl)(bp,cmd,larg,parg);
1164 kdWarning() <<
"BIO_ctrl not defined!" << endl;
1169int KOpenSSLProxy::BIO_write(BIO *b,
const void *data,
int len) {
1170 if (K_BIO_write)
return (K_BIO_write)(b, data, len);
1171 kdWarning() <<
"BIO_write not defined!" << endl;
1176void *KOpenSSLProxy::BIO_get_data(BIO *a) {
1177 if (K_BIO_get_data)
return (K_BIO_get_data)(a);
1178#if OPENSSL_VERSION_NUMBER < 0x10100000L
1181 kdWarning() <<
"BIO_get_data not defined!" << endl;
1186int KOpenSSLProxy::PEM_write_bio_X509(BIO *bp, X509 *x) {
1187 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);
1188 kdWarning() <<
"PEM_write_bio_X509 not defined!" << endl;
1192#if OPENSSL_VERSION_NUMBER >= 0x10000000L
1193int KOpenSSLProxy::ASN1_i2d_fp(FILE *out,
unsigned char *x) {
1194 if (K_ASN1_item_i2d_fp && K_NETSCAPE_X509_it)
1195 return (K_ASN1_item_i2d_fp)(K_NETSCAPE_X509_it, out, x);
1196 kdWarning() <<
"ANS1_i2d_fp not defined!" << endl;
1200ASN1_METHOD *KOpenSSLProxy::X509_asn1_meth(
void) {
1201 if (K_X509_asn1_meth)
return (K_X509_asn1_meth)();
1202 kdWarning() <<
"X509_ans1_meth not defined!" << endl;
1207int KOpenSSLProxy::ASN1_i2d_fp(FILE *out,
unsigned char *x) {
1208 if (K_ASN1_i2d_fp && K_i2d_ASN1_HEADER)
1209 return (K_ASN1_i2d_fp)((int (*)())K_i2d_ASN1_HEADER, out, x);
1210 kdWarning() <<
"ANS1_i2d_fp not defined!" << endl;
1215int KOpenSSLProxy::X509_print(FILE *fp, X509 *x) {
1216 if (K_X509_print_fp)
return (K_X509_print_fp)(fp, x);
1217 kdWarning() <<
"X509_print not defined!" << endl;
1222PKCS12 *KOpenSSLProxy::d2i_PKCS12_fp(FILE *fp, PKCS12 **p12) {
1223 if (K_d2i_PKCS12_fp)
return (K_d2i_PKCS12_fp)(fp, p12);
1224 kdWarning() <<
"d2i_PKCS12_fp not defined!" << endl;
1229int KOpenSSLProxy::PKCS12_newpass(PKCS12 *p12,
char *oldpass,
char *newpass) {
1230 if (K_PKCS12_newpass)
return (K_PKCS12_newpass)(p12, oldpass, newpass);
1231 kdWarning() <<
"PKCS12_newpass not defined!" << endl;
1236int KOpenSSLProxy::i2d_PKCS12(PKCS12 *p12,
unsigned char **p) {
1237 if (K_i2d_PKCS12)
return (K_i2d_PKCS12)(p12, p);
1238 kdWarning() <<
"i2d_PKCS12 not defined!" << endl;
1243int KOpenSSLProxy::i2d_PKCS12_fp(FILE *fp, PKCS12 *p12) {
1244 if (K_i2d_PKCS12_fp)
return (K_i2d_PKCS12_fp)(fp, p12);
1245 kdWarning() <<
"i2d_PKCS12_fp not defined!" << endl;
1250PKCS12 *KOpenSSLProxy::PKCS12_new(
void) {
1251 if (K_PKCS12_new)
return (K_PKCS12_new)();
1252 kdWarning() <<
"PKCS12_new not defined!" << endl;
1257void KOpenSSLProxy::PKCS12_free(PKCS12 *a) {
1258 if (K_PKCS12_free) (K_PKCS12_free)(a);
1259 else kdWarning() <<
"PKCS12_free not defined!" << endl;
1263int KOpenSSLProxy::PKCS12_parse(PKCS12 *p12,
const char *pass, EVP_PKEY **pkey,
1264 X509 **cert, STACK_OF(X509) **ca) {
1265 if (K_PKCS12_parse)
return (K_PKCS12_parse) (p12, pass, pkey, cert, ca);
1266 kdWarning() <<
"PKCS12_parse not defined!" << endl;
1271void KOpenSSLProxy::EVP_PKEY_free(EVP_PKEY *x) {
1272 if (K_EVP_PKEY_free) (K_EVP_PKEY_free)(x);
1273 else kdWarning() <<
"EVP_PKEY_free not defined!" << endl;
1277EVP_PKEY* KOpenSSLProxy::EVP_PKEY_new() {
1278 if (K_EVP_PKEY_new)
return (K_EVP_PKEY_new)();
1279 kdWarning() <<
"EVP_PKEY_new not defined!" << endl;
1284int KOpenSSLProxy::EVP_PKEY_base_id(
const EVP_PKEY *pkey) {
1285 if (K_EVP_PKEY_base_id)
return (K_EVP_PKEY_base_id)(pkey);
1286#if OPENSSL_VERSION_NUMBER < 0x10100000L
1289 kdWarning() <<
"EVP_PKEY_base_id not defined!" << endl;
1294RSA* KOpenSSLProxy::EVP_PKEY_get0_RSA(EVP_PKEY *pkey) {
1295 if (K_EVP_PKEY_get0_RSA)
return (K_EVP_PKEY_get0_RSA)(pkey);
1296#if OPENSSL_VERSION_NUMBER < 0x10100000L
1297 return pkey->pkey.rsa;
1299 kdWarning() <<
"EVP_PKEY_get0_RSA not defined!" << endl;
1304DSA* KOpenSSLProxy::EVP_PKEY_get0_DSA(EVP_PKEY *pkey) {
1305 if (K_EVP_PKEY_get0_DSA)
return (K_EVP_PKEY_get0_DSA)(pkey);
1306#if OPENSSL_VERSION_NUMBER < 0x10100000L
1307 return pkey->pkey.dsa;
1309 kdWarning() <<
"EVP_PKEY_get0_DSA not defined!" << endl;
1314void KOpenSSLProxy::X509_REQ_free(X509_REQ *x) {
1315 if (K_X509_REQ_free) (K_X509_REQ_free)(x);
1316 else kdWarning() <<
"X509_REQ_free not defined!" << endl;
1320X509_REQ* KOpenSSLProxy::X509_REQ_new() {
1321 if (K_X509_REQ_new)
return (K_X509_REQ_new)();
1322 kdWarning() <<
"X509_REQ_new not defined!" << endl;
1327int KOpenSSLProxy::SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) {
1328 if (K_SSL_CTX_use_PrivateKey)
return (K_SSL_CTX_use_PrivateKey)(ctx,pkey);
1329 kdWarning() <<
"SSL_CTX_use_PrivateKey not defined!" << endl;
1334int KOpenSSLProxy::SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) {
1335 if (K_SSL_CTX_use_certificate)
return (K_SSL_CTX_use_certificate)(ctx,x);
1336 kdWarning() <<
"SSL_CTX_use_certificate not defined!" << endl;
1341int KOpenSSLProxy::SSL_get_error(SSL *ssl,
int rc) {
1342 if (K_SSL_get_error)
return (K_SSL_get_error)(ssl,rc);
1343 kdWarning() <<
"SSL_get_error not defined!" << endl;
1348STACK_OF(X509) *KOpenSSLProxy::SSL_get_peer_cert_chain(SSL *s) {
1349 if (K_SSL_get_peer_cert_chain)
return (K_SSL_get_peer_cert_chain)(s);
1350 kdWarning() <<
"SSL_get_peer_cert_chain not defined!" << endl;
1355void KOpenSSLProxy::OPENSSL_sk_free(STACK *s) {
1356 if (K_sk_free) (K_sk_free)(s);
1357 else kdWarning() <<
"OPENSSL_sk_free not defined!" << endl;
1361int KOpenSSLProxy::OPENSSL_sk_num(STACK *s) {
1362 if (K_sk_num)
return (K_sk_num)(s);
1363 kdWarning() <<
"OPENSSL_sk_num not defined!" << endl;
1368char *KOpenSSLProxy::OPENSSL_sk_pop(STACK *s) {
1369 if (K_sk_pop)
return (K_sk_pop)(s);
1370 kdWarning() <<
"OPENSSL_sk_pop not defined!" << endl;
1375char *KOpenSSLProxy::OPENSSL_sk_value(STACK *s,
int n) {
1376 if (K_sk_value)
return (K_sk_value)(s, n);
1377 kdWarning() <<
"OPENSSL_sk_value not defined!" << endl;
1382void KOpenSSLProxy::X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *v, STACK_OF(X509)* x) {
1383 if (K_X509_STORE_CTX_set0_untrusted) (K_X509_STORE_CTX_set0_untrusted)(v,x);
1384 else kdWarning() <<
"X509_STORE_CTX_set0_untrusted not defined!" << endl;
1387void KOpenSSLProxy::X509_STORE_CTX_set_purpose(X509_STORE_CTX *v,
int purpose) {
1388 if (K_X509_STORE_CTX_set_purpose) (K_X509_STORE_CTX_set_purpose)(v,purpose);
1389 else kdWarning() <<
"X509_STORE_CTX_set_purpose not defined!" << endl;
1393STACK* KOpenSSLProxy::OPENSSL_sk_dup(
const STACK *s) {
1394 if (K_sk_dup)
return (K_sk_dup)(s);
1395 kdWarning() <<
"OPENSSL_sk_dup not defined!" << endl;
1400STACK* KOpenSSLProxy::OPENSSL_sk_new(
int (*cmp)()) {
1401 if (K_sk_new)
return (K_sk_new)(cmp);
1402 kdWarning() <<
"OPENSSL_sk_new not defined!" << endl;
1407int KOpenSSLProxy::OPENSSL_sk_push(STACK* s,
char* d) {
1408 if (K_sk_push)
return (K_sk_push)(s,d);
1409 kdWarning() <<
"OPENSSL_sk_push not defined!" << endl;
1414char *KOpenSSLProxy::i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint) {
1415 if (K_i2s_ASN1_INTEGER)
return (K_i2s_ASN1_INTEGER)(meth, aint);
1416 kdWarning() <<
"i2s_ANS1_INTEGER not defined!" << endl;
1421ASN1_INTEGER *KOpenSSLProxy::X509_get_serialNumber(X509 *x) {
1422 if (K_X509_get_serialNumber)
return (K_X509_get_serialNumber)(x);
1423 kdWarning() <<
"X509_get_serialNumber not defined!" << endl;
1428EVP_PKEY *KOpenSSLProxy::X509_get_pubkey(X509 *x) {
1429 if (K_X509_get_pubkey)
return (K_X509_get_pubkey)(x);
1430 kdWarning() <<
"X59_get_pubkey not defined!" << endl;
1435int KOpenSSLProxy::i2d_PublicKey(EVP_PKEY *a,
unsigned char **pp) {
1436 if (K_i2d_PublicKey)
return (K_i2d_PublicKey)(a,pp);
1437 kdWarning() <<
"i2d_PublicKey not defined!" << endl;
1442int KOpenSSLProxy::X509_check_private_key(X509 *x, EVP_PKEY *p) {
1443 if (K_X509_check_private_key)
return (K_X509_check_private_key)(x,p);
1444 kdWarning() <<
"X509_check_private_key not defined!" << endl;
1449char *KOpenSSLProxy::BN_bn2hex(
const BIGNUM *a) {
1450 if (K_BN_bn2hex)
return (K_BN_bn2hex)(a);
1451 kdWarning() <<
"BN_bn2hex not defined!" << endl;
1456int KOpenSSLProxy::X509_digest(
const X509 *x,
const EVP_MD *t,
unsigned char *md,
unsigned int *len) {
1457 if (K_X509_digest)
return (K_X509_digest)(x, t, md, len);
1458 kdWarning() <<
"X509_digest not defined!" << endl;
1463EVP_MD *KOpenSSLProxy::EVP_md5() {
1464 if (K_EVP_md5)
return (K_EVP_md5)();
1465 kdWarning() <<
"EVP_md5 not defined!" << endl;
1470void KOpenSSLProxy::ASN1_INTEGER_free(ASN1_INTEGER *a) {
1471 if (K_ASN1_INTEGER_free) (K_ASN1_INTEGER_free)(a);
1472 else kdWarning() <<
"ANS1_INTEGER_free not defined!" << endl;
1476int KOpenSSLProxy::OBJ_obj2nid(ASN1_OBJECT *o) {
1477 if (K_OBJ_obj2nid)
return (K_OBJ_obj2nid)(o);
1478 kdWarning() <<
"OBJ_obj2nid not defined!" << endl;
1483const char * KOpenSSLProxy::OBJ_nid2ln(
int n) {
1484 if (K_OBJ_nid2ln)
return (K_OBJ_nid2ln)(n);
1485 kdWarning() <<
"OBJ_nid2ln not defined!" << endl;
1490int KOpenSSLProxy::X509_get_ext_count(X509 *x) {
1491 if (K_X509_get_ext_count)
return (K_X509_get_ext_count)(x);
1492 kdWarning() <<
"X509_get_ext_count not defined!" << endl;
1497int KOpenSSLProxy::X509_get_ext_by_NID(X509 *x,
int nid,
int lastpos) {
1498 if (K_X509_get_ext_by_NID)
return (K_X509_get_ext_by_NID)(x,nid,lastpos);
1499 kdWarning() <<
"X509_get_ext_by_NID not defined!" << endl;
1504int KOpenSSLProxy::X509_get_ext_by_OBJ(X509 *x,ASN1_OBJECT *obj,
int lastpos) {
1505 if (K_X509_get_ext_by_OBJ)
return (K_X509_get_ext_by_OBJ)(x,obj,lastpos);
1506 kdWarning() <<
"X509_get_ext_by_OBJ not defined!" << endl;
1511X509_EXTENSION *KOpenSSLProxy::X509_get_ext(X509 *x,
int loc) {
1512 if (K_X509_get_ext)
return (K_X509_get_ext)(x,loc);
1513 kdWarning() <<
"X509_get_ext not defined!" << endl;
1518X509_EXTENSION *KOpenSSLProxy::X509_delete_ext(X509 *x,
int loc) {
1519 if (K_X509_delete_ext)
return (K_X509_delete_ext)(x,loc);
1520 kdWarning() <<
"X509_delete_ext not defined!" << endl;
1525int KOpenSSLProxy::X509_add_ext(X509 *x, X509_EXTENSION *ex,
int loc) {
1526 if (K_X509_add_ext)
return (K_X509_add_ext)(x,ex,loc);
1527 kdWarning() <<
"X509_add_ext not defined!" << endl;
1532void *KOpenSSLProxy::X509_get_ext_d2i(X509 *x,
int nid,
int *crit,
int *idx) {
1533 if (K_X509_get_ext_d2i)
return (K_X509_get_ext_d2i)(x,nid,crit,idx);
1534 kdWarning() <<
"X509_get_ext_d2i not defined!" << endl;
1539char *KOpenSSLProxy::i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *ia5) {
1540 if (K_i2s_ASN1_OCTET_STRING)
return (K_i2s_ASN1_OCTET_STRING)(method,ia5);
1541 kdWarning() <<
"i2s_ANS1_OCTET_STRING not defined!" << endl;
1546int KOpenSSLProxy::ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a,
int n) {
1547 if (K_ASN1_BIT_STRING_get_bit)
return (K_ASN1_BIT_STRING_get_bit)(a,n);
1548 kdWarning() <<
"ANS1_BIT_STRING_get_bit not defined!" << endl;
1553PKCS7 *KOpenSSLProxy::PKCS7_new(
void) {
1554 if (K_PKCS7_new)
return (K_PKCS7_new)();
1555 kdWarning() <<
"PKCS7_new not defined!" << endl;
1560void KOpenSSLProxy::PKCS7_free(PKCS7 *a) {
1561 if (K_PKCS7_free) (K_PKCS7_free)(a);
1562 else kdWarning() <<
"PKCS7_free not defined!" << endl;
1566void KOpenSSLProxy::PKCS7_content_free(PKCS7 *a) {
1567 if (K_PKCS7_content_free) (K_PKCS7_content_free)(a);
1568 else kdWarning() <<
"PKCS7_content_free not defined!" << endl;
1572int KOpenSSLProxy::i2d_PKCS7(PKCS7 *a,
unsigned char **pp) {
1573 if (K_i2d_PKCS7)
return (K_i2d_PKCS7)(a,pp);
1574 kdWarning() <<
"i2d_PKCS7 not defined!" << endl;
1579PKCS7 *KOpenSSLProxy::d2i_PKCS7(PKCS7 **a,
unsigned char **pp,
long length) {
1580 if (K_d2i_PKCS7)
return (K_d2i_PKCS7)(a,pp,length);
1581 kdWarning() <<
"d2i_PKCS7 not defined!" << endl;
1586int KOpenSSLProxy::i2d_PKCS7_fp(FILE *fp,PKCS7 *p7) {
1587 if (K_i2d_PKCS7_fp)
return (K_i2d_PKCS7_fp)(fp,p7);
1588 kdWarning() <<
"i2d_PKCS7_fd not defined!" << endl;
1593PKCS7 *KOpenSSLProxy::d2i_PKCS7_fp(FILE *fp,PKCS7 **p7) {
1594 if (K_d2i_PKCS7_fp)
return (K_d2i_PKCS7_fp)(fp,p7);
1595 kdWarning() <<
"d2i_PKCS7_fp not defined!" << endl;
1600int KOpenSSLProxy::i2d_PKCS7_bio(BIO *bp,PKCS7 *p7) {
1601 if (K_i2d_PKCS7_bio)
return (K_i2d_PKCS7_bio)(bp, p7);
1602 kdWarning() <<
"i2d_PKCS7_bio not defined!" << endl;
1607PKCS7 *KOpenSSLProxy::d2i_PKCS7_bio(BIO *bp,PKCS7 **p7) {
1608 if (K_d2i_PKCS7_bio)
return (K_d2i_PKCS7_bio)(bp, p7);
1609 kdWarning() <<
"d2i_PKCS7_bio not defined!" << endl;
1614PKCS7 *KOpenSSLProxy::PKCS7_dup(PKCS7 *p7) {
1615 if (K_PKCS7_dup)
return (K_PKCS7_dup)(p7);
1616 kdWarning() <<
"PKCS7_dup not defined!" << endl;
1621PKCS7 *KOpenSSLProxy::PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
1622 BIO *data,
int flags) {
1623 if (K_PKCS7_sign)
return (K_PKCS7_sign)(signcert,pkey,certs,data,flags);
1624 kdWarning() <<
"PKCS7_sign not defined!" << endl;
1629int KOpenSSLProxy::PKCS7_verify(PKCS7* p, STACK_OF(X509)* st, X509_STORE* s, BIO* in, BIO *out,
int flags) {
1630 if (K_PKCS7_verify)
return (K_PKCS7_verify)(p,st,s,in,out,flags);
1631 kdWarning() <<
"PKCS7_verify not defined!" << endl;
1636STACK_OF(X509) *KOpenSSLProxy::PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs,
int flags) {
1637 if (K_PKCS7_get0_signers)
return (K_PKCS7_get0_signers)(p7,certs,flags);
1638 kdWarning() <<
"PKCS7_get0_signers not defined!" << endl;
1643PKCS7 *KOpenSSLProxy::PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, EVP_CIPHER *cipher,
1645 if (K_PKCS7_encrypt)
return (K_PKCS7_encrypt)(certs,in,cipher,flags);
1646 kdWarning() <<
"PKCS7_encrypt not defined!" << endl;
1651int KOpenSSLProxy::PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data,
int flags) {
1652 if (K_PKCS7_decrypt)
return (K_PKCS7_decrypt)(p7,pkey,cert,data,flags);
1653 kdWarning() <<
"PKCS7_decrypt not defined!" << endl;
1658STACK_OF(X509_NAME) *KOpenSSLProxy::SSL_load_client_CA_file(
const char *file) {
1659 if (K_SSL_load_client_CA_file)
return (K_SSL_load_client_CA_file)(file);
1660 kdWarning() <<
"SSL_load_client_CA_file not defined!" << endl;
1665STACK_OF(X509_INFO) *KOpenSSLProxy::PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb,
void *u) {
1666 if (K_PEM_X509_INFO_read)
return (K_PEM_X509_INFO_read)(fp,sk,cb,u);
1667 kdWarning() <<
"PEM_X509_INFO_read not defined!" << endl;
1672X509 *KOpenSSLProxy::X509_d2i_fp(FILE *out, X509** buf) {
1673 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)));
1674 kdWarning() <<
"X509_d2i_fp not defined!" << endl;
1679int KOpenSSLProxy::SSL_peek(SSL *ssl,
void *buf,
int num) {
1680 if (K_SSL_peek)
return (K_SSL_peek)(ssl,buf,num);
1681 kdWarning() <<
"SSL_peek not defined!" << endl;
1686const char *KOpenSSLProxy::RAND_file_name(
char *buf,
size_t num) {
1687 if (K_RAND_file_name)
return (K_RAND_file_name)(buf, num);
1688 kdWarning() <<
"RAND_file_name not defined!" << endl;
1693int KOpenSSLProxy::RAND_load_file(
const char *filename,
long max_bytes) {
1694 if (K_RAND_load_file)
return (K_RAND_load_file)(filename, max_bytes);
1695 kdWarning() <<
"REND_load_file not defined!" << endl;
1700int KOpenSSLProxy::RAND_write_file(
const char *filename) {
1701 if (K_RAND_write_file)
return (K_RAND_write_file)(filename);
1702 kdWarning() <<
"RAND_write_file not defined!" << endl;
1707int KOpenSSLProxy::X509_PURPOSE_get_count() {
1708 if (K_X509_PURPOSE_get_count)
return (K_X509_PURPOSE_get_count)();
1709 kdWarning() <<
"X509_PURPOSE_get_count not defined!" << endl;
1714int KOpenSSLProxy::X509_PURPOSE_get_id(X509_PURPOSE *p) {
1715 if (K_X509_PURPOSE_get_id)
return (K_X509_PURPOSE_get_id)(p);
1716 kdWarning() <<
"X509_PURPOSE_get_id not defined!" << endl;
1721int KOpenSSLProxy::X509_check_purpose(X509 *x,
int id,
int ca) {
1722 if (K_X509_check_purpose)
return (K_X509_check_purpose)(x, id, ca);
1723 kdWarning() <<
"X509_check_purpose not defined!" << endl;
1728X509_PURPOSE *KOpenSSLProxy::X509_PURPOSE_get0(
int idx) {
1729 if (K_X509_PURPOSE_get0)
return (K_X509_PURPOSE_get0)(idx);
1730 kdWarning() <<
"X509_PURPOSE_get0 not defined!" << endl;
1735int KOpenSSLProxy::EVP_PKEY_assign(EVP_PKEY *pkey,
int type,
char *key) {
1736 if (K_EVP_PKEY_assign)
return (K_EVP_PKEY_assign)(pkey, type, key);
1737 kdWarning() <<
"EVP_PKEY_assign not defined!" << endl;
1742int KOpenSSLProxy::X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey) {
1743 if (K_X509_REQ_set_pubkey)
return (K_X509_REQ_set_pubkey)(x, pkey);
1744 kdWarning() <<
"X509_REQ_set_pubkey not defined!" << endl;
1749void KOpenSSLProxy::RSA_get0_key(
const RSA *r,
1750 const BIGNUM **n,
const BIGNUM **e,
const BIGNUM **d) {
1751 if (K_RSA_get0_key) {
1752 (K_RSA_get0_key)(r, n, e, d);
1755#if OPENSSL_VERSION_NUMBER < 0x10100000L
1762 kdWarning() <<
"REG_get0_key not defined!" << endl;
1766RSA* KOpenSSLProxy::RSA_generate_key(
int bits,
unsigned long e,
void
1767 (*callback)(
int,
int,
void *),
void *cb_arg) {
1768 if (K_RSA_generate_key)
return (K_RSA_generate_key)(bits, e, callback, cb_arg);
1769 kdWarning() <<
"RSA_generate_key not defined!" << endl;
1774void KOpenSSLProxy::DSA_get0_pqg(
const DSA *d,
1775 const BIGNUM **p,
const BIGNUM **q,
const BIGNUM **g) {
1776 if (K_DSA_get0_pqg) {
1777 (K_DSA_get0_pqg)(d, p, q, g);
1780#if OPENSSL_VERSION_NUMBER < 0x10100000L
1787 kdWarning() <<
"DSA_get0_pqg not defined!" << endl;
1791void KOpenSSLProxy::DSA_get0_key(
const DSA *d,
1792 const BIGNUM **pub_key,
const BIGNUM **priv_key) {
1793 if (K_DSA_get0_key) {
1794 (K_DSA_get0_key)(d, pub_key, priv_key);
1797#if OPENSSL_VERSION_NUMBER < 0x10100000L
1799 if (pub_key) *pub_key = d->pub_key;
1800 if (priv_key) *priv_key = d->priv_key;
1803 kdWarning() <<
"DSA_get0_key not defined!" << endl;
1807STACK *KOpenSSLProxy::X509_get1_email(X509 *x) {
1808 if (K_X509_get1_email)
return (K_X509_get1_email)(x);
1809 kdWarning() <<
"X509_get1_email not defined!" << endl;
1813void KOpenSSLProxy::X509_email_free(STACK *sk) {
1814 if (K_X509_email_free) (K_X509_email_free)(sk);
1815 else kdWarning() <<
"X509_email_free not defined!" << endl;
1818EVP_CIPHER *KOpenSSLProxy::EVP_des_ede3_cbc() {
1819 if (K_EVP_des_ede3_cbc)
return (K_EVP_des_ede3_cbc)();
1820 kdWarning() <<
"EVM_des_ede3_cbc not defined!" << endl;
1824EVP_CIPHER *KOpenSSLProxy::EVP_des_cbc() {
1825 if (K_EVP_des_cbc)
return (K_EVP_des_cbc)();
1826 kdWarning() <<
"EVP_des_cbc not defined!" << endl;
1830EVP_CIPHER *KOpenSSLProxy::EVP_rc2_cbc() {
1831 if (K_EVP_rc2_cbc)
return (K_EVP_rc2_cbc)();
1832 kdWarning() <<
"EVP_rc2_cbc not defined!" << endl;
1836EVP_CIPHER *KOpenSSLProxy::EVP_rc2_64_cbc() {
1837 if (K_EVP_rc2_64_cbc)
return (K_EVP_rc2_64_cbc)();
1838 kdWarning() <<
"EVP_rc2_64_cbc not defined!" << endl;
1842EVP_CIPHER *KOpenSSLProxy::EVP_rc2_40_cbc() {
1843 if (K_EVP_rc2_40_cbc)
return (K_EVP_rc2_40_cbc)();
1844 kdWarning() <<
"EVP_rc2_40_cbc not defined!" << endl;
1848int KOpenSSLProxy::i2d_X509_REQ_fp(FILE *fp, X509_REQ *x) {
1849 if (K_i2d_X509_REQ_fp)
return (K_i2d_X509_REQ_fp)(fp,x);
1850 kdWarning() <<
"i2d_X509_REQ_fp not defined!" << endl;
1855void KOpenSSLProxy::ERR_clear_error() {
1856 if (K_ERR_clear_error) (K_ERR_clear_error)();
1857 else kdWarning() <<
"ERR_clear_error not defined!" << endl;
1861unsigned long KOpenSSLProxy::ERR_get_error() {
1862 if (K_ERR_get_error)
return (K_ERR_get_error)();
1863 kdWarning() <<
"ERR_get_error not defined!" << endl;
1868void KOpenSSLProxy::ERR_print_errors_fp(FILE* fp) {
1869 if (K_ERR_print_errors_fp) (K_ERR_print_errors_fp)(fp);
1870 else kdWarning() <<
"ERR_print_errors_fp not defined!" << endl;
1874SSL_SESSION *KOpenSSLProxy::SSL_get1_session(SSL *ssl) {
1875 if (K_SSL_get1_session)
return (K_SSL_get1_session)(ssl);
1876 kdWarning() <<
"SSL_get1_session not defined!" << endl;
1881void KOpenSSLProxy::SSL_SESSION_free(SSL_SESSION *session) {
1882 if (K_SSL_SESSION_free) (K_SSL_SESSION_free)(session);
1883 else kdWarning() <<
"SSL_SESSION_free not defined!" << endl;
1887int KOpenSSLProxy::SSL_set_session(SSL *ssl, SSL_SESSION *session) {
1888 if (K_SSL_set_session)
return (K_SSL_set_session)(ssl, session);
1889 kdWarning() <<
"SSL_set_session not defined!" << endl;
1894SSL_SESSION *KOpenSSLProxy::d2i_SSL_SESSION(SSL_SESSION **a,
unsigned char **pp,
long length) {
1895 if (K_d2i_SSL_SESSION)
return (K_d2i_SSL_SESSION)(a, pp, length);
1896 kdWarning() <<
"d2i_SSL_SESSION not defined!" << endl;
1901int KOpenSSLProxy::i2d_SSL_SESSION(SSL_SESSION *in,
unsigned char **pp) {
1902 if (K_i2d_SSL_SESSION)
return (K_i2d_SSL_SESSION)(in, pp);
1903 kdWarning() <<
"i2d_SSL_SESSION not defined!" << endl;
1908int KOpenSSLProxy::i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *p) {
1909 if (K_i2d_PrivateKey_fp)
return (K_i2d_PrivateKey_fp)(fp, p);
1910 kdWarning() <<
"i2d_PrivateKey not defined!" << endl;
1915int KOpenSSLProxy::i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *p,
const EVP_CIPHER *c,
char *k,
int klen, pem_password_cb *cb,
void *u) {
1916 if (K_i2d_PKCS8PrivateKey_fp)
return (K_i2d_PKCS8PrivateKey_fp)(fp, p, c, k, klen, cb, u);
1917 kdWarning() <<
"i2d_PKCS8PrivateKey_fp not defined!" << endl;
1922void KOpenSSLProxy::RSA_free(RSA *rsa) {
1923 if (K_RSA_free) (K_RSA_free)(rsa);
1924 else kdWarning() <<
"RSA_free not defined!" << endl;
1928EVP_CIPHER *KOpenSSLProxy::EVP_bf_cbc() {
1929 if (K_EVP_bf_cbc)
return (K_EVP_bf_cbc)();
1930 kdWarning() <<
"EVP_bf_cbc not defined!" << endl;
1935int KOpenSSLProxy::X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey,
const EVP_MD *md) {
1936 if (K_X509_REQ_sign)
return (K_X509_REQ_sign)(x, pkey, md);
1937 kdWarning() <<
"X509_REQ_sign not defined!" << endl;
1942int KOpenSSLProxy::X509_NAME_add_entry_by_txt(X509_NAME *name,
char *field,
1943 int type,
unsigned char *bytes,
int len,
int loc,
int set) {
1944 if (K_X509_NAME_add_entry_by_txt)
return (K_X509_NAME_add_entry_by_txt)(name, field, type, bytes, len, loc, set);
1945 kdWarning() <<
"X509_NAME_add_entry not defined!" << endl;
1950X509_NAME *KOpenSSLProxy::X509_NAME_new() {
1951 if (K_X509_NAME_new)
return (K_X509_NAME_new)();
1952 kdWarning() <<
"X509_NAME_new not defined!" << endl;
1957int KOpenSSLProxy::X509_REQ_set_subject_name(X509_REQ *req,X509_NAME *name) {
1958 if (K_X509_REQ_set_subject_name)
return (K_X509_REQ_set_subject_name)(req, name);
1959 kdWarning() <<
"X509_REQ_set_subject_name not defined!" << endl;
1964unsigned char *KOpenSSLProxy::ASN1_STRING_data(ASN1_STRING *x) {
1965 if (K_ASN1_STRING_data)
return (K_ASN1_STRING_data)(x);
1966 kdWarning() <<
"ASN1_STRING_data not defined!" << endl;
1970int KOpenSSLProxy::ASN1_STRING_length(ASN1_STRING *x) {
1971 if (K_ASN1_STRING_length)
return (K_ASN1_STRING_length)(x);
1972 kdWarning() <<
"ASN1_STRING_length not defined!" << endl;
1976STACK_OF(SSL_CIPHER) *KOpenSSLProxy::SSL_get_ciphers(
const SSL* ssl) {
1977 if (K_SSL_get_ciphers)
return (K_SSL_get_ciphers)(ssl);
1978 kdWarning() <<
"SSL_get_ciphers not defined!" << endl;
1982const ASN1_TIME* KOpenSSLProxy::X509_CRL_get0_lastUpdate(
const X509_CRL *crl) {
1983 if (K_X509_CRL_get0_lastUpdate)
return (K_X509_CRL_get0_lastUpdate)(crl);
1984#if OPENSSL_VERSION_NUMBER < 0x10100000L
1985 return X509_CRL_get_lastUpdate(crl);
1987 kdWarning() <<
"X509_CRL_get_lastUpdate not defined!" << endl;
1991const ASN1_TIME* KOpenSSLProxy::X509_CRL_get0_nextUpdate(
const X509_CRL *crl) {
1992 if (K_X509_CRL_get0_nextUpdate)
return (K_X509_CRL_get0_nextUpdate)(crl);
1993#if OPENSSL_VERSION_NUMBER < 0x10100000L
1994 return X509_CRL_get_nextUpdate(crl);
1996 kdWarning() <<
"X509_CRL_get_nextUpdate not defined!" << endl;
2000X509* KOpenSSLProxy::X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx) {
2001 if (K_X509_STORE_CTX_get_current_cert)
return (K_X509_STORE_CTX_get_current_cert)(ctx);
2002#if OPENSSL_VERSION_NUMBER < 0x10100000L
2003 return ctx->current_cert;
2005 kdWarning() <<
"X509_STORE_CTX_get_current_cert not defined!" << endl;
2009int KOpenSSLProxy::X509_STORE_CTX_get_error(X509_STORE_CTX *ctx) {
2010 if (K_X509_STORE_CTX_get_error)
return (K_X509_STORE_CTX_get_error)(ctx);
2011#if OPENSSL_VERSION_NUMBER < 0x10100000L
2014 kdWarning() <<
"X509k_STORE_CTX_get_error not defined!" << endl;
2018int KOpenSSLProxy::X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx) {
2019 if (K_X509_STORE_CTX_get_error_depth)
return (K_X509_STORE_CTX_get_error_depth)(ctx);
2020#if OPENSSL_VERSION_NUMBER < 0x10100000L
2021 return ctx->error_depth;
2023 kdWarning() <<
"X509_STORE_CTX_get_error_depth not defined!" << endl;
2027void KOpenSSLProxy::X509_STORE_CTX_set_error(X509_STORE_CTX *ctx,
int s) {
2028 if (K_X509_STORE_CTX_set_error) {
2029 (K_X509_STORE_CTX_set_error)(ctx, s);
2032#if OPENSSL_VERSION_NUMBER < 0x10100000L
2036 kdWarning() <<
"X509_STORE_CTX_set_error not defined!" << endl;
2039void KOpenSSLProxy::X509_STORE_set_verify_cb(X509_STORE *ctx,
2040 X509_STORE_CTX_verify_cb verify_cb) {
2041 if (K_X509_STORE_set_verify_cb) {
2042 (K_X509_STORE_set_verify_cb)(ctx, verify_cb);
2045#if OPENSSL_VERSION_NUMBER < 0x10100000L
2046 X509_STORE_set_verify_cb_func(ctx, verify_cb);
2049 kdWarning() <<
"X590_STORE_set_verify_cb not defined!" << endl;
2052STACK_OF(X509_OBJECT)* KOpenSSLProxy::X509_STORE_get0_objects(X509_STORE *v) {
2053 if (K_X509_STORE_get0_objects)
return (K_X509_STORE_get0_objects)(v);
2054#if OPENSSL_VERSION_NUMBER < 0x10100000L
2057 kdWarning() <<
"X509_STORE_get0_objects not defined!" << endl;
2061X509_LOOKUP_TYPE KOpenSSLProxy::X509_OBJECT_get_type(
const X509_OBJECT *a) {
2062 if (K_X509_OBJECT_get_type)
return (K_X509_OBJECT_get_type)(a);
2063#if OPENSSL_VERSION_NUMBER < 0x10100000L
2066 kdWarning() <<
"X509_OBJECT_get_type not defined!" << endl;
2067#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
2068 return X509_LU_NONE;
2074X509* KOpenSSLProxy::X509_OBJECT_get0_X509(
const X509_OBJECT *a) {
2075 if (K_X509_OBJECT_get0_X509)
return (K_X509_OBJECT_get0_X509)(a);
2076#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
2077 return a->data.x509;
2079 kdWarning() <<
"X509_OBJECT_get0_X509 not defined!" << endl;
2084ASN1_TIME* KOpenSSLProxy::X509_getm_notAfter(
const X509 *x) {
2085 if (K_X509_getm_notAfter)
return (K_X509_getm_notAfter)(x);
2086#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
2087 return X509_get_notAfter(x);
2089 kdWarning() <<
"X509_get_notAfter not defined!" << endl;
2093ASN1_TIME* KOpenSSLProxy::X509_getm_notBefore(
const X509 *x) {
2094 if (K_X509_getm_notBefore)
return (K_X509_getm_notBefore)(x);
2095#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
2096 return X509_get_notBefore(x);
2098 kdWarning() <<
"X509_get_notBefore not defined!" << endl;
2103STACK* KOpenSSLProxy::sk_dup(
const STACK *s) {
2104 return OPENSSL_sk_dup(s);
2107void KOpenSSLProxy::sk_free(STACK *s) {
2111STACK* KOpenSSLProxy::sk_new(
int (*cmp)()) {
2112 return OPENSSL_sk_new(cmp);
2115int KOpenSSLProxy::sk_num(STACK *s) {
2116 return OPENSSL_sk_num(s);
2119char* KOpenSSLProxy::sk_pop(STACK *s) {
2120 return OPENSSL_sk_pop(s);
2123int KOpenSSLProxy::sk_push(STACK *s,
char *d) {
2124 return OPENSSL_sk_push(s, d);
2127char* KOpenSSLProxy::sk_value(STACK *s,
int n) {
2128 return OPENSSL_sk_value(s, n);
2131void KOpenSSLProxy::X509_STORE_CTX_set_chain(X509_STORE_CTX *v, STACK_OF(X509)* x) {
2132 X509_STORE_CTX_set0_untrusted(v, x);
2135SSL_METHOD* KOpenSSLProxy::SSLv23_client_method() {
2136 return TLS_client_method();
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.