]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
handshake: use the new buffer type in TLS 1.3
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Tue, 26 Sep 2017 10:54:18 +0000 (12:54 +0200)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Mon, 19 Feb 2018 14:29:34 +0000 (15:29 +0100)
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
lib/tls13/certificate.c
lib/tls13/certificate_verify.c
lib/tls13/encrypted_extensions.c

index e53f116213baa8c8bc3531e69c1e2484dc5a52ef..6b4c336fa2d25431658c5ad1c36fa46c07a9b241 100644 (file)
@@ -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;
 }
 
index 8f92d4074b8a975a45e594db1edb15469e249bae..813c37ba8c7a419490aa5eebaeaca81d554f9e3a 100644 (file)
@@ -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;
 }
index df0cc6edbb282cd32124fb20c82e028366d6ec15..ba63b95337d8e90ecf36d8c3be8b28fd3dfb93b2 100644 (file)
@@ -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;
 }