diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/tls13_lib.c | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c index 6522c104d6..8b28bf55a4 100644 --- a/src/lib/libssl/tls13_lib.c +++ b/src/lib/libssl/tls13_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_lib.c,v 1.65 2022/07/17 15:51:06 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_lib.c,v 1.66 2022/07/20 06:20:44 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> |
4 | * Copyright (c) 2019 Bob Beck <beck@openbsd.org> | 4 | * Copyright (c) 2019 Bob Beck <beck@openbsd.org> |
@@ -215,31 +215,41 @@ tls13_legacy_ocsp_status_recv_cb(void *arg) | |||
215 | } | 215 | } |
216 | 216 | ||
217 | static int | 217 | static int |
218 | tls13_phh_update_local_traffic_secret(struct tls13_ctx *ctx) | 218 | tls13_phh_update_read_traffic_secret(struct tls13_ctx *ctx) |
219 | { | 219 | { |
220 | struct tls13_secrets *secrets = ctx->hs->tls13.secrets; | 220 | struct tls13_secrets *secrets = ctx->hs->tls13.secrets; |
221 | struct tls13_secret *secret; | ||
221 | 222 | ||
222 | if (ctx->mode == TLS13_HS_CLIENT) | 223 | if (ctx->mode == TLS13_HS_CLIENT) { |
223 | return (tls13_update_client_traffic_secret(secrets) && | 224 | secret = &secrets->server_application_traffic; |
224 | tls13_record_layer_set_write_traffic_key(ctx->rl, | 225 | if (!tls13_update_server_traffic_secret(secrets)) |
225 | &secrets->client_application_traffic)); | 226 | return 0; |
226 | return (tls13_update_server_traffic_secret(secrets) && | 227 | } else { |
227 | tls13_record_layer_set_read_traffic_key(ctx->rl, | 228 | secret = &secrets->client_application_traffic; |
228 | &secrets->server_application_traffic)); | 229 | if (!tls13_update_client_traffic_secret(secrets)) |
230 | return 0; | ||
231 | } | ||
232 | |||
233 | return tls13_record_layer_set_read_traffic_key(ctx->rl, secret); | ||
229 | } | 234 | } |
230 | 235 | ||
231 | static int | 236 | static int |
232 | tls13_phh_update_peer_traffic_secret(struct tls13_ctx *ctx) | 237 | tls13_phh_update_write_traffic_secret(struct tls13_ctx *ctx) |
233 | { | 238 | { |
234 | struct tls13_secrets *secrets = ctx->hs->tls13.secrets; | 239 | struct tls13_secrets *secrets = ctx->hs->tls13.secrets; |
240 | struct tls13_secret *secret; | ||
241 | |||
242 | if (ctx->mode == TLS13_HS_CLIENT) { | ||
243 | secret = &secrets->client_application_traffic; | ||
244 | if (!tls13_update_client_traffic_secret(secrets)) | ||
245 | return 0; | ||
246 | } else { | ||
247 | secret = &secrets->server_application_traffic; | ||
248 | if (!tls13_update_server_traffic_secret(secrets)) | ||
249 | return 0; | ||
250 | } | ||
235 | 251 | ||
236 | if (ctx->mode == TLS13_HS_CLIENT) | 252 | return tls13_record_layer_set_write_traffic_key(ctx->rl, secret); |
237 | return (tls13_update_server_traffic_secret(secrets) && | ||
238 | tls13_record_layer_set_read_traffic_key(ctx->rl, | ||
239 | &secrets->server_application_traffic)); | ||
240 | return (tls13_update_client_traffic_secret(secrets) && | ||
241 | tls13_record_layer_set_write_traffic_key(ctx->rl, | ||
242 | &secrets->client_application_traffic)); | ||
243 | } | 253 | } |
244 | 254 | ||
245 | /* | 255 | /* |
@@ -285,13 +295,13 @@ tls13_key_update_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
285 | goto err; | 295 | goto err; |
286 | } | 296 | } |
287 | 297 | ||
288 | if (!tls13_phh_update_peer_traffic_secret(ctx)) | 298 | if (!tls13_phh_update_read_traffic_secret(ctx)) |
289 | goto err; | 299 | goto err; |
290 | 300 | ||
291 | if (key_update_request == 0) | 301 | if (key_update_request == 0) |
292 | return TLS13_IO_SUCCESS; | 302 | return TLS13_IO_SUCCESS; |
293 | 303 | ||
294 | /* key_update_request == 1 */ | 304 | /* Our peer requested that we update our write traffic keys. */ |
295 | if ((hs_msg = tls13_handshake_msg_new()) == NULL) | 305 | if ((hs_msg = tls13_handshake_msg_new()) == NULL) |
296 | goto err; | 306 | goto err; |
297 | if (!tls13_handshake_msg_start(hs_msg, &cbb_hs, TLS13_MT_KEY_UPDATE)) | 307 | if (!tls13_handshake_msg_start(hs_msg, &cbb_hs, TLS13_MT_KEY_UPDATE)) |
@@ -322,7 +332,7 @@ tls13_phh_done_cb(void *cb_arg) | |||
322 | struct tls13_ctx *ctx = cb_arg; | 332 | struct tls13_ctx *ctx = cb_arg; |
323 | 333 | ||
324 | if (ctx->key_update_request) { | 334 | if (ctx->key_update_request) { |
325 | tls13_phh_update_local_traffic_secret(ctx); | 335 | tls13_phh_update_write_traffic_secret(ctx); |
326 | ctx->key_update_request = 0; | 336 | ctx->key_update_request = 0; |
327 | } | 337 | } |
328 | } | 338 | } |