Hi, On 25/03/2021 01:01, Arne Schwabe wrote: > This option has been deprecated in OpenVPN 2.4 and the ciphers that allow > using this option fall all into the SWEET32 category of ciphers with > 64 bit block size. > > Signed-off-by: Arne Schwabe <a...@rfc2549.org> > --- > config-msvc.h | 1 - > configure.ac | 2 +- > src/openvpn/crypto.c | 6 +----- > src/openvpn/crypto.h | 4 +--- > src/openvpn/crypto_openssl.c | 4 ++-- > src/openvpn/init.c | 5 ++--- > src/openvpn/options.c | 33 ++------------------------------- > src/openvpn/options.h | 2 -- > src/openvpn/ssl.c | 7 +------ > 9 files changed, 10 insertions(+), 54 deletions(-) > > diff --git a/config-msvc.h b/config-msvc.h > index e430ca96..d0aa4438 100644 > --- a/config-msvc.h > +++ b/config-msvc.h > @@ -49,7 +49,6 @@ > #define HAVE_CHSIZE 1 > #define HAVE_CPP_VARARG_MACRO_ISO 1 > #define HAVE_CTIME 1 > -#define HAVE_EVP_CIPHER_CTX_SET_KEY_LENGTH 1 > #define HAVE_IN_PKTINFO 1 > #define HAVE_MEMSET 1 > #define HAVE_PUTENV 1 > diff --git a/configure.ac b/configure.ac > index 428bebed..bd592b3f 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -881,7 +881,7 @@ if test "${with_crypto_library}" = "openssl"; then > ) > fi > > - AC_CHECK_FUNCS([SSL_CTX_new EVP_CIPHER_CTX_set_key_length], > + AC_CHECK_FUNCS([SSL_CTX_new], > , > [AC_MSG_ERROR([openssl check failed])] > ) > diff --git a/src/openvpn/crypto.c b/src/openvpn/crypto.c > index 3a0bfbec..b042514b 100644 > --- a/src/openvpn/crypto.c > +++ b/src/openvpn/crypto.c > @@ -739,7 +739,7 @@ warn_insecure_key_type(const char *ciphername, const > cipher_kt_t *cipher) > */ > void > init_key_type(struct key_type *kt, const char *ciphername, > - const char *authname, int keysize, bool tls_mode, bool warn) > + const char *authname, bool tls_mode, bool warn) > { > bool aead_cipher = false; > > @@ -756,10 +756,6 @@ init_key_type(struct key_type *kt, const char > *ciphername, > } > > kt->cipher_length = cipher_kt_key_size(kt->cipher); > - if (keysize > 0 && keysize <= MAX_CIPHER_KEY_LENGTH) > - { > - kt->cipher_length = keysize; > - } > > /* check legal cipher mode */ > aead_cipher = cipher_kt_mode_aead(kt->cipher); > diff --git a/src/openvpn/crypto.h b/src/openvpn/crypto.h > index 1ad669ce..b8128c7f 100644 > --- a/src/openvpn/crypto.h > +++ b/src/openvpn/crypto.h > @@ -301,14 +301,12 @@ int read_key(struct key *key, const struct key_type > *kt, struct buffer *buf); > * @param kt The struct key_type to initialize > * @param ciphername The name of the cipher to use > * @param authname The name of the HMAC digest to use > - * @param keysize The length of the cipher key to use, in bytes. Only > valid > - * for ciphers that support variable length keys. > * @param tls_mode Specifies whether we are running in TLS mode, which > allows > * more ciphers than static key mode. > * @param warn Print warnings when null cipher / auth is used. > */ > void init_key_type(struct key_type *kt, const char *ciphername, > - const char *authname, int keysize, bool tls_mode, bool > warn); > + const char *authname, bool tls_mode, bool warn); > > /* > * Key context functions > diff --git a/src/openvpn/crypto_openssl.c b/src/openvpn/crypto_openssl.c > index 573beaed..34decbb0 100644 > --- a/src/openvpn/crypto_openssl.c > +++ b/src/openvpn/crypto_openssl.c > @@ -776,12 +776,12 @@ cipher_ctx_init(EVP_CIPHER_CTX *ctx, const uint8_t > *key, int key_len, > { > crypto_msg(M_FATAL, "EVP cipher init #1"); > } > -#ifdef HAVE_EVP_CIPHER_CTX_SET_KEY_LENGTH > + /* This serves as a check that the keylen is the correct as this fails > + * when key_len and the fixed size of cipher disagree */ > if (!EVP_CIPHER_CTX_set_key_length(ctx, key_len))
Are you sure we need to keep this check? key_len is basically kt->cipher_length, which (after his patch) is assigned by the SSL library itself after having initialized the cipher. At a first glance, the rest looks good to me. Cheers, > { > crypto_msg(M_FATAL, "EVP set key size"); > } > -#endif > if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, NULL, enc)) > { > crypto_msg(M_FATAL, "EVP cipher init #2"); > diff --git a/src/openvpn/init.c b/src/openvpn/init.c > index 132d47e4..336da941 100644 > --- a/src/openvpn/init.c > +++ b/src/openvpn/init.c > @@ -2599,7 +2599,7 @@ do_init_crypto_static(struct context *c, const unsigned > int flags) > { > /* Get cipher & hash algorithms */ > init_key_type(&c->c1.ks.key_type, options->ciphername, > options->authname, > - options->keysize, options->test_crypto, true); > + options->test_crypto, true); > > /* Read cipher and hmac keys from shared secret file */ > crypto_read_openvpn_key(&c->c1.ks.key_type, &c->c1.ks.static_key, > @@ -2751,7 +2751,7 @@ do_init_crypto_tls_c1(struct context *c) > || options->enable_ncp_fallback; > /* Get cipher & hash algorithms */ > init_key_type(&c->c1.ks.key_type, options->ciphername, > options->authname, > - options->keysize, true, warn); > + true, warn); > > /* Initialize PRNG with config-specified digest */ > prng_init(options->prng_hash, options->prng_nonce_secret_len); > @@ -4515,7 +4515,6 @@ inherit_context_child(struct context *dest, > /* inherit pre-NCP ciphers */ > dest->options.ciphername = src->options.ciphername; > dest->options.authname = src->options.authname; > - dest->options.keysize = src->options.keysize; > > /* inherit auth-token */ > dest->c1.ks.auth_token_key = src->c1.ks.auth_token_key; > diff --git a/src/openvpn/options.c b/src/openvpn/options.c > index 5b559edf..7948f4a5 100644 > --- a/src/openvpn/options.c > +++ b/src/openvpn/options.c > @@ -531,10 +531,6 @@ static const char usage_message[] = > "--ncp-disable : (DEPRECATED) Disable cipher negotiation.\n" > "--prng alg [nsl] : For PRNG, use digest algorithm alg, and\n" > " nonce_secret_len=nsl. Set alg=none to disable > PRNG.\n" > -#ifdef HAVE_EVP_CIPHER_CTX_SET_KEY_LENGTH > - "--keysize n : (DEPRECATED) Size of cipher key in bits (optional).\n" > - " If unspecified, defaults to cipher-specific > default.\n" > -#endif > #ifndef ENABLE_CRYPTO_MBEDTLS > "--engine [name] : Enable OpenSSL hardware crypto engine > functionality.\n" > #endif > @@ -1733,7 +1729,6 @@ show_settings(const struct options *o) > SHOW_STR(authname); > SHOW_STR(prng_hash); > SHOW_INT(prng_nonce_secret_len); > - SHOW_INT(keysize); > #ifndef ENABLE_CRYPTO_MBEDTLS > SHOW_BOOL(engine); > #endif /* ENABLE_CRYPTO_MBEDTLS */ > @@ -2540,11 +2535,6 @@ options_postprocess_verify_ce(const struct options > *options, > } > } > > - if (options->keysize) > - { > - msg(M_WARN, "WARNING: --keysize is DEPRECATED and will be removed in > OpenVPN 2.6"); > - } > - > /* > * Check consistency of replay options > */ > @@ -3619,7 +3609,6 @@ pre_pull_save(struct options *o) > /* NCP related options that can be overwritten by a push */ > o->pre_pull->ciphername = o->ciphername; > o->pre_pull->authname = o->authname; > - o->pre_pull->keysize = o->keysize; > > /* Ping related options should be reset to the config values on > reconnect */ > o->pre_pull->ping_rec_timeout = o->ping_rec_timeout; > @@ -3675,7 +3664,6 @@ pre_pull_restore(struct options *o, struct gc_arena *gc) > > o->ciphername = pp->ciphername; > o->authname = pp->authname; > - o->keysize = pp->keysize; > > o->ping_rec_timeout = pp->ping_rec_timeout; > o->ping_rec_timeout_action = pp->ping_rec_timeout_action; > @@ -3704,8 +3692,7 @@ calc_options_string_link_mtu(const struct options *o, > const struct frame *frame) > { > struct frame fake_frame = *frame; > struct key_type fake_kt; > - init_key_type(&fake_kt, o->ciphername, o->authname, o->keysize, true, > - false); > + init_key_type(&fake_kt, o->ciphername, o->authname, true, false); > frame_remove_from_extra_frame(&fake_frame, crypto_max_overhead()); > crypto_adjust_frame_parameters(&fake_frame, &fake_kt, o->replay, > > cipher_kt_mode_ofb_cfb(fake_kt.cipher)); > @@ -3876,8 +3863,7 @@ options_string(const struct options *o, > + (TLS_SERVER == true) > <= 1); > > - init_key_type(&kt, o->ciphername, o->authname, o->keysize, true, > - false); > + init_key_type(&kt, o->ciphername, o->authname, true, false); > /* Only announce the cipher to our peer if we are willing to > * support it */ > const char *ciphername = cipher_kt_name(kt.cipher); > @@ -8087,21 +8073,6 @@ add_option(struct options *options, > } > } > #endif /* ENABLE_CRYPTO_MBEDTLS */ > -#ifdef HAVE_EVP_CIPHER_CTX_SET_KEY_LENGTH > - else if (streq(p[0], "keysize") && p[1] && !p[2]) > - { > - int keysize; > - > - VERIFY_PERMISSION(OPT_P_NCP); > - keysize = atoi(p[1]) / 8; > - if (keysize < 0 || keysize > MAX_CIPHER_KEY_LENGTH) > - { > - msg(msglevel, "Bad keysize: %s", p[1]); > - goto err; > - } > - options->keysize = keysize; > - } > -#endif > #ifdef ENABLE_PREDICTION_RESISTANCE > else if (streq(p[0], "use-prediction-resistance") && !p[1]) > { > diff --git a/src/openvpn/options.h b/src/openvpn/options.h > index d8e91fbc..5e924e1b 100644 > --- a/src/openvpn/options.h > +++ b/src/openvpn/options.h > @@ -77,7 +77,6 @@ struct options_pre_pull > > const char* ciphername; > const char* authname; > - int keysize; > > int ping_send_timeout; > int ping_rec_timeout; > @@ -521,7 +520,6 @@ struct options > bool ncp_enabled; > const char *ncp_ciphers; > const char *authname; > - int keysize; > const char *prng_hash; > int prng_nonce_secret_len; > const char *engine; > diff --git a/src/openvpn/ssl.c b/src/openvpn/ssl.c > index 0daf19ad..d288d207 100644 > --- a/src/openvpn/ssl.c > +++ b/src/openvpn/ssl.c > @@ -1874,11 +1874,6 @@ tls_session_update_crypto_params(struct tls_session > *session, > { > msg(D_HANDSHAKE, "Data Channel: using negotiated cipher '%s'", > options->ciphername); > - if (options->keysize) > - { > - msg(D_HANDSHAKE, "NCP: overriding user-set keysize with > default"); > - options->keysize = 0; > - } > } > else > { > @@ -1889,7 +1884,7 @@ tls_session_update_crypto_params(struct tls_session > *session, > } > > init_key_type(&session->opt->key_type, options->ciphername, > - options->authname, options->keysize, true, true); > + options->authname, true, true); > > bool packet_id_long_form = > cipher_kt_mode_ofb_cfb(session->opt->key_type.cipher); > session->opt->crypto_flags &= ~(CO_PACKET_ID_LONG_FORM); > -- Antonio Quartulli _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel