From: Nikos Mavrogiannopoulos Date: Thu, 12 Dec 2013 15:25:36 +0000 (+0100) Subject: Enforce the DEFAULT_MAX_VERIFY_BITS for DH prime size as well. X-Git-Tag: gnutls_3_3_0pre0~472 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd667b05e7f39ca57945893dd218d9d27d948112;p=thirdparty%2Fgnutls.git Enforce the DEFAULT_MAX_VERIFY_BITS for DH prime size as well. --- diff --git a/lib/auth/dh_common.c b/lib/auth/dh_common.c index 434515af20..e1985d379c 100644 --- a/lib/auth/dh_common.c +++ b/lib/auth/dh_common.c @@ -207,7 +207,7 @@ _gnutls_proc_dh_common_server_kx(gnutls_session_t session, uint8_t *data_p; uint8_t *data_g; uint8_t *data_Y; - int i, bits, ret; + int i, bits, ret, p_bits; ssize_t data_size = _data_size; gnutls_pk_params_init(&session->key.dh_params); @@ -264,7 +264,8 @@ _gnutls_proc_dh_common_server_kx(gnutls_session_t session, return bits; } - if (_gnutls_mpi_get_nbits(session->key.dh_params.params[DH_P]) < (size_t) bits) { + p_bits = _gnutls_mpi_get_nbits(session->key.dh_params.params[DH_P]); + if (p_bits < bits) { /* the prime used by the peer is not acceptable */ gnutls_assert(); @@ -275,6 +276,15 @@ _gnutls_proc_dh_common_server_kx(gnutls_session_t session, return GNUTLS_E_DH_PRIME_UNACCEPTABLE; } + if (p_bits >= DEFAULT_MAX_VERIFY_BITS) { + gnutls_assert(); + _gnutls_debug_log + ("Received a prime of %u bits, limit is %u\n", + (unsigned) p_bits, + (unsigned) DEFAULT_MAX_VERIFY_BITS); + return GNUTLS_E_DH_PRIME_UNACCEPTABLE; + } + _gnutls_dh_set_group(session, session->key.dh_params.params[DH_G], session->key.dh_params.params[DH_P]); _gnutls_dh_set_peer_public(session, session->key.client_Y);