]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Enforce the DEFAULT_MAX_VERIFY_BITS for DH prime size as well.
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Thu, 12 Dec 2013 15:25:36 +0000 (16:25 +0100)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Wed, 18 Dec 2013 16:09:07 +0000 (17:09 +0100)
Conflicts:
lib/auth/dh_common.c

Conflicts:
lib/auth/dh_common.c

lib/auth/dh_common.c

index 0d7f088cb707dde49cde8494fbc044724e56c373..0bb1ac7af24a47c62f44eb2df5268f0eb62e5a8e 100644 (file)
@@ -203,7 +203,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;
 
   i = 0;
@@ -259,7 +259,8 @@ _gnutls_proc_dh_common_server_kx (gnutls_session_t session,
       return bits;
     }
 
-  if (_gnutls_mpi_get_nbits (session->key.client_p) < (size_t) bits)
+  p_bits = _gnutls_mpi_get_nbits(session->key.client_p);
+  if (p_bits < bits) 
     {
       /* the prime used by the peer is not acceptable
        */
@@ -269,6 +270,16 @@ _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.client_g,
                         session->key.client_p);
   _gnutls_dh_set_peer_public (session, session->key.client_Y);