From e37595b6af815abdff0c3db252be4f73570cd1ca Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Wed, 5 Oct 2016 16:35:48 +0200 Subject: [PATCH 1/3] LibreSSL: Fix dh5 code Add LibreSSL check to old OpenSSL #ifdef guard as DH_{get0,set0}_key() is not implemented in LibreSSL. Signed-off-by: Christian Neukirchen --- src/crypto/crypto_openssl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/crypto/crypto_openssl.c b/src/crypto/crypto_openssl.c index 19e0e2b..b3d1b07 100644 --- a/src/crypto/crypto_openssl.c +++ b/src/crypto/crypto_openssl.c @@ -611,7 +611,7 @@ void crypto_cipher_deinit(struct crypto_cipher *ctx) void * dh5_init(struct wpabuf **priv, struct wpabuf **publ) { -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) DH *dh; struct wpabuf *pubkey = NULL, *privkey = NULL; size_t publen, privlen; @@ -712,7 +712,7 @@ err: void * dh5_init_fixed(const struct wpabuf *priv, const struct wpabuf *publ) { -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) DH *dh; dh = DH_new(); -- 2.7.3 From eb06de3f896c4649e76d90e755ebe31209711a20 Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Wed, 5 Oct 2016 16:37:40 +0200 Subject: [PATCH 2/3] LibreSSL: Fix TLS initialization/deinitialization Due to a missing guard for old OpenSSL code, SSL_library_init() was not called, which is required for LibreSSL. Likewise for cleanup. Signed-off-by: Christian Neukirchen --- src/crypto/tls_openssl.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c index 23ac64b..b07931e 100644 --- a/src/crypto/tls_openssl.c +++ b/src/crypto/tls_openssl.c @@ -919,7 +919,7 @@ void * tls_init(const struct tls_config *conf) } #endif /* OPENSSL_FIPS */ #endif /* CONFIG_FIPS */ -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) SSL_load_error_strings(); SSL_library_init(); #ifndef OPENSSL_NO_SHA256 @@ -1043,7 +1043,7 @@ void tls_deinit(void *ssl_ctx) tls_openssl_ref_count--; if (tls_openssl_ref_count == 0) { -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) #ifndef OPENSSL_NO_ENGINE ENGINE_cleanup(); #endif /* OPENSSL_NO_ENGINE */ @@ -2334,7 +2334,7 @@ static int tls_connection_client_cert(struct tls_connection *conn, return 0; #ifdef PKCS12_FUNCS -#if OPENSSL_VERSION_NUMBER < 0x10002000L +#if OPENSSL_VERSION_NUMBER < 0x10002000L || defined(LIBRESSL_VERSION_NUMBER) /* * Clear previously set extra chain certificates, if any, from PKCS#12 * processing in tls_parse_pkcs12() to allow OpenSSL to build a new -- 2.7.3 From f40fda5750084ab2e45bed885e2911901fbd3c2c Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Fri, 7 Oct 2016 17:51:05 +0200 Subject: [PATCH 3/3] LibreSSL: Fix compatibility for EAP-FAST This basically just follows commit 587b0457e0238b7b1800d46f5cdd5e1d2b06732f ('LibreSSL: Fix build with LibreSSL') with the same pattern, which was missed here. Signed-off-by: Julian Ospald --- src/crypto/tls_openssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c index b07931e..a7d4880 100644 --- a/src/crypto/tls_openssl.c +++ b/src/crypto/tls_openssl.c @@ -3976,7 +3976,7 @@ int tls_connection_set_params(void *tls_ctx, struct tls_connection *conn, engine_id = "pkcs11"; #if defined(EAP_FAST) || defined(EAP_FAST_DYNAMIC) || defined(EAP_SERVER_FAST) -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) if (params->flags & TLS_CONN_EAP_FAST) { wpa_printf(MSG_DEBUG, "OpenSSL: Use TLSv1_method() for EAP-FAST"); -- 2.7.3