]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
handshake: send encrypted extensions handshake message
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Wed, 20 Sep 2017 14:07:39 +0000 (16:07 +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/handshake-tls13.c
lib/tls13/encrypted_extensions.c
lib/tls13/encrypted_extensions.h

index 4cce3d631d151b51c82e61918e6f453c1d5be30b..90528c4c0021841d8def1c0c79d60e85b5d90de1 100644 (file)
@@ -202,7 +202,7 @@ int _gnutls13_handshake_server(gnutls_session_t session)
                IMED_RET("generate session keys", ret, 0);
                /* fall through */
        case STATE101:
-               abort();
+               ret = _gnutls13_send_encrypted_extensions(session, AGAIN(STATE101));
                STATE = STATE101;
                IMED_RET("send encrypted extensions", ret, 0);
                /* fall through */
index 05673f8e8528f3c2da74126389c332bcc6950d1e..df0cc6edbb282cd32124fb20c82e028366d6ec15 100644 (file)
@@ -24,6 +24,7 @@
 #include "errors.h"
 #include "hello_ext.h"
 #include "handshake.h"
+#include "mbuffers.h"
 #include "tls13/encrypted_extensions.h"
 
 int _gnutls13_recv_encrypted_extensions(gnutls_session_t session)
@@ -45,3 +46,38 @@ int _gnutls13_recv_encrypted_extensions(gnutls_session_t session)
 
        return 0;
 }
+
+int _gnutls13_send_encrypted_extensions(gnutls_session_t session, unsigned again)
+{
+       int ret;
+       mbuffer_st *bufel = NULL;
+       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);
+               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);
+               if (ret < 0) {
+                       gnutls_assert();
+                       goto cleanup;
+               }
+
+               _gnutls_buffer_clear(&buf);
+       }
+
+       return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS);
+
+ cleanup:
+       _gnutls_buffer_clear(&buf);
+       _mbuffer_xfree(&bufel);
+       return ret;
+}
index 3add0611a02dfa41f27ca46cfa4b180d40fbfa4c..88aebdc5f42b6af437e85541b3372c797e3892f9 100644 (file)
@@ -21,3 +21,4 @@
  */
 
 int _gnutls13_recv_encrypted_extensions(gnutls_session_t session);
+int _gnutls13_send_encrypted_extensions(gnutls_session_t session, unsigned again);