summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaiki Ueno <dueno@redhat.com>2018-04-16 10:17:10 +0200
committerDaiki Ueno <dueno@redhat.com>2018-04-16 15:27:06 +0200
commit4db873554b760b1e595d3743dcc9c5b1cb048d0f (patch)
tree78d36ae36e8d4f202caa54edc3e12ea213babf99
parent8e32440919dbf84c67ea779009ef76b25787d465 (diff)
downloadgnutls-tmp-dueno-ap-traffic-keys-fix.tar.gz
handshake-tls13: Fix calculation of application traffic secretstmp-dueno-ap-traffic-keys-fix
The transcript hash should be calculated over "ClientHello...server Finished" instead of "ClientHello...client Finished". Signed-off-by: Daiki Ueno <dueno@redhat.com>
-rw-r--r--lib/handshake-tls13.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/lib/handshake-tls13.c b/lib/handshake-tls13.c
index de14cf106e..7b186e451b 100644
--- a/lib/handshake-tls13.c
+++ b/lib/handshake-tls13.c
@@ -126,25 +126,25 @@ int _gnutls13_handshake_client(gnutls_session_t session)
IMED_RET("recv finished", ret, 0);
/* fall through */
case STATE108:
- ret = _gnutls13_send_certificate(session, AGAIN(STATE108));
+ ret =
+ generate_ap_traffic_keys(session);
STATE = STATE108;
- IMED_RET("send certificate", ret, 0);
+ IMED_RET("generate app keys", ret, 0);
/* fall through */
case STATE109:
- ret = _gnutls13_send_certificate_verify(session, AGAIN(STATE109));
+ ret = _gnutls13_send_certificate(session, AGAIN(STATE109));
STATE = STATE109;
- IMED_RET("send certificate verify", ret, 0);
+ IMED_RET("send certificate", ret, 0);
/* fall through */
case STATE110:
- ret = _gnutls13_send_finished(session, AGAIN(STATE110));
+ ret = _gnutls13_send_certificate_verify(session, AGAIN(STATE110));
STATE = STATE110;
- IMED_RET("send finished", ret, 0);
+ IMED_RET("send certificate verify", ret, 0);
/* fall through */
case STATE111:
- ret =
- generate_ap_traffic_keys(session);
+ ret = _gnutls13_send_finished(session, AGAIN(STATE111));
STATE = STATE111;
- IMED_RET("generate app keys", ret, 0);
+ IMED_RET("send finished", ret, 0);
STATE = STATE0;
break;
@@ -337,31 +337,31 @@ int _gnutls13_handshake_server(gnutls_session_t session)
IMED_RET("send finished", ret, 0);
/* fall through */
case STATE107:
- ret = _gnutls13_recv_certificate(session);
+ ret =
+ generate_ap_traffic_keys(session);
STATE = STATE107;
- IMED_RET("recv certificate", ret, 0);
+ IMED_RET("generate app keys", ret, 0);
/* fall through */
case STATE108:
- ret = _gnutls13_recv_certificate_verify(session);
+ ret = _gnutls13_recv_certificate(session);
STATE = STATE108;
- IMED_RET("recv certificate verify", ret, 0);
+ IMED_RET("recv certificate", ret, 0);
/* fall through */
case STATE109:
- ret = _gnutls_run_verify_callback(session, GNUTLS_CLIENT);
+ ret = _gnutls13_recv_certificate_verify(session);
STATE = STATE109;
- if (ret < 0)
- return gnutls_assert_val(ret);
+ IMED_RET("recv certificate verify", ret, 0);
/* fall through */
case STATE110:
- ret = _gnutls13_recv_finished(session);
+ ret = _gnutls_run_verify_callback(session, GNUTLS_CLIENT);
STATE = STATE110;
- IMED_RET("recv finished", ret, 0);
+ if (ret < 0)
+ return gnutls_assert_val(ret);
/* fall through */
case STATE111:
- ret =
- generate_ap_traffic_keys(session);
+ ret = _gnutls13_recv_finished(session);
STATE = STATE111;
- IMED_RET("generate app keys", ret, 0);
+ IMED_RET("recv finished", ret, 0);
STATE = STATE0;
break;