From 876c9a95e02086218f479d610af6543b742a1200 Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Sat, 25 Jan 2020 22:02:48 +0100 Subject: key shares: avoid using internal errors On unknown curves or illegal parameters, make sure we return the right error code which will translate to the appropriate alert. Resolves: #907 Signed-off-by: Nikos Mavrogiannopoulos --- lib/ext/key_share.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/ext/key_share.c b/lib/ext/key_share.c index 41dd1b7326..ab8abf8fe6 100644 --- a/lib/ext/key_share.c +++ b/lib/ext/key_share.c @@ -148,17 +148,17 @@ static int client_gen_key_share(gnutls_session_t session, const gnutls_group_ent ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_G], group->generator->data, group->generator->size); if (ret < 0) - return gnutls_assert_val(ret); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_P], group->prime->data, group->prime->size); if (ret < 0) - return gnutls_assert_val(ret); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_Q], group->q->data, group->q->size); if (ret < 0) - return gnutls_assert_val(ret); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); session->key.kshare.dh_params.algo = group->pk; session->key.kshare.dh_params.dh_group = group->id; /* no curve in FFDH, we write the group */ @@ -354,17 +354,17 @@ server_use_key_share(gnutls_session_t session, const gnutls_group_entry_st *grou ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_G], group->generator->data, group->generator->size); if (ret < 0) - return gnutls_assert_val(ret); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_P], group->prime->data, group->prime->size); if (ret < 0) - return gnutls_assert_val(ret); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_Q], group->q->data, group->q->size); if (ret < 0) - return gnutls_assert_val(ret); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); session->key.kshare.dh_params.algo = GNUTLS_PK_DH; session->key.kshare.dh_params.qbits = *group->q_bits; @@ -381,7 +381,7 @@ server_use_key_share(gnutls_session_t session, const gnutls_group_entry_st *grou ret = _gnutls_mpi_init_scan_nz(&pub.params[DH_Y], data, data_size); if (ret < 0) - return gnutls_assert_val(ret); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); pub.algo = group->pk; @@ -489,7 +489,7 @@ client_use_key_share(gnutls_session_t session, const gnutls_group_entry_st *grou ret = _gnutls_mpi_init_scan_nz(&pub.params[DH_Y], data, data_size); if (ret < 0) - return gnutls_assert_val(ret); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); pub.algo = group->pk; @@ -599,7 +599,7 @@ key_share_recv_params(gnutls_session_t session, if (_gnutls_ext_get_msg(session) == GNUTLS_EXT_FLAG_HRR) { if (unlikely(!(session->internals.hsk_flags & HSK_HRR_RECEIVED))) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); DECR_LEN(data_size, 2); gid = _gnutls_read_uint16(data); @@ -692,7 +692,7 @@ key_share_send_params(gnutls_session_t session, if (session->internals.hsk_flags & HSK_HRR_RECEIVED) { /* we know the group */ group = get_group(session); if (unlikely(group == NULL)) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); ret = client_gen_key_share(session, group, extdata); if (ret == GNUTLS_E_INT_RET_0) -- cgit v1.2.1