From: Nikos Mavrogiannopoulos Date: Tue, 26 Sep 2017 10:54:18 +0000 (+0200) Subject: handshake: use the new buffer type in TLS 1.3 X-Git-Tag: gnutls_3_6_3~361 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36b21777c9c4dc25f1698e2f7469080ea41b5a23;p=thirdparty%2Fgnutls.git handshake: use the new buffer type in TLS 1.3 Signed-off-by: Nikos Mavrogiannopoulos --- diff --git a/lib/tls13/certificate.c b/lib/tls13/certificate.c index e53f116213..6b4c336fa2 100644 --- a/lib/tls13/certificate.c +++ b/lib/tls13/certificate.c @@ -94,8 +94,6 @@ int _gnutls13_send_certificate(gnutls_session_t session, unsigned again) unsigned i; if (again == 0) { - _gnutls_buffer_init(&buf); - ret = _gnutls_get_selected_cert(session, &apr_cert_list, &apr_cert_list_length, &apr_pkey); if (ret < 0) @@ -109,10 +107,16 @@ int _gnutls13_send_certificate(gnutls_session_t session, unsigned again) } } - ret = _gnutls_buffer_append_prefix(&buf, 8, 0); + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); if (ret < 0) return gnutls_assert_val(ret); + ret = _gnutls_buffer_append_prefix(&buf, 8, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + /* mark total size */ pos_mark = buf.length; ret = _gnutls_buffer_append_prefix(&buf, 24, 0); @@ -140,28 +144,13 @@ int _gnutls13_send_certificate(gnutls_session_t session, unsigned again) _gnutls_write_uint24(buf.length-pos_mark-3, &buf.data[pos_mark]); - bufel = _gnutls_handshake_alloc(session, buf.length); - if (bufel == NULL) { - gnutls_assert(); - ret = GNUTLS_E_MEMORY_ERROR; - goto cleanup; - } - - _mbuffer_set_udata_size(bufel, 0); - ret = _mbuffer_append_data(bufel, buf.data, buf.length); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - _gnutls_buffer_clear(&buf); + bufel = _gnutls_buffer_to_mbuffer(&buf); } return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_CERTIFICATE_PKT); cleanup: _gnutls_buffer_clear(&buf); - _mbuffer_xfree(&bufel); return ret; } diff --git a/lib/tls13/certificate_verify.c b/lib/tls13/certificate_verify.c index 8f92d4074b..813c37ba8c 100644 --- a/lib/tls13/certificate_verify.c +++ b/lib/tls13/certificate_verify.c @@ -139,8 +139,6 @@ int _gnutls13_send_certificate_verify(gnutls_session_t session, unsigned again) const gnutls_sign_entry_st *se; if (again == 0) { - _gnutls_buffer_init(&buf); - ret = _gnutls_get_selected_cert(session, &apr_cert_list, &apr_cert_list_length, &apr_pkey); if (ret < 0) @@ -173,33 +171,26 @@ int _gnutls13_send_certificate_verify(gnutls_session_t session, unsigned again) if (ret < 0) return gnutls_assert_val(ret); - ret = _gnutls_buffer_append_data(&buf, se->aid.id, 2); + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = _gnutls_buffer_append_data_prefix(&buf, 16, sig.data, sig.size); + ret = _gnutls_buffer_append_data(&buf, se->aid.id, 2); if (ret < 0) { gnutls_assert(); goto cleanup; } - bufel = _gnutls_handshake_alloc(session, buf.length); - if (bufel == NULL) { - gnutls_assert(); - ret = GNUTLS_E_MEMORY_ERROR; - goto cleanup; - } - - _mbuffer_set_udata_size(bufel, 0); - ret = _mbuffer_append_data(bufel, buf.data, buf.length); + ret = _gnutls_buffer_append_data_prefix(&buf, 16, sig.data, sig.size); if (ret < 0) { gnutls_assert(); goto cleanup; } - _gnutls_buffer_clear(&buf); + bufel = _gnutls_buffer_to_mbuffer(&buf); + gnutls_free(sig.data); } @@ -208,6 +199,5 @@ int _gnutls13_send_certificate_verify(gnutls_session_t session, unsigned again) cleanup: gnutls_free(sig.data); _gnutls_buffer_clear(&buf); - _mbuffer_xfree(&bufel); return ret; } diff --git a/lib/tls13/encrypted_extensions.c b/lib/tls13/encrypted_extensions.c index df0cc6edbb..ba63b95337 100644 --- a/lib/tls13/encrypted_extensions.c +++ b/lib/tls13/encrypted_extensions.c @@ -54,30 +54,22 @@ int _gnutls13_send_encrypted_extensions(gnutls_session_t session, unsigned again gnutls_buffer_st buf; if (again == 0) { - _gnutls_buffer_init(&buf); - - ret = _gnutls_gen_hello_extensions(session, &buf, GNUTLS_EXT_FLAG_EE, GNUTLS_EXT_ANY); + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); if (ret < 0) return gnutls_assert_val(ret); - bufel = _gnutls_handshake_alloc(session, buf.length); - if (bufel == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - - _mbuffer_set_udata_size(bufel, 0); - ret = _mbuffer_append_data(bufel, buf.data, buf.length); + ret = _gnutls_gen_hello_extensions(session, &buf, GNUTLS_EXT_FLAG_EE, GNUTLS_EXT_ANY); if (ret < 0) { gnutls_assert(); goto cleanup; } - _gnutls_buffer_clear(&buf); + bufel = _gnutls_buffer_to_mbuffer(&buf); } return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS); cleanup: _gnutls_buffer_clear(&buf); - _mbuffer_xfree(&bufel); return ret; }