forked from enlightenment/efl
openssl 1.1 build break fixes
this fixes building against openssl 1.1 since it broke api in various ways by hiding structs and deprecating api's (this causes warnings not breaks unlike the struct hiding). this adapts to these changes and makes efl build again. @fix
This commit is contained in:
parent
0ac95c40bc
commit
2842165415
|
@ -33,10 +33,16 @@
|
||||||
static int
|
static int
|
||||||
efl_net_socket_bio_create(BIO *b)
|
efl_net_socket_bio_create(BIO *b)
|
||||||
{
|
{
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
BIO_set_init(b, 1);
|
||||||
|
BIO_set_data(b, NULL);
|
||||||
|
BIO_set_flags(b, 0);
|
||||||
|
#else
|
||||||
b->init = 1;
|
b->init = 1;
|
||||||
b->num = 0;
|
b->num = 0;
|
||||||
b->ptr = NULL;
|
b->ptr = NULL;
|
||||||
b->flags = 0;
|
b->flags = 0;
|
||||||
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,9 +50,15 @@ static int
|
||||||
efl_net_socket_bio_destroy(BIO *b)
|
efl_net_socket_bio_destroy(BIO *b)
|
||||||
{
|
{
|
||||||
if (!b) return 0;
|
if (!b) return 0;
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
BIO_set_init(b, 0);
|
||||||
|
BIO_set_data(b, NULL);
|
||||||
|
BIO_set_flags(b, 0);
|
||||||
|
#else
|
||||||
b->init = 0;
|
b->init = 0;
|
||||||
b->ptr = NULL;
|
b->ptr = NULL;
|
||||||
b->flags = 0;
|
b->flags = 0;
|
||||||
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +69,11 @@ efl_net_socket_bio_read(BIO *b, char *buf, int len)
|
||||||
.mem = buf,
|
.mem = buf,
|
||||||
.len = len
|
.len = len
|
||||||
};
|
};
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
Eo *sock = BIO_get_data(b);
|
||||||
|
#else
|
||||||
Eo *sock = b->ptr;
|
Eo *sock = b->ptr;
|
||||||
|
#endif
|
||||||
Eina_Error err;
|
Eina_Error err;
|
||||||
|
|
||||||
if ((!buf) || (len <= 0)) return 0;
|
if ((!buf) || (len <= 0)) return 0;
|
||||||
|
@ -89,7 +105,11 @@ efl_net_socket_bio_write(BIO *b, const char *buf, int len)
|
||||||
.mem = buf,
|
.mem = buf,
|
||||||
.len = len
|
.len = len
|
||||||
};
|
};
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
Eo *sock = BIO_get_data(b);
|
||||||
|
#else
|
||||||
Eo *sock = b->ptr;
|
Eo *sock = b->ptr;
|
||||||
|
#endif
|
||||||
Eina_Error err;
|
Eina_Error err;
|
||||||
|
|
||||||
if ((!buf) || (len <= 0)) return 0;
|
if ((!buf) || (len <= 0)) return 0;
|
||||||
|
@ -129,17 +149,39 @@ efl_net_socket_bio_puts(BIO *b, const char *str)
|
||||||
return efl_net_socket_bio_write(b, str, strlen(str));
|
return efl_net_socket_bio_write(b, str, strlen(str));
|
||||||
}
|
}
|
||||||
|
|
||||||
static BIO_METHOD efl_net_socket_bio = {
|
static BIO_METHOD *
|
||||||
0x400, /* 0x400 means source & sink */
|
__efl_net_socket_bio_get(void)
|
||||||
"efl_net_socket wrapper",
|
{
|
||||||
efl_net_socket_bio_write,
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
efl_net_socket_bio_read,
|
static BIO_METHOD *efl_net_socket_bio = NULL;
|
||||||
efl_net_socket_bio_puts,
|
|
||||||
NULL, /* no gets */
|
if (efl_net_socket_bio) return efl_net_socket_bio;
|
||||||
efl_net_socket_bio_ctrl,
|
efl_net_socket_bio = BIO_meth_new(0x400 /* 0x400 means source & sink */,
|
||||||
efl_net_socket_bio_create,
|
"efl_net_socket wrapper");
|
||||||
efl_net_socket_bio_destroy
|
BIO_meth_set_write(efl_net_socket_bio, efl_net_socket_bio_write);
|
||||||
};
|
BIO_meth_set_read(efl_net_socket_bio, efl_net_socket_bio_read);
|
||||||
|
BIO_meth_set_puts(efl_net_socket_bio, efl_net_socket_bio_puts);
|
||||||
|
BIO_meth_set_ctrl(efl_net_socket_bio, efl_net_socket_bio_ctrl);
|
||||||
|
BIO_meth_set_create(efl_net_socket_bio, efl_net_socket_bio_create);
|
||||||
|
BIO_meth_set_destroy(efl_net_socket_bio, efl_net_socket_bio_destroy);
|
||||||
|
// FIXME: some day we need to clean up, but for now a singleton alloc is ok
|
||||||
|
// BIO_meth_free(efl_net_socket_bio);
|
||||||
|
return efl_net_socket_bio;
|
||||||
|
#else
|
||||||
|
static BIO_METHOD efl_net_socket_bio = {
|
||||||
|
0x400, /* 0x400 means source & sink */
|
||||||
|
"efl_net_socket wrapper",
|
||||||
|
efl_net_socket_bio_write,
|
||||||
|
efl_net_socket_bio_read,
|
||||||
|
efl_net_socket_bio_puts,
|
||||||
|
NULL, /* no gets */
|
||||||
|
efl_net_socket_bio_ctrl,
|
||||||
|
efl_net_socket_bio_create,
|
||||||
|
efl_net_socket_bio_destroy
|
||||||
|
};
|
||||||
|
return &efl_net_socket_bio;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
struct _Efl_Net_Ssl_Conn
|
struct _Efl_Net_Ssl_Conn
|
||||||
{
|
{
|
||||||
|
@ -314,10 +356,14 @@ efl_net_ssl_conn_setup(Efl_Net_Ssl_Conn *conn, Eina_Bool is_dialer, Efl_Net_Sock
|
||||||
conn->ssl = efl_net_ssl_context_connection_new(context);
|
conn->ssl = efl_net_ssl_context_connection_new(context);
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn->ssl, ENOSYS);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(conn->ssl, ENOSYS);
|
||||||
|
|
||||||
conn->bio = BIO_new(&efl_net_socket_bio);
|
conn->bio = BIO_new(__efl_net_socket_bio_get());
|
||||||
EINA_SAFETY_ON_NULL_GOTO(conn->bio, error_bio);
|
EINA_SAFETY_ON_NULL_GOTO(conn->bio, error_bio);
|
||||||
|
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
BIO_set_data(conn->bio, sock);
|
||||||
|
#else
|
||||||
conn->bio->ptr = sock;
|
conn->bio->ptr = sock;
|
||||||
|
#endif
|
||||||
|
|
||||||
SSL_set_bio(conn->ssl, conn->bio, conn->bio);
|
SSL_set_bio(conn->ssl, conn->bio, conn->bio);
|
||||||
if (is_dialer)
|
if (is_dialer)
|
||||||
|
|
|
@ -272,6 +272,7 @@ efl_net_ssl_ctx_setup(Efl_Net_Ssl_Ctx *ctx, Efl_Net_Ssl_Ctx_Config cfg)
|
||||||
ERR("ssl_ctx=%p SSLv3 is disabled in your OpenSSL build", ctx);
|
ERR("ssl_ctx=%p SSLv3 is disabled in your OpenSSL build", ctx);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
||||||
case EFL_NET_SSL_CIPHER_TLSV1:
|
case EFL_NET_SSL_CIPHER_TLSV1:
|
||||||
ctx->ssl_ctx = SSL_CTX_new(TLSv1_client_method());
|
ctx->ssl_ctx = SSL_CTX_new(TLSv1_client_method());
|
||||||
break;
|
break;
|
||||||
|
@ -281,6 +282,7 @@ efl_net_ssl_ctx_setup(Efl_Net_Ssl_Ctx *ctx, Efl_Net_Ssl_Ctx_Config cfg)
|
||||||
case EFL_NET_SSL_CIPHER_TLSV1_2:
|
case EFL_NET_SSL_CIPHER_TLSV1_2:
|
||||||
ctx->ssl_ctx = SSL_CTX_new(TLSv1_2_client_method());
|
ctx->ssl_ctx = SSL_CTX_new(TLSv1_2_client_method());
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
ERR("ssl_ctx=%p unsupported cipher %d", ctx, cfg.cipher);
|
ERR("ssl_ctx=%p unsupported cipher %d", ctx, cfg.cipher);
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
@ -302,6 +304,7 @@ efl_net_ssl_ctx_setup(Efl_Net_Ssl_Ctx *ctx, Efl_Net_Ssl_Ctx_Config cfg)
|
||||||
ERR("ssl_ctx=%p SSLv3 is disabled in your OpenSSL build", ctx);
|
ERR("ssl_ctx=%p SSLv3 is disabled in your OpenSSL build", ctx);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
||||||
case EFL_NET_SSL_CIPHER_TLSV1:
|
case EFL_NET_SSL_CIPHER_TLSV1:
|
||||||
ctx->ssl_ctx = SSL_CTX_new(TLSv1_server_method());
|
ctx->ssl_ctx = SSL_CTX_new(TLSv1_server_method());
|
||||||
break;
|
break;
|
||||||
|
@ -311,6 +314,7 @@ efl_net_ssl_ctx_setup(Efl_Net_Ssl_Ctx *ctx, Efl_Net_Ssl_Ctx_Config cfg)
|
||||||
case EFL_NET_SSL_CIPHER_TLSV1_2:
|
case EFL_NET_SSL_CIPHER_TLSV1_2:
|
||||||
ctx->ssl_ctx = SSL_CTX_new(TLSv1_2_server_method());
|
ctx->ssl_ctx = SSL_CTX_new(TLSv1_2_server_method());
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
ERR("ssl_ctx=%p unsupported cipher %d", ctx, cfg.cipher);
|
ERR("ssl_ctx=%p unsupported cipher %d", ctx, cfg.cipher);
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
|
@ -475,7 +475,11 @@ eet_identity_sign(FILE *fp,
|
||||||
gnutls_datum_t signum = { NULL, 0 };
|
gnutls_datum_t signum = { NULL, 0 };
|
||||||
gnutls_privkey_t privkey;
|
gnutls_privkey_t privkey;
|
||||||
# else /* ifdef HAVE_GNUTLS */
|
# else /* ifdef HAVE_GNUTLS */
|
||||||
|
# if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
EVP_MD_CTX *md_ctx;
|
||||||
|
# else
|
||||||
EVP_MD_CTX md_ctx;
|
EVP_MD_CTX md_ctx;
|
||||||
|
# endif
|
||||||
unsigned int sign_len = 0;
|
unsigned int sign_len = 0;
|
||||||
int cert_len = 0;
|
int cert_len = 0;
|
||||||
# endif /* ifdef HAVE_GNUTLS */
|
# endif /* ifdef HAVE_GNUTLS */
|
||||||
|
@ -561,12 +565,24 @@ eet_identity_sign(FILE *fp,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do the signature. */
|
/* Do the signature. */
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
md_ctx = EVP_MD_CTX_new();
|
||||||
|
EVP_SignInit(md_ctx, EVP_sha1());
|
||||||
|
EVP_SignUpdate(md_ctx, data, st_buf.st_size);
|
||||||
|
err = EVP_SignFinal(md_ctx,
|
||||||
|
sign,
|
||||||
|
(unsigned int *)&sign_len,
|
||||||
|
key->private_key);
|
||||||
|
EVP_MD_CTX_free(md_ctx);
|
||||||
|
#else
|
||||||
EVP_SignInit(&md_ctx, EVP_sha1());
|
EVP_SignInit(&md_ctx, EVP_sha1());
|
||||||
EVP_SignUpdate(&md_ctx, data, st_buf.st_size);
|
EVP_SignUpdate(&md_ctx, data, st_buf.st_size);
|
||||||
err = EVP_SignFinal(&md_ctx,
|
err = EVP_SignFinal(&md_ctx,
|
||||||
sign,
|
sign,
|
||||||
(unsigned int *)&sign_len,
|
(unsigned int *)&sign_len,
|
||||||
key->private_key);
|
key->private_key);
|
||||||
|
EVP_MD_CTX_cleanup(&md_ctx);
|
||||||
|
#endif
|
||||||
if (err != 1)
|
if (err != 1)
|
||||||
{
|
{
|
||||||
ERR_print_errors_fp(stdout);
|
ERR_print_errors_fp(stdout);
|
||||||
|
@ -738,7 +754,11 @@ eet_identity_check(const void *data_base,
|
||||||
const unsigned char *tmp;
|
const unsigned char *tmp;
|
||||||
EVP_PKEY *pkey;
|
EVP_PKEY *pkey;
|
||||||
X509 *x509;
|
X509 *x509;
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
EVP_MD_CTX *md_ctx;
|
||||||
|
#else
|
||||||
EVP_MD_CTX md_ctx;
|
EVP_MD_CTX md_ctx;
|
||||||
|
#endif
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Strange but d2i_X509 seems to put 0 all over the place. */
|
/* Strange but d2i_X509 seems to put 0 all over the place. */
|
||||||
|
@ -757,9 +777,18 @@ eet_identity_check(const void *data_base,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Verify the signature */
|
/* Verify the signature */
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
md_ctx = EVP_MD_CTX_new();
|
||||||
|
EVP_VerifyInit(md_ctx, EVP_sha1());
|
||||||
|
EVP_VerifyUpdate(md_ctx, data_base, data_length);
|
||||||
|
err = EVP_VerifyFinal(md_ctx, sign, sign_len, pkey);
|
||||||
|
EVP_MD_CTX_free(md_ctx);
|
||||||
|
#else
|
||||||
EVP_VerifyInit(&md_ctx, EVP_sha1());
|
EVP_VerifyInit(&md_ctx, EVP_sha1());
|
||||||
EVP_VerifyUpdate(&md_ctx, data_base, data_length);
|
EVP_VerifyUpdate(&md_ctx, data_base, data_length);
|
||||||
err = EVP_VerifyFinal(&md_ctx, sign, sign_len, pkey);
|
err = EVP_VerifyFinal(&md_ctx, sign, sign_len, pkey);
|
||||||
|
EVP_MD_CTX_cleanup(&md_ctx);
|
||||||
|
#endif
|
||||||
|
|
||||||
X509_free(x509);
|
X509_free(x509);
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
|
|
|
@ -75,6 +75,16 @@ emile_binbuf_sha1(const Eina_Binbuf * data, unsigned char digest[20])
|
||||||
{
|
{
|
||||||
const EVP_MD *md = EVP_sha1();
|
const EVP_MD *md = EVP_sha1();
|
||||||
Eina_Slice slice = eina_binbuf_slice_get(data);
|
Eina_Slice slice = eina_binbuf_slice_get(data);
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
|
||||||
|
|
||||||
|
EVP_DigestInit_ex(ctx, md, NULL);
|
||||||
|
|
||||||
|
EVP_DigestUpdate(ctx, slice.mem, slice.len);
|
||||||
|
EVP_DigestFinal_ex(ctx, digest, NULL);
|
||||||
|
|
||||||
|
EVP_MD_CTX_free(ctx);
|
||||||
|
#else
|
||||||
EVP_MD_CTX ctx;
|
EVP_MD_CTX ctx;
|
||||||
|
|
||||||
EVP_MD_CTX_init(&ctx);
|
EVP_MD_CTX_init(&ctx);
|
||||||
|
@ -84,6 +94,7 @@ emile_binbuf_sha1(const Eina_Binbuf * data, unsigned char digest[20])
|
||||||
EVP_DigestFinal_ex(&ctx, digest, NULL);
|
EVP_DigestFinal_ex(&ctx, digest, NULL);
|
||||||
|
|
||||||
EVP_MD_CTX_cleanup(&ctx);
|
EVP_MD_CTX_cleanup(&ctx);
|
||||||
|
#endif
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,9 +319,11 @@ emile_cipher_server_listen(Emile_Cipher_Type t)
|
||||||
SSL_CTX_set_options(r->ssl_ctx,
|
SSL_CTX_set_options(r->ssl_ctx,
|
||||||
options | SSL_OP_NO_SSLv2 | SSL_OP_SINGLE_DH_USE);
|
options | SSL_OP_NO_SSLv2 | SSL_OP_SINGLE_DH_USE);
|
||||||
break;
|
break;
|
||||||
|
#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
||||||
case EMILE_TLSv1:
|
case EMILE_TLSv1:
|
||||||
r->ssl_ctx = SSL_CTX_new(TLSv1_server_method());
|
r->ssl_ctx = SSL_CTX_new(TLSv1_server_method());
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
free(r);
|
free(r);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -754,8 +767,10 @@ emile_cipher_server_connect(Emile_Cipher_Type t)
|
||||||
options | SSL_OP_NO_SSLv2 | SSL_OP_SINGLE_DH_USE);
|
options | SSL_OP_NO_SSLv2 | SSL_OP_SINGLE_DH_USE);
|
||||||
break;
|
break;
|
||||||
case EMILE_TLSv1:
|
case EMILE_TLSv1:
|
||||||
|
#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
||||||
r->ssl_ctx = SSL_CTX_new(TLSv1_client_method());
|
r->ssl_ctx = SSL_CTX_new(TLSv1_client_method());
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
free(r);
|
free(r);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue