From 1383a0f1b5d83f61c084f1ed0b9c143ba846adb3 Mon Sep 17 00:00:00 2001 From: Ada Lovelace Date: Wed, 8 Jul 2015 16:39:52 -0600 Subject: [PATCH] Uptodate wolfssl works with lighttpd-1.4.x (one warning), working on making lighttpd-1.4.35 work. --- src/ssl.c | 145 ++++++++++++++++++++++++++++++++++++++++++ wolfssl/openssl/dh.h | 4 ++ wolfssl/openssl/ssl.h | 33 +++++++++- wolfssl/ssl.h | 55 +++++++++++++++- 4 files changed, 234 insertions(+), 3 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 64947d9c5..342ea54f7 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -15133,3 +15133,148 @@ void* wolfSSL_GetRsaDecCtx(WOLFSSL* ssl) void wolfSSL_cert_service(void) {} #endif + +#ifdef OPENSSL_EXTRA /*Lighttp compatibility*/ +#ifdef HAVE_LIGHTY + + unsigned char *wolfSSL_SHA1(const unsigned char *d, size_t n, unsigned char *md) + { + (void) *d; (void) n; (void) *md; + return NULL; + } + + char WOLFSSL_CTX_use_certificate(WOLFSSL_CTX *ctx, WOLFSSL_X509 *x) { + (void)ctx; + (void)x; + + return 0; + } + + int WOLFSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey) { + (void)ctx; + (void)pkey; + + return 0; + } + + WOLFSSL_BIO *wolfSSL_BIO_new_file(const char *filename, const char *mode) { + (void)filename; + (void)mode; + + return NULL; + } + + int wolfSSL_BIO_read_filename(WOLFSSL_BIO *b, const char *name) { + (void)b; + (void)name; + + return 0; + } + + WOLFSSL_BIO_METHOD* WOLFSSL_BIO_s_file(void) { + return NULL; + } + + const char * wolf_OBJ_nid2sn(int n) { + (void)n; + + return 0; + } + + int wolf_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o) { + (void)o; + + return 0; + } + + int wolf_OBJ_sn2nid(const char *sn) { + (void)sn; + + return 0; + } + + WOLFSSL_DH *PEM_read_bio_DHparams(WOLFSSL_BIO *bp, WOLFSSL_DH **x, pem_password_cb *cb, void *u) { + (void)bp; + (void)x; + (void)cb; + (void)u; + + return NULL; + } + + WOLFSSL_X509 *PEM_read_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u) { + (void)bp; + (void)x; + (void)cb; + (void)u; + + return NULL; + } + + int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x) { + (void)bp; + (void)x; + + return 0; + } + + long WOLFSSL_CTX_set_tmp_dh(WOLFSSL_CTX *ctx, WOLFSSL_DH *dh) { + (void)ctx; + (void)dh; + + return 0; + } + + void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth) { + (void)ctx; + (void)depth; + } + + void* WOLFSSL_get_app_data( const WOLFSSL *ssl) { + //checkout exdata stuff... + (void)ssl; + + return 0; + } + + void WOLFSSL_set_app_data(WOLFSSL *ssl, void *arg) { + (void)ssl; + (void)arg; + } + + WOLFSSL_ASN1_OBJECT * WOLFSSL_X509_NAME_ENTRY_get_object(WOLFSSL_X509_NAME_ENTRY *ne) { + (void)ne; + + return NULL; + } + + WOLFSSL_X509_NAME_ENTRY *WOLFSSL_X509_NAME_get_entry(WOLFSSL_X509_NAME *name, int loc) { + (void)name; + (void)loc; + + return NULL; + } + + void WOLFSSL_X509_NAME_free(WOLFSSL_X509_NAME *name){ + FreeX509Name(name); + } + + void wolfSSL_sk_X509_NAME_pop_free(STACK_OF(WOLFSSL_X509_NAME)* sk, void f (WOLFSSL_X509_NAME*)){ + (void) sk; + (void) f; + } + + int wolfSSL_X509_check_private_key(WOLFSSL_X509 *x509, WOLFSSL_EVP_PKEY *key){ + (void) x509; + (void) key; + return 0; + } + + STACK_OF(WOLFSSL_X509_NAME) *wolfSSL_dup_CA_list( STACK_OF(WOLFSSL_X509_NAME) *sk ){ + (void) sk; + return NULL; + } + +#endif +#endif + diff --git a/wolfssl/openssl/dh.h b/wolfssl/openssl/dh.h index be5ac383e..2bdb67522 100644 --- a/wolfssl/openssl/dh.h +++ b/wolfssl/openssl/dh.h @@ -19,6 +19,10 @@ typedef struct WOLFSSL_DH { void* internal; /* our DH */ char inSet; /* internal set from external ? */ char exSet; /* external set from internal ? */ + /*added for lighttpd openssl compatability, go back and add a getter in + * lighttpd src code. + */ + int length; } WOLFSSL_DH; diff --git a/wolfssl/openssl/ssl.h b/wolfssl/openssl/ssl.h index 155b2c273..93041fa7f 100644 --- a/wolfssl/openssl/ssl.h +++ b/wolfssl/openssl/ssl.h @@ -49,6 +49,7 @@ typedef WOLFSSL_CTX SSL_CTX; typedef WOLFSSL_X509 X509; typedef WOLFSSL_X509_NAME X509_NAME; typedef WOLFSSL_X509_CHAIN X509_CHAIN; +typedef WOLFSSL_ASN1_STRING ASN1_STRING; /* redeclare guard */ @@ -72,7 +73,6 @@ typedef WOLFSSL_X509_EXTENSION X509_EXTENSION; typedef WOLFSSL_ASN1_TIME ASN1_TIME; typedef WOLFSSL_ASN1_INTEGER ASN1_INTEGER; typedef WOLFSSL_ASN1_OBJECT ASN1_OBJECT; -typedef WOLFSSL_ASN1_STRING ASN1_STRING; typedef WOLFSSL_dynlock_value CRYPTO_dynlock_value; #define ASN1_UTCTIME WOLFSSL_ASN1_TIME @@ -401,6 +401,37 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX; /* yassl had set the default to be 500 */ #define SSL_get_default_timeout(ctx) 500 +/* Lighthttp compatability */ + +#ifdef HAVE_LIGHTY +typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY; + +#define SSL_CB_HANDSHAKE_START 0x10 +#define X509_NAME_free WOLFSSL_X509_NAME_free +#define SSL_CTX_use_certificate WOLFSSL_CTX_use_certificate +#define SSL_CTX_use_PrivateKey WOLFSSL_CTX_use_PrivateKey +#define BIO_new_file wolfSSL_BIO_new_file +#define BIO_read_filename wolfSSL_BIO_read_filename +#define BIO_s_file WOLFSSL_BIO_s_file +#define OBJ_nid2sn wolf_OBJ_nid2sn +#define OBJ_obj2nid wolf_OBJ_obj2nid +#define OBJ_sn2nid wolf_OBJ_sn2nid +#define PEM_read_bio_DHparams PEM_read_bio_DHparams +#define PEM_read_bio_X509 PEM_read_bio_WOLFSSL_X509 +#define PEM_write_bio_X509 PEM_write_bio_WOLFSSL_X509 +#define SSL_CTX_set_tmp_dh WOLFSSL_CTX_set_tmp_dh +#define SSL_CTX_set_verify_depth wolfSSL_CTX_set_verify_depth +#define SSL_get_app_data WOLFSSL_get_app_data +#define SSL_set_app_data WOLFSSL_set_app_data +#define X509_NAME_entry_count wolfSSL_X509_NAME_entry_count +#define X509_NAME_ENTRY_get_object WOLFSSL_X509_NAME_ENTRY_get_object +#define X509_NAME_get_entry WOLFSSL_X509_NAME_get_entry +#define sk_X509_NAME_pop_free wolfSSL_sk_X509_NAME_pop_free +#define SHA1 wolfSSL_SHA1 +#define X509_check_private_key wolfSSL_X509_check_private_key +#define SSL_dup_CA_list wolfSSL_dup_CA_list + +#endif #ifdef __cplusplus } /* extern "C" */ diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index b51f7e9f1..df4b38619 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -90,7 +90,13 @@ typedef struct WOLFSSL_X509_EXTENSION WOLFSSL_X509_EXTENSION; typedef struct WOLFSSL_ASN1_TIME WOLFSSL_ASN1_TIME; typedef struct WOLFSSL_ASN1_INTEGER WOLFSSL_ASN1_INTEGER; typedef struct WOLFSSL_ASN1_OBJECT WOLFSSL_ASN1_OBJECT; -typedef struct WOLFSSL_ASN1_STRING WOLFSSL_ASN1_STRING; + +typedef struct WOLFSSL_ASN1_STRING{ + #ifdef HAVE_LIGHTY + char* data; + int length; + #endif +} WOLFSSL_ASN1_STRING; typedef struct WOLFSSL_dynlock_value WOLFSSL_dynlock_value; #define WOLFSSL_ASN1_UTCTIME WOLFSSL_ASN1_TIME @@ -144,7 +150,6 @@ typedef struct WOLFSSL_X509_OBJECT { } data; } WOLFSSL_X509_OBJECT; - typedef struct WOLFSSL_X509_STORE_CTX { WOLFSSL_X509_STORE* store; /* Store full of a CA cert chain */ WOLFSSL_X509* current_cert; /* stunnel dereference */ @@ -1492,6 +1497,52 @@ WOLFSSL_API int wolfSSL_accept_ex(WOLFSSL*, HandShakeCallBack, TimeoutCallBack, #endif +//We also want this to be inside openssl extra, but clang throws an error +#ifdef HAVE_LIGHTY + +typedef struct WOLFSSL_X509_NAME_ENTRY { + WOLFSSL_ASN1_OBJECT* object; + WOLFSSL_ASN1_STRING* value; + int set; + int size; +} WOLFSSL_X509_NAME_ENTRY; + +#endif + +#ifdef OPENSSL_EXTRA /*lighttp compatibility */ +#ifdef HAVE_LIGHTY + +#include + +WOLFSSL_API void WOLFSSL_X509_NAME_free(WOLFSSL_X509_NAME *name); +WOLFSSL_API char WOLFSSL_CTX_use_certificate(WOLFSSL_CTX *ctx, WOLFSSL_X509 *x); +WOLFSSL_API int WOLFSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey); +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_file(const char *filename, const char *mode); +WOLFSSL_API int wolfSSL_BIO_read_filename(WOLFSSL_BIO *b, const char *name); +WOLFSSL_API WOLFSSL_BIO_METHOD* WOLFSSL_BIO_s_file(void); +/* These are to be merged shortly */ +WOLFSSL_API const char * wolf_OBJ_nid2sn(int n); +WOLFSSL_API int wolf_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o); +WOLFSSL_API int wolf_OBJ_sn2nid(const char *sn); +WOLFSSL_API WOLFSSL_DH *PEM_read_bio_DHparams(WOLFSSL_BIO *bp, WOLFSSL_DH **x, pem_password_cb *cb, void *u); +WOLFSSL_API WOLFSSL_X509 *PEM_read_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u); +WOLFSSL_API int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x); +WOLFSSL_API long WOLFSSL_CTX_set_tmp_dh(WOLFSSL_CTX *ctx, WOLFSSL_DH *dh); +WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth); +WOLFSSL_API void* WOLFSSL_get_app_data( const WOLFSSL *ssl); +WOLFSSL_API void WOLFSSL_set_app_data(WOLFSSL *ssl, void *arg); +WOLFSSL_API WOLFSSL_ASN1_OBJECT * WOLFSSL_X509_NAME_ENTRY_get_object(WOLFSSL_X509_NAME_ENTRY *ne); +WOLFSSL_API WOLFSSL_X509_NAME_ENTRY *WOLFSSL_X509_NAME_get_entry(WOLFSSL_X509_NAME *name, int loc); +WOLFSSL_API void wolfSSL_sk_X509_NAME_pop_free(STACK_OF(WOLFSSL_X509_NAME)* sk, void f (WOLFSSL_X509_NAME*)); +WOLFSSL_API unsigned char *wolfSSL_SHA1(const unsigned char *d, size_t n, unsigned char *md); +WOLFSSL_API int wolfSSL_X509_check_private_key(WOLFSSL_X509*, WOLFSSL_EVP_PKEY*); +WOLFSSL_API STACK_OF(WOLFSSL_X509_NAME) *wolfSSL_dup_CA_list( STACK_OF(WOLFSSL_X509_NAME) *sk ); + +/* end lighttpd*/ +#endif +#endif + + #ifdef __cplusplus } /* extern "C" */ #endif