Hi, On 19-06-17 17:35, log...@free.fr wrote: > From: Emmanuel Deloget <log...@free.fr> > > HMAC_CTX_init() has been removed from OpenSSL 1.1. Both this function > and function HMAC_CTX_cleanup() has been replaced by HMAC_CTX_reset(). > > Commit aba98e9050eb54d72d921e70bcd422cb892b9c6c introduced support for > HMAC_CTX_init() for OpenSSL 1.1+ while other functions were mimicking > the OpenSSL 1.1 interface for earlier version. This is clearly not a > good idea -- a better approach would be to provide the new interface for > pre-1.1 versions in order to have the dependant code use only one > interface version. To implement that, we remove HMAC_CTX_init() from our > compatibility layer and implement HMAC_CTX_reset() in terms of a cleanup > followed by an init (as the regular HMAC_CTX_reset() function does in > OpenSSL 1.1. This change has a consequence on HMAC_CTX_free() which now > need to cleanup() the HMAC context before freeing it. > --- > configure.ac | 1 - > src/openvpn/crypto_openssl.c | 2 +- > src/openvpn/openssl_compat.h | 39 ++++++++++++++------------------------- > 3 files changed, 15 insertions(+), 27 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 56ce5f82..22f91cb6 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -924,7 +924,6 @@ if test "${enable_crypto}" = "yes" -a > "${with_crypto_library}" = "openssl"; then > HMAC_CTX_new \ > HMAC_CTX_free \ > HMAC_CTX_reset \ > - HMAC_CTX_init \ > EVP_MD_CTX_new \ > EVP_MD_CTX_free \ > EVP_MD_CTX_reset \ > diff --git a/src/openvpn/crypto_openssl.c b/src/openvpn/crypto_openssl.c > index a55e65c1..9cf3355b 100644 > --- a/src/openvpn/crypto_openssl.c > +++ b/src/openvpn/crypto_openssl.c > @@ -930,7 +930,7 @@ hmac_ctx_init(HMAC_CTX *ctx, const uint8_t *key, int > key_len, > { > ASSERT(NULL != kt && NULL != ctx); > > - HMAC_CTX_init(ctx); > + HMAC_CTX_reset(ctx); > HMAC_Init_ex(ctx, key, key_len, kt, NULL); > > /* make sure we used a big enough key */ > diff --git a/src/openvpn/openssl_compat.h b/src/openvpn/openssl_compat.h > index c765f0bb..617410e0 100644 > --- a/src/openvpn/openssl_compat.h > +++ b/src/openvpn/openssl_compat.h > @@ -120,6 +120,15 @@ EVP_CIPHER_CTX_new(void) > /** > * Reset a HMAC context > * > + * OpenSSL 1.1+ removes APIs HMAC_CTX_init() and HMAC_CTX_cleanup() > + * and replace them with a single call that does a cleanup followed > + * by an init. A proper _reset() for OpenSSL < 1.1 should perform > + * a similar set of operations. > + * > + * It means that before we kill a HMAC context, we'll have to cleanup > + * again, as we probably have allocated a few resources when we forced > + * an init. > + * > * @param ctx The HMAC context > * @return 1 on success, 0 on error > */ > @@ -127,42 +136,22 @@ static inline int > HMAC_CTX_reset(HMAC_CTX *ctx) > { > HMAC_CTX_cleanup(ctx); > + HMAC_CTX_init(ctx); > return 1; > } > #endif > > -#if !defined(HAVE_HMAC_CTX_INIT) > -/** > - * Init a HMAC context > - * > - * @param ctx The HMAC context > - * > - * Contrary to many functions in this file, HMAC_CTX_init() is not > - * an OpenSSL 1.1 function: it comes from previous versions and was > - * removed in v1.1. As a consequence, there is no distincting in > - * v1.1 between a cleanup, and init and a reset. Yet, previous OpenSSL > - * version need this distinction. > - * > - * In order to respect previous OpenSSL versions, we implement init > - * as reset for OpenSSL 1.1+. > - */ > -static inline void > -HMAC_CTX_init(HMAC_CTX *ctx) > -{ > - HMAC_CTX_reset(ctx); > -} > -#endif > - > #if !defined(HAVE_HMAC_CTX_FREE) > /** > - * Free an existing HMAC context > + * Cleanup and free an existing HMAC context > * > * @param ctx The HMAC context > */ > static inline void > -HMAC_CTX_free(HMAC_CTX *c) > +HMAC_CTX_free(HMAC_CTX *ctx) > { > - free(c); > + HMAC_CTX_cleanup(ctx); > + free(ctx); > } > #endif > >
Thanks, ACK. -Steffan ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel