summaryrefslogtreecommitdiff
path: root/lib/handshake-tls13.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2017-09-13 14:19:12 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2018-02-19 15:29:34 +0100
commit5a8eb0c3fe660c1db8497c58fb5cae22829bc5dd (patch)
tree0993ea2571ea365a543b7c539b9a914858ac6427 /lib/handshake-tls13.c
parent2eef509ce5f2d250f8dcaeffa46444dd2b694e91 (diff)
downloadgnutls-5a8eb0c3fe660c1db8497c58fb5cae22829bc5dd.tar.gz
handshake: added parsing of encrypted extensions
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
Diffstat (limited to 'lib/handshake-tls13.c')
-rw-r--r--lib/handshake-tls13.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/lib/handshake-tls13.c b/lib/handshake-tls13.c
index 4307b5dc29..5950c06d96 100644
--- a/lib/handshake-tls13.c
+++ b/lib/handshake-tls13.c
@@ -47,6 +47,9 @@
#include <random.h>
#include <dtls.h>
#include "secrets.h"
+#include "tls13/encrypted_extensions.h"
+
+static int generate_hs_traffic_keys(gnutls_session_t session);
/*
* _gnutls13_handshake_client
@@ -58,49 +61,55 @@ int _gnutls13_handshake_client(gnutls_session_t session)
switch (STATE) {
case STATE100:
- abort();
+ ret =
+ generate_hs_traffic_keys(session);
STATE = STATE100;
- IMED_RET("recv encrypted extensions", ret, 0);
+ IMED_RET("generate session keys", ret, 0);
/* fall through */
case STATE101:
- abort();
+ ret = _gnutls13_recv_encrypted_extensions(session);
STATE = STATE101;
- IMED_RET("recv certificate request", ret, 0);
+ IMED_RET("recv encrypted extensions", ret, 0);
/* fall through */
case STATE102:
abort();
STATE = STATE102;
- IMED_RET("recv certificate", ret, 0);
+ IMED_RET("recv certificate request", ret, 0);
/* fall through */
case STATE103:
abort();
STATE = STATE103;
- IMED_RET("recv server certificate verify", ret, 0);
+ IMED_RET("recv certificate", ret, 0);
/* fall through */
case STATE104:
+ abort();
+ STATE = STATE104;
+ IMED_RET("recv server certificate verify", ret, 0);
+ /* fall through */
+ case STATE105:
ret = _gnutls_run_verify_callback(session, GNUTLS_CLIENT);
- STATE = STATE102;
+ STATE = STATE105;
if (ret < 0)
return gnutls_assert_val(ret);
FALLTHROUGH;
- case STATE105:
- abort();
- STATE = STATE105;
- IMED_RET("recv finished", ret, 0);
- /* fall through */
case STATE106:
abort();
STATE = STATE106;
- IMED_RET("send certificate", ret, 0);
+ IMED_RET("recv finished", ret, 0);
/* fall through */
case STATE107:
abort();
STATE = STATE107;
- IMED_RET("send certificate verify", ret, 0);
+ IMED_RET("send certificate", ret, 0);
/* fall through */
case STATE108:
abort();
STATE = STATE108;
+ IMED_RET("send certificate verify", ret, 0);
+ /* fall through */
+ case STATE109:
+ abort();
+ STATE = STATE109;
IMED_RET("send finished", ret, 0);
STATE = STATE0;