From 395120b4a264fb5eaadb4e8296f4d6bec2216b6b Mon Sep 17 00:00:00 2001 From: jsing <> Date: Mon, 25 Feb 2019 16:46:17 +0000 Subject: Add a handshake action sent handler and use it for client finished. The write traffic key needs to be changed to the client application traffic key after the client finished message has been sent. The send handler generates the client finished message, however we cannot switch keys at this stage since the client finished message has not yet been protected by the record layer. ok tb@ --- src/lib/libssl/tls13_handshake.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/lib/libssl/tls13_handshake.c') diff --git a/src/lib/libssl/tls13_handshake.c b/src/lib/libssl/tls13_handshake.c index aeb490f350..598a7c1666 100644 --- a/src/lib/libssl/tls13_handshake.c +++ b/src/lib/libssl/tls13_handshake.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tls13_handshake.c,v 1.28 2019/02/14 18:06:35 jsing Exp $ */ +/* $OpenBSD: tls13_handshake.c,v 1.29 2019/02/25 16:46:17 jsing Exp $ */ /* * Copyright (c) 2018-2019 Theo Buehler * Copyright (c) 2019 Joel Sing @@ -36,6 +36,7 @@ struct tls13_handshake_action { uint8_t preserve_transcript_hash; int (*send)(struct tls13_ctx *ctx); + int (*sent)(struct tls13_ctx *ctx); int (*recv)(struct tls13_ctx *ctx); }; @@ -93,6 +94,7 @@ struct tls13_handshake_action state_machine[] = { .handshake_type = TLS13_MT_FINISHED, .sender = TLS13_HS_CLIENT, .send = tls13_client_finished_send, + .sent = tls13_client_finished_sent, .recv = tls13_client_finished_recv, }, [CLIENT_KEY_UPDATE] = { @@ -347,6 +349,9 @@ tls13_handshake_send_action(struct tls13_ctx *ctx, tls13_handshake_msg_free(ctx->hs_msg); ctx->hs_msg = NULL; + if (action->sent != NULL && !action->sent(ctx)) + return TLS13_IO_FAILURE; + return TLS13_IO_SUCCESS; } -- cgit v1.2.3-55-g6feb