Hi, On 20-07-2020 14:17, Arne Schwabe wrote: > All supported crypto libraries have AEAD support and with our > ncp/de facto default cipher AES-256-GCM we do not want to support > the obscure corner case of a library with disabled AEAD. > > Signed-off-by: Arne Schwabe <a...@rfc2549.org> > > Patch V2: Remove three instances of (harmless) #ifdef Steffan spotted > that can be removed now too. > --- > config-msvc.h | 1 - > configure.ac | 7 ++----- > src/openvpn/crypto.c | 11 ----------- > src/openvpn/crypto_mbedtls.c | 14 -------------- > src/openvpn/crypto_openssl.c | 26 ++------------------------ > src/openvpn/crypto_openssl.h | 4 ---- > src/openvpn/options.c | 6 ------ > 7 files changed, 4 insertions(+), 65 deletions(-) > > diff --git a/config-msvc.h b/config-msvc.h > index 875da4a6..8ef48979 100644 > --- a/config-msvc.h > +++ b/config-msvc.h > @@ -5,7 +5,6 @@ > #define ENABLE_DEF_AUTH 1 > #define ENABLE_PF 1 > #define ENABLE_CRYPTO_OPENSSL 1 > -#define HAVE_AEAD_CIPHER_MODES 1 > #define ENABLE_DEBUG 1 > #define ENABLE_EUREPHIA 1 > #define ENABLE_FRAGMENT 1 > diff --git a/configure.ac b/configure.ac > index d1db0a21..43f78fb7 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -907,11 +907,10 @@ if test "${with_crypto_library}" = "openssl"; then > AC_DEFINE([HAVE_OPENSSL_ENGINE], [1], [OpenSSL engine support > available]) > fi > > - have_crypto_aead_modes="yes" > AC_CHECK_FUNC( > [EVP_aes_256_gcm], > , > - [have_crypto_aead_modes="no"] > + [AC_MSG_ERROR([OpenSSL check for AES-256-GCM support failed])] > ) > > # All supported OpenSSL version (>= 1.0.2) > @@ -1005,14 +1004,13 @@ elif test "${with_crypto_library}" = "mbedtls"; then > [AC_MSG_ERROR([mbed TLS 2.y.z required])] > ) > > - have_crypto_aead_modes="yes" > AC_CHECK_FUNCS( > [ \ > mbedtls_cipher_write_tag \ > mbedtls_cipher_check_tag \ > ], > , > - [have_crypto_aead_modes="no"; break] > + [AC_MSG_ERROR([mbed TLS check for AEAD support failed])] > ) > > have_export_keying_material="yes" > @@ -1227,7 +1225,6 @@ test "${enable_pf}" = "yes" && AC_DEFINE([ENABLE_PF], > [1], [Enable internal pack > test "${enable_strict_options}" = "yes" && > AC_DEFINE([ENABLE_STRICT_OPTIONS_CHECK], [1], [Enable strict options check > between peers]) > > test "${enable_crypto_ofb_cfb}" = "yes" && AC_DEFINE([ENABLE_OFB_CFB_MODE], > [1], [Enable OFB and CFB cipher modes]) > -test "${have_crypto_aead_modes}" = "yes" && > AC_DEFINE([HAVE_AEAD_CIPHER_MODES], [1], [Use crypto library]) > if test "${have_export_keying_material}" = "yes"; then > AC_DEFINE( > [HAVE_EXPORT_KEYING_MATERIAL], [1], > diff --git a/src/openvpn/crypto.c b/src/openvpn/crypto.c > index bbf47ef7..e92a0dc1 100644 > --- a/src/openvpn/crypto.c > +++ b/src/openvpn/crypto.c > @@ -64,7 +64,6 @@ static void > openvpn_encrypt_aead(struct buffer *buf, struct buffer work, > struct crypto_options *opt) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > struct gc_arena gc; > int outlen = 0; > const struct key_ctx *ctx = &opt->key_ctx_bi.encrypt; > @@ -152,9 +151,6 @@ err: > buf->len = 0; > gc_free(&gc); > return; > -#else /* HAVE_AEAD_CIPHER_MODES */ > - ASSERT(0); > -#endif /* ifdef HAVE_AEAD_CIPHER_MODES */ > } > > static void > @@ -361,7 +357,6 @@ openvpn_decrypt_aead(struct buffer *buf, struct buffer > work, > struct crypto_options *opt, const struct frame *frame, > const uint8_t *ad_start) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > static const char error_prefix[] = "AEAD Decrypt error"; > struct packet_id_net pin = { 0 }; > const struct key_ctx *ctx = &opt->key_ctx_bi.decrypt; > @@ -482,10 +477,6 @@ error_exit: > buf->len = 0; > gc_free(&gc); > return false; > -#else /* HAVE_AEAD_CIPHER_MODES */ > - ASSERT(0); > - return false; > -#endif /* ifdef HAVE_AEAD_CIPHER_MODES */ > } > > /* > @@ -1104,7 +1095,6 @@ test_crypto(struct crypto_options *co, struct frame > *frame) > /* init work */ > ASSERT(buf_init(&work, FRAME_HEADROOM(frame))); > > -#ifdef HAVE_AEAD_CIPHER_MODES > /* init implicit IV */ > { > const cipher_kt_t *cipher = > @@ -1126,7 +1116,6 @@ test_crypto(struct crypto_options *co, struct frame > *frame) > co->key_ctx_bi.decrypt.implicit_iv_len = impl_iv_len; > } > } > -#endif /* ifdef HAVE_AEAD_CIPHER_MODES */ > > msg(M_INFO, "Entering " PACKAGE_NAME " crypto self-test mode."); > for (i = 1; i <= TUN_MTU_SIZE(frame); ++i) > diff --git a/src/openvpn/crypto_mbedtls.c b/src/openvpn/crypto_mbedtls.c > index bb752557..19a87eb4 100644 > --- a/src/openvpn/crypto_mbedtls.c > +++ b/src/openvpn/crypto_mbedtls.c > @@ -530,12 +530,10 @@ cipher_kt_block_size(const mbedtls_cipher_info_t > *cipher_kt) > int > cipher_kt_tag_size(const mbedtls_cipher_info_t *cipher_kt) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > if (cipher_kt && cipher_kt_mode_aead(cipher_kt)) > { > return OPENVPN_AEAD_TAG_LENGTH; > } > -#endif > return 0; > } > > @@ -632,7 +630,6 @@ cipher_ctx_iv_length(const mbedtls_cipher_context_t *ctx) > int > cipher_ctx_get_tag(cipher_ctx_t *ctx, uint8_t *tag, int tag_len) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > if (tag_len > SIZE_MAX) > { > return 0; > @@ -644,9 +641,6 @@ cipher_ctx_get_tag(cipher_ctx_t *ctx, uint8_t *tag, int > tag_len) > } > > return 1; > -#else /* ifdef HAVE_AEAD_CIPHER_MODES */ > - ASSERT(0); > -#endif /* HAVE_AEAD_CIPHER_MODES */ > } > > int > @@ -688,7 +682,6 @@ cipher_ctx_reset(mbedtls_cipher_context_t *ctx, const > uint8_t *iv_buf) > int > cipher_ctx_update_ad(cipher_ctx_t *ctx, const uint8_t *src, int src_len) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > if (src_len > SIZE_MAX) > { > return 0; > @@ -700,9 +693,6 @@ cipher_ctx_update_ad(cipher_ctx_t *ctx, const uint8_t > *src, int src_len) > } > > return 1; > -#else /* ifdef HAVE_AEAD_CIPHER_MODES */ > - ASSERT(0); > -#endif /* HAVE_AEAD_CIPHER_MODES */ > } > > int > @@ -741,7 +731,6 @@ int > cipher_ctx_final_check_tag(mbedtls_cipher_context_t *ctx, uint8_t *dst, > int *dst_len, uint8_t *tag, size_t tag_len) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > size_t olen = 0; > > if (MBEDTLS_DECRYPT != ctx->operation) > @@ -773,9 +762,6 @@ cipher_ctx_final_check_tag(mbedtls_cipher_context_t *ctx, > uint8_t *dst, > } > > return 1; > -#else /* ifdef HAVE_AEAD_CIPHER_MODES */ > - ASSERT(0); > -#endif /* HAVE_AEAD_CIPHER_MODES */ > } > > void > diff --git a/src/openvpn/crypto_openssl.c b/src/openvpn/crypto_openssl.c > index 161a189e..c47c2f3c 100644 > --- a/src/openvpn/crypto_openssl.c > +++ b/src/openvpn/crypto_openssl.c > @@ -301,9 +301,7 @@ show_available_ciphers(void) > #ifdef ENABLE_OFB_CFB_MODE > || cipher_kt_mode_ofb_cfb(cipher) > #endif > -#ifdef HAVE_AEAD_CIPHER_MODES > || cipher_kt_mode_aead(cipher) > -#endif > )) > { > cipher_list[num_ciphers++] = cipher; > @@ -710,11 +708,8 @@ bool > cipher_kt_mode_cbc(const cipher_kt_t *cipher) > { > return cipher && cipher_kt_mode(cipher) == OPENVPN_MODE_CBC > -#ifdef EVP_CIPH_FLAG_AEAD_CIPHER > /* Exclude AEAD cipher modes, they require a different API */ > - && !(EVP_CIPHER_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) > -#endif > - ; > + && !(EVP_CIPHER_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER); > } > > bool > @@ -722,17 +717,13 @@ cipher_kt_mode_ofb_cfb(const cipher_kt_t *cipher) > { > return cipher && (cipher_kt_mode(cipher) == OPENVPN_MODE_OFB > || cipher_kt_mode(cipher) == OPENVPN_MODE_CFB) > -#ifdef EVP_CIPH_FLAG_AEAD_CIPHER > /* Exclude AEAD cipher modes, they require a different API */ > - && !(EVP_CIPHER_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) > -#endif > - ; > + && !(EVP_CIPHER_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER); > } > > bool > cipher_kt_mode_aead(const cipher_kt_t *cipher) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > if (cipher) > { > switch (EVP_CIPHER_nid(cipher)) > @@ -746,7 +737,6 @@ cipher_kt_mode_aead(const cipher_kt_t *cipher) > return true; > } > } > -#endif > > return false; > } > @@ -806,11 +796,7 @@ cipher_ctx_iv_length(const EVP_CIPHER_CTX *ctx) > int > cipher_ctx_get_tag(EVP_CIPHER_CTX *ctx, uint8_t *tag_buf, int tag_size) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > return EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, tag_size, tag_buf); > -#else > - ASSERT(0); > -#endif > } > > int > @@ -841,16 +827,12 @@ cipher_ctx_reset(EVP_CIPHER_CTX *ctx, const uint8_t > *iv_buf) > int > cipher_ctx_update_ad(EVP_CIPHER_CTX *ctx, const uint8_t *src, int src_len) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > int len; > if (!EVP_CipherUpdate(ctx, NULL, &len, src, src_len)) > { > crypto_msg(M_FATAL, "%s: EVP_CipherUpdate() failed", __func__); > } > return 1; > -#else /* ifdef HAVE_AEAD_CIPHER_MODES */ > - ASSERT(0); > -#endif > } > > int > @@ -874,7 +856,6 @@ int > cipher_ctx_final_check_tag(EVP_CIPHER_CTX *ctx, uint8_t *dst, int *dst_len, > uint8_t *tag, size_t tag_len) > { > -#ifdef HAVE_AEAD_CIPHER_MODES > ASSERT(tag_len < SIZE_MAX); > if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, tag_len, tag)) > { > @@ -882,9 +863,6 @@ cipher_ctx_final_check_tag(EVP_CIPHER_CTX *ctx, uint8_t > *dst, int *dst_len, > } > > return cipher_ctx_final(ctx, dst, dst_len); > -#else /* ifdef HAVE_AEAD_CIPHER_MODES */ > - ASSERT(0); > -#endif > } > > void > diff --git a/src/openvpn/crypto_openssl.h b/src/openvpn/crypto_openssl.h > index 4694ee08..e6f8f537 100644 > --- a/src/openvpn/crypto_openssl.h > +++ b/src/openvpn/crypto_openssl.h > @@ -61,13 +61,9 @@ typedef HMAC_CTX hmac_ctx_t; > /** Cipher is in CFB mode */ > #define OPENVPN_MODE_CFB EVP_CIPH_CFB_MODE > > -#ifdef HAVE_AEAD_CIPHER_MODES > - > /** Cipher is in GCM mode */ > #define OPENVPN_MODE_GCM EVP_CIPH_GCM_MODE > > -#endif /* HAVE_AEAD_CIPHER_MODES */ > - > /** Cipher should encrypt */ > #define OPENVPN_OP_ENCRYPT 1 > > diff --git a/src/openvpn/options.c b/src/openvpn/options.c > index 04518bf5..94308a8e 100644 > --- a/src/openvpn/options.c > +++ b/src/openvpn/options.c > @@ -104,9 +104,7 @@ const char title_string[] = > " [MH/RECVDA]" > #endif > #endif > -#ifdef HAVE_AEAD_CIPHER_MODES > " [AEAD]" > -#endif > " built on " __DATE__ > ; > > @@ -871,11 +869,7 @@ init_options(struct options *o, const bool init_gc) > o->scheduled_exit_interval = 5; > #endif > o->ciphername = "BF-CBC"; > -#ifdef HAVE_AEAD_CIPHER_MODES /* IV_NCP=2 requires GCM support */ > o->ncp_enabled = true; > -#else > - o->ncp_enabled = false; > -#endif > o->ncp_ciphers = "AES-256-GCM:AES-128-GCM"; > o->authname = "SHA1"; > o->prng_hash = "SHA1"; >
Thanks. This looks good to me now, and passes travis and basic local tests. Acked-by: Steffan Karger <steffan.kar...@foxcrypto.com> -Steffan _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel