diff options
| author | jsing <> | 2021-03-21 18:36:34 +0000 |
|---|---|---|
| committer | jsing <> | 2021-03-21 18:36:34 +0000 |
| commit | 087b119e33251560358cb9d7b82b5f8a17f03031 (patch) | |
| tree | 04368005066ac217cbc5ba4c6633356e81eb6d00 /src/lib/libssl/tls13_client.c | |
| parent | 576f996ac5a58317d1b7d552a754750ef4b70521 (diff) | |
| download | openbsd-087b119e33251560358cb9d7b82b5f8a17f03031.tar.gz openbsd-087b119e33251560358cb9d7b82b5f8a17f03031.tar.bz2 openbsd-087b119e33251560358cb9d7b82b5f8a17f03031.zip | |
Move the TLSv1.3 handshake struct inside the shared handshake struct.
There are currently three different handshake structs that are in use -
the SSL_HANDSHAKE struct (as S3I(s)->hs), the SSL_HANDSHAKE_TLS13 struct
(as S3I(s)->hs_tls13 or ctx->hs in the TLSv1.3 code) and the infamous
'tmp' embedded in SSL3_STATE_INTERNAL (as S3I(s)->tmp)).
This is the first step towards cleaning up the handshake structs so that
shared data is in the SSL_HANDSHAKE struct, with sub-structs for TLSv1.2
and TLSv1.3 specific information. Place SSL_HANDSHAKE_TLS13 inside
SSL_HANDSHAKE and change ctx->hs to refer to the SSL_HANDSHAKE struct
instead of the SSL_HANDSHAKE_TLS13 struct. This allows the TLSv1.3 code
to access the shared handshake data without needing the SSL struct.
ok inoguchi@ tb@
Diffstat (limited to 'src/lib/libssl/tls13_client.c')
| -rw-r--r-- | src/lib/libssl/tls13_client.c | 112 |
1 files changed, 55 insertions, 57 deletions
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c index 4de3d3693b..0f3d435c94 100644 --- a/src/lib/libssl/tls13_client.c +++ b/src/lib/libssl/tls13_client.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls13_client.c,v 1.74 2021/03/10 18:27:02 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_client.c,v 1.75 2021/03/21 18:36:34 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 | * | 4 | * |
| @@ -31,12 +31,12 @@ tls13_client_init(struct tls13_ctx *ctx) | |||
| 31 | size_t groups_len; | 31 | size_t groups_len; |
| 32 | SSL *s = ctx->ssl; | 32 | SSL *s = ctx->ssl; |
| 33 | 33 | ||
| 34 | if (!ssl_supported_tls_version_range(s, &S3I(s)->hs.our_min_tls_version, | 34 | if (!ssl_supported_tls_version_range(s, &ctx->hs->our_min_tls_version, |
| 35 | &S3I(s)->hs.our_max_tls_version)) { | 35 | &ctx->hs->our_max_tls_version)) { |
| 36 | SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); | 36 | SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); |
| 37 | return 0; | 37 | return 0; |
| 38 | } | 38 | } |
| 39 | s->client_version = s->version = S3I(s)->hs.our_max_tls_version; | 39 | s->client_version = s->version = ctx->hs->our_max_tls_version; |
| 40 | 40 | ||
| 41 | tls13_record_layer_set_retry_after_phh(ctx->rl, | 41 | tls13_record_layer_set_retry_after_phh(ctx->rl, |
| 42 | (s->internal->mode & SSL_MODE_AUTO_RETRY) != 0); | 42 | (s->internal->mode & SSL_MODE_AUTO_RETRY) != 0); |
| @@ -51,9 +51,9 @@ tls13_client_init(struct tls13_ctx *ctx) | |||
| 51 | tls1_get_group_list(s, 0, &groups, &groups_len); | 51 | tls1_get_group_list(s, 0, &groups, &groups_len); |
| 52 | if (groups_len < 1) | 52 | if (groups_len < 1) |
| 53 | return 0; | 53 | return 0; |
| 54 | if ((ctx->hs->key_share = tls13_key_share_new(groups[0])) == NULL) | 54 | if ((ctx->hs->tls13.key_share = tls13_key_share_new(groups[0])) == NULL) |
| 55 | return 0; | 55 | return 0; |
| 56 | if (!tls13_key_share_generate(ctx->hs->key_share)) | 56 | if (!tls13_key_share_generate(ctx->hs->tls13.key_share)) |
| 57 | return 0; | 57 | return 0; |
| 58 | 58 | ||
| 59 | arc4random_buf(s->s3->client_random, SSL3_RANDOM_SIZE); | 59 | arc4random_buf(s->s3->client_random, SSL3_RANDOM_SIZE); |
| @@ -65,11 +65,11 @@ tls13_client_init(struct tls13_ctx *ctx) | |||
| 65 | * Appendix D.4). In the pre-TLSv1.3 case a zero length value is used. | 65 | * Appendix D.4). In the pre-TLSv1.3 case a zero length value is used. |
| 66 | */ | 66 | */ |
| 67 | if (ctx->middlebox_compat && | 67 | if (ctx->middlebox_compat && |
| 68 | S3I(s)->hs.our_max_tls_version >= TLS1_3_VERSION) { | 68 | ctx->hs->our_max_tls_version >= TLS1_3_VERSION) { |
| 69 | arc4random_buf(ctx->hs->legacy_session_id, | 69 | arc4random_buf(ctx->hs->tls13.legacy_session_id, |
| 70 | sizeof(ctx->hs->legacy_session_id)); | 70 | sizeof(ctx->hs->tls13.legacy_session_id)); |
| 71 | ctx->hs->legacy_session_id_len = | 71 | ctx->hs->tls13.legacy_session_id_len = |
| 72 | sizeof(ctx->hs->legacy_session_id); | 72 | sizeof(ctx->hs->tls13.legacy_session_id); |
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | return 1; | 75 | return 1; |
| @@ -92,7 +92,7 @@ tls13_client_hello_build(struct tls13_ctx *ctx, CBB *cbb) | |||
| 92 | SSL *s = ctx->ssl; | 92 | SSL *s = ctx->ssl; |
| 93 | 93 | ||
| 94 | /* Legacy client version is capped at TLS 1.2. */ | 94 | /* Legacy client version is capped at TLS 1.2. */ |
| 95 | client_version = S3I(s)->hs.our_max_tls_version; | 95 | client_version = ctx->hs->our_max_tls_version; |
| 96 | if (client_version > TLS1_2_VERSION) | 96 | if (client_version > TLS1_2_VERSION) |
| 97 | client_version = TLS1_2_VERSION; | 97 | client_version = TLS1_2_VERSION; |
| 98 | 98 | ||
| @@ -103,8 +103,8 @@ tls13_client_hello_build(struct tls13_ctx *ctx, CBB *cbb) | |||
| 103 | 103 | ||
| 104 | if (!CBB_add_u8_length_prefixed(cbb, &session_id)) | 104 | if (!CBB_add_u8_length_prefixed(cbb, &session_id)) |
| 105 | goto err; | 105 | goto err; |
| 106 | if (!CBB_add_bytes(&session_id, ctx->hs->legacy_session_id, | 106 | if (!CBB_add_bytes(&session_id, ctx->hs->tls13.legacy_session_id, |
| 107 | ctx->hs->legacy_session_id_len)) | 107 | ctx->hs->tls13.legacy_session_id_len)) |
| 108 | goto err; | 108 | goto err; |
| 109 | 109 | ||
| 110 | if (!CBB_add_u16_length_prefixed(cbb, &cipher_suites)) | 110 | if (!CBB_add_u16_length_prefixed(cbb, &cipher_suites)) |
| @@ -134,9 +134,7 @@ tls13_client_hello_build(struct tls13_ctx *ctx, CBB *cbb) | |||
| 134 | int | 134 | int |
| 135 | tls13_client_hello_send(struct tls13_ctx *ctx, CBB *cbb) | 135 | tls13_client_hello_send(struct tls13_ctx *ctx, CBB *cbb) |
| 136 | { | 136 | { |
| 137 | SSL *s = ctx->ssl; | 137 | if (ctx->hs->our_min_tls_version < TLS1_2_VERSION) |
| 138 | |||
| 139 | if (S3I(s)->hs.our_min_tls_version < TLS1_2_VERSION) | ||
| 140 | tls13_record_layer_set_legacy_version(ctx->rl, TLS1_VERSION); | 138 | tls13_record_layer_set_legacy_version(ctx->rl, TLS1_VERSION); |
| 141 | 139 | ||
| 142 | /* We may receive a pre-TLSv1.3 alert in response to the client hello. */ | 140 | /* We may receive a pre-TLSv1.3 alert in response to the client hello. */ |
| @@ -231,7 +229,7 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs) | |||
| 231 | goto err; | 229 | goto err; |
| 232 | 230 | ||
| 233 | if (tls13_server_hello_is_legacy(cbs)) { | 231 | if (tls13_server_hello_is_legacy(cbs)) { |
| 234 | if (S3I(s)->hs.our_max_tls_version >= TLS1_3_VERSION) { | 232 | if (ctx->hs->our_max_tls_version >= TLS1_3_VERSION) { |
| 235 | /* | 233 | /* |
| 236 | * RFC 8446 section 4.1.3: we must not downgrade if | 234 | * RFC 8446 section 4.1.3: we must not downgrade if |
| 237 | * the server random value contains the TLS 1.2 or 1.1 | 235 | * the server random value contains the TLS 1.2 or 1.1 |
| @@ -252,7 +250,7 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs) | |||
| 252 | if (!CBS_skip(cbs, CBS_len(cbs))) | 250 | if (!CBS_skip(cbs, CBS_len(cbs))) |
| 253 | goto err; | 251 | goto err; |
| 254 | 252 | ||
| 255 | ctx->hs->use_legacy = 1; | 253 | ctx->hs->tls13.use_legacy = 1; |
| 256 | return 1; | 254 | return 1; |
| 257 | } | 255 | } |
| 258 | 256 | ||
| @@ -265,7 +263,7 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs) | |||
| 265 | if (CBS_mem_equal(&server_random, tls13_hello_retry_request_hash, | 263 | if (CBS_mem_equal(&server_random, tls13_hello_retry_request_hash, |
| 266 | sizeof(tls13_hello_retry_request_hash))) { | 264 | sizeof(tls13_hello_retry_request_hash))) { |
| 267 | tlsext_msg_type = SSL_TLSEXT_MSG_HRR; | 265 | tlsext_msg_type = SSL_TLSEXT_MSG_HRR; |
| 268 | ctx->hs->hrr = 1; | 266 | ctx->hs->tls13.hrr = 1; |
| 269 | } | 267 | } |
| 270 | 268 | ||
| 271 | if (!tlsext_client_parse(s, tlsext_msg_type, cbs, &alert_desc)) { | 269 | if (!tlsext_client_parse(s, tlsext_msg_type, cbs, &alert_desc)) { |
| @@ -278,16 +276,16 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs) | |||
| 278 | * Ensure that it was 0x0304 and that legacy version is set to 0x0303 | 276 | * Ensure that it was 0x0304 and that legacy version is set to 0x0303 |
| 279 | * (RFC 8446 section 4.2.1). | 277 | * (RFC 8446 section 4.2.1). |
| 280 | */ | 278 | */ |
| 281 | if (ctx->hs->server_version != TLS1_3_VERSION || | 279 | if (ctx->hs->tls13.server_version != TLS1_3_VERSION || |
| 282 | legacy_version != TLS1_2_VERSION) { | 280 | legacy_version != TLS1_2_VERSION) { |
| 283 | ctx->alert = TLS13_ALERT_PROTOCOL_VERSION; | 281 | ctx->alert = TLS13_ALERT_PROTOCOL_VERSION; |
| 284 | goto err; | 282 | goto err; |
| 285 | } | 283 | } |
| 286 | S3I(s)->hs.negotiated_tls_version = ctx->hs->server_version; | 284 | ctx->hs->negotiated_tls_version = ctx->hs->tls13.server_version; |
| 287 | 285 | ||
| 288 | /* The session_id must match. */ | 286 | /* The session_id must match. */ |
| 289 | if (!CBS_mem_equal(&session_id, ctx->hs->legacy_session_id, | 287 | if (!CBS_mem_equal(&session_id, ctx->hs->tls13.legacy_session_id, |
| 290 | ctx->hs->legacy_session_id_len)) { | 288 | ctx->hs->tls13.legacy_session_id_len)) { |
| 291 | ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; | 289 | ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; |
| 292 | goto err; | 290 | goto err; |
| 293 | } | 291 | } |
| @@ -305,8 +303,8 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs) | |||
| 305 | ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; | 303 | ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; |
| 306 | goto err; | 304 | goto err; |
| 307 | } | 305 | } |
| 308 | /* XXX - move this to hs_tls13? */ | 306 | /* XXX - move this to hs.tls13? */ |
| 309 | S3I(s)->hs.new_cipher = cipher; | 307 | ctx->hs->new_cipher = cipher; |
| 310 | 308 | ||
| 311 | if (compression_method != 0) { | 309 | if (compression_method != 0) { |
| 312 | ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; | 310 | ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; |
| @@ -336,21 +334,21 @@ tls13_client_engage_record_protection(struct tls13_ctx *ctx) | |||
| 336 | 334 | ||
| 337 | /* Derive the shared key and engage record protection. */ | 335 | /* Derive the shared key and engage record protection. */ |
| 338 | 336 | ||
| 339 | if (!tls13_key_share_derive(ctx->hs->key_share, &shared_key, | 337 | if (!tls13_key_share_derive(ctx->hs->tls13.key_share, &shared_key, |
| 340 | &shared_key_len)) | 338 | &shared_key_len)) |
| 341 | goto err; | 339 | goto err; |
| 342 | 340 | ||
| 343 | s->session->cipher = S3I(s)->hs.new_cipher; | 341 | s->session->cipher = ctx->hs->new_cipher; |
| 344 | s->session->ssl_version = ctx->hs->server_version; | 342 | s->session->ssl_version = ctx->hs->tls13.server_version; |
| 345 | 343 | ||
| 346 | if ((ctx->aead = tls13_cipher_aead(S3I(s)->hs.new_cipher)) == NULL) | 344 | if ((ctx->aead = tls13_cipher_aead(ctx->hs->new_cipher)) == NULL) |
| 347 | goto err; | 345 | goto err; |
| 348 | if ((ctx->hash = tls13_cipher_hash(S3I(s)->hs.new_cipher)) == NULL) | 346 | if ((ctx->hash = tls13_cipher_hash(ctx->hs->new_cipher)) == NULL) |
| 349 | goto err; | 347 | goto err; |
| 350 | 348 | ||
| 351 | if ((secrets = tls13_secrets_create(ctx->hash, 0)) == NULL) | 349 | if ((secrets = tls13_secrets_create(ctx->hash, 0)) == NULL) |
| 352 | goto err; | 350 | goto err; |
| 353 | ctx->hs->secrets = secrets; | 351 | ctx->hs->tls13.secrets = secrets; |
| 354 | 352 | ||
| 355 | /* XXX - pass in hash. */ | 353 | /* XXX - pass in hash. */ |
| 356 | if (!tls1_transcript_hash_init(s)) | 354 | if (!tls1_transcript_hash_init(s)) |
| @@ -367,7 +365,7 @@ tls13_client_engage_record_protection(struct tls13_ctx *ctx) | |||
| 367 | goto err; | 365 | goto err; |
| 368 | 366 | ||
| 369 | /* Handshake secrets. */ | 367 | /* Handshake secrets. */ |
| 370 | if (!tls13_derive_handshake_secrets(ctx->hs->secrets, shared_key, | 368 | if (!tls13_derive_handshake_secrets(ctx->hs->tls13.secrets, shared_key, |
| 371 | shared_key_len, &context)) | 369 | shared_key_len, &context)) |
| 372 | goto err; | 370 | goto err; |
| 373 | 371 | ||
| @@ -409,10 +407,10 @@ tls13_server_hello_retry_request_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 409 | * This may have been a TLSv1.2 or earlier ServerHello that just happened | 407 | * This may have been a TLSv1.2 or earlier ServerHello that just happened |
| 410 | * to have matching server random... | 408 | * to have matching server random... |
| 411 | */ | 409 | */ |
| 412 | if (ctx->hs->use_legacy) | 410 | if (ctx->hs->tls13.use_legacy) |
| 413 | return tls13_use_legacy_client(ctx); | 411 | return tls13_use_legacy_client(ctx); |
| 414 | 412 | ||
| 415 | if (!ctx->hs->hrr) | 413 | if (!ctx->hs->tls13.hrr) |
| 416 | return 0; | 414 | return 0; |
| 417 | 415 | ||
| 418 | if (!tls13_synthetic_handshake_message(ctx)) | 416 | if (!tls13_synthetic_handshake_message(ctx)) |
| @@ -420,7 +418,7 @@ tls13_server_hello_retry_request_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 420 | if (!tls13_handshake_msg_record(ctx)) | 418 | if (!tls13_handshake_msg_record(ctx)) |
| 421 | return 0; | 419 | return 0; |
| 422 | 420 | ||
| 423 | ctx->hs->hrr = 0; | 421 | ctx->hs->tls13.hrr = 0; |
| 424 | 422 | ||
| 425 | return 1; | 423 | return 1; |
| 426 | } | 424 | } |
| @@ -433,17 +431,17 @@ tls13_client_hello_retry_send(struct tls13_ctx *ctx, CBB *cbb) | |||
| 433 | * supported groups and is not the same as the key share we previously | 431 | * supported groups and is not the same as the key share we previously |
| 434 | * offered. | 432 | * offered. |
| 435 | */ | 433 | */ |
| 436 | if (!tls1_check_curve(ctx->ssl, ctx->hs->server_group)) | 434 | if (!tls1_check_curve(ctx->ssl, ctx->hs->tls13.server_group)) |
| 437 | return 0; /* XXX alert */ | 435 | return 0; /* XXX alert */ |
| 438 | if (ctx->hs->server_group == tls13_key_share_group(ctx->hs->key_share)) | 436 | if (ctx->hs->tls13.server_group == tls13_key_share_group(ctx->hs->tls13.key_share)) |
| 439 | return 0; /* XXX alert */ | 437 | return 0; /* XXX alert */ |
| 440 | 438 | ||
| 441 | /* Switch to new key share. */ | 439 | /* Switch to new key share. */ |
| 442 | tls13_key_share_free(ctx->hs->key_share); | 440 | tls13_key_share_free(ctx->hs->tls13.key_share); |
| 443 | if ((ctx->hs->key_share = | 441 | if ((ctx->hs->tls13.key_share = |
| 444 | tls13_key_share_new(ctx->hs->server_group)) == NULL) | 442 | tls13_key_share_new(ctx->hs->tls13.server_group)) == NULL) |
| 445 | return 0; | 443 | return 0; |
| 446 | if (!tls13_key_share_generate(ctx->hs->key_share)) | 444 | if (!tls13_key_share_generate(ctx->hs->tls13.key_share)) |
| 447 | return 0; | 445 | return 0; |
| 448 | 446 | ||
| 449 | if (!tls13_client_hello_build(ctx, cbb)) | 447 | if (!tls13_client_hello_build(ctx, cbb)) |
| @@ -470,13 +468,13 @@ tls13_server_hello_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 470 | return 0; | 468 | return 0; |
| 471 | } | 469 | } |
| 472 | 470 | ||
| 473 | if (ctx->hs->use_legacy) { | 471 | if (ctx->hs->tls13.use_legacy) { |
| 474 | if (!(ctx->handshake_stage.hs_type & WITHOUT_HRR)) | 472 | if (!(ctx->handshake_stage.hs_type & WITHOUT_HRR)) |
| 475 | return 0; | 473 | return 0; |
| 476 | return tls13_use_legacy_client(ctx); | 474 | return tls13_use_legacy_client(ctx); |
| 477 | } | 475 | } |
| 478 | 476 | ||
| 479 | if (ctx->hs->hrr) { | 477 | if (ctx->hs->tls13.hrr) { |
| 480 | /* The server has sent two HelloRetryRequests. */ | 478 | /* The server has sent two HelloRetryRequests. */ |
| 481 | ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; | 479 | ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; |
| 482 | return 0; | 480 | return 0; |
| @@ -687,8 +685,8 @@ tls13_server_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 687 | goto err; | 685 | goto err; |
| 688 | if (!CBB_add_u8(&cbb, 0)) | 686 | if (!CBB_add_u8(&cbb, 0)) |
| 689 | goto err; | 687 | goto err; |
| 690 | if (!CBB_add_bytes(&cbb, ctx->hs->transcript_hash, | 688 | if (!CBB_add_bytes(&cbb, ctx->hs->tls13.transcript_hash, |
| 691 | ctx->hs->transcript_hash_len)) | 689 | ctx->hs->tls13.transcript_hash_len)) |
| 692 | goto err; | 690 | goto err; |
| 693 | if (!CBB_finish(&cbb, &sig_content, &sig_content_len)) | 691 | if (!CBB_finish(&cbb, &sig_content, &sig_content_len)) |
| 694 | goto err; | 692 | goto err; |
| @@ -738,7 +736,7 @@ tls13_server_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 738 | int | 736 | int |
| 739 | tls13_server_finished_recv(struct tls13_ctx *ctx, CBS *cbs) | 737 | tls13_server_finished_recv(struct tls13_ctx *ctx, CBS *cbs) |
| 740 | { | 738 | { |
| 741 | struct tls13_secrets *secrets = ctx->hs->secrets; | 739 | struct tls13_secrets *secrets = ctx->hs->tls13.secrets; |
| 742 | struct tls13_secret context = { .data = "", .len = 0 }; | 740 | struct tls13_secret context = { .data = "", .len = 0 }; |
| 743 | struct tls13_secret finished_key; | 741 | struct tls13_secret finished_key; |
| 744 | uint8_t transcript_hash[EVP_MAX_MD_SIZE]; | 742 | uint8_t transcript_hash[EVP_MAX_MD_SIZE]; |
| @@ -767,8 +765,8 @@ tls13_server_finished_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 767 | if (!HMAC_Init_ex(hmac_ctx, finished_key.data, finished_key.len, | 765 | if (!HMAC_Init_ex(hmac_ctx, finished_key.data, finished_key.len, |
| 768 | ctx->hash, NULL)) | 766 | ctx->hash, NULL)) |
| 769 | goto err; | 767 | goto err; |
| 770 | if (!HMAC_Update(hmac_ctx, ctx->hs->transcript_hash, | 768 | if (!HMAC_Update(hmac_ctx, ctx->hs->tls13.transcript_hash, |
| 771 | ctx->hs->transcript_hash_len)) | 769 | ctx->hs->tls13.transcript_hash_len)) |
| 772 | goto err; | 770 | goto err; |
| 773 | verify_data_len = HMAC_size(hmac_ctx); | 771 | verify_data_len = HMAC_size(hmac_ctx); |
| 774 | if ((verify_data = calloc(1, verify_data_len)) == NULL) | 772 | if ((verify_data = calloc(1, verify_data_len)) == NULL) |
| @@ -900,8 +898,8 @@ tls13_client_certificate_send(struct tls13_ctx *ctx, CBB *cbb) | |||
| 900 | if (!tls13_client_select_certificate(ctx, &cpk, &sigalg)) | 898 | if (!tls13_client_select_certificate(ctx, &cpk, &sigalg)) |
| 901 | goto err; | 899 | goto err; |
| 902 | 900 | ||
| 903 | ctx->hs->cpk = cpk; | 901 | ctx->hs->tls13.cpk = cpk; |
| 904 | ctx->hs->sigalg = sigalg; | 902 | ctx->hs->tls13.sigalg = sigalg; |
| 905 | 903 | ||
| 906 | if (!CBB_add_u8_length_prefixed(cbb, &cert_request_context)) | 904 | if (!CBB_add_u8_length_prefixed(cbb, &cert_request_context)) |
| 907 | goto err; | 905 | goto err; |
| @@ -950,9 +948,9 @@ tls13_client_certificate_verify_send(struct tls13_ctx *ctx, CBB *cbb) | |||
| 950 | 948 | ||
| 951 | memset(&sig_cbb, 0, sizeof(sig_cbb)); | 949 | memset(&sig_cbb, 0, sizeof(sig_cbb)); |
| 952 | 950 | ||
| 953 | if ((cpk = ctx->hs->cpk) == NULL) | 951 | if ((cpk = ctx->hs->tls13.cpk) == NULL) |
| 954 | goto err; | 952 | goto err; |
| 955 | if ((sigalg = ctx->hs->sigalg) == NULL) | 953 | if ((sigalg = ctx->hs->tls13.sigalg) == NULL) |
| 956 | goto err; | 954 | goto err; |
| 957 | pkey = cpk->privatekey; | 955 | pkey = cpk->privatekey; |
| 958 | 956 | ||
| @@ -966,8 +964,8 @@ tls13_client_certificate_verify_send(struct tls13_ctx *ctx, CBB *cbb) | |||
| 966 | goto err; | 964 | goto err; |
| 967 | if (!CBB_add_u8(&sig_cbb, 0)) | 965 | if (!CBB_add_u8(&sig_cbb, 0)) |
| 968 | goto err; | 966 | goto err; |
| 969 | if (!CBB_add_bytes(&sig_cbb, ctx->hs->transcript_hash, | 967 | if (!CBB_add_bytes(&sig_cbb, ctx->hs->tls13.transcript_hash, |
| 970 | ctx->hs->transcript_hash_len)) | 968 | ctx->hs->tls13.transcript_hash_len)) |
| 971 | goto err; | 969 | goto err; |
| 972 | if (!CBB_finish(&sig_cbb, &sig_content, &sig_content_len)) | 970 | if (!CBB_finish(&sig_cbb, &sig_content, &sig_content_len)) |
| 973 | goto err; | 971 | goto err; |
| @@ -1024,7 +1022,7 @@ tls13_client_end_of_early_data_send(struct tls13_ctx *ctx, CBB *cbb) | |||
| 1024 | int | 1022 | int |
| 1025 | tls13_client_finished_send(struct tls13_ctx *ctx, CBB *cbb) | 1023 | tls13_client_finished_send(struct tls13_ctx *ctx, CBB *cbb) |
| 1026 | { | 1024 | { |
| 1027 | struct tls13_secrets *secrets = ctx->hs->secrets; | 1025 | struct tls13_secrets *secrets = ctx->hs->tls13.secrets; |
| 1028 | struct tls13_secret context = { .data = "", .len = 0 }; | 1026 | struct tls13_secret context = { .data = "", .len = 0 }; |
| 1029 | struct tls13_secret finished_key = { .data = NULL, .len = 0 }; | 1027 | struct tls13_secret finished_key = { .data = NULL, .len = 0 }; |
| 1030 | uint8_t transcript_hash[EVP_MAX_MD_SIZE]; | 1028 | uint8_t transcript_hash[EVP_MAX_MD_SIZE]; |
| @@ -1082,7 +1080,7 @@ tls13_client_finished_send(struct tls13_ctx *ctx, CBB *cbb) | |||
| 1082 | int | 1080 | int |
| 1083 | tls13_client_finished_sent(struct tls13_ctx *ctx) | 1081 | tls13_client_finished_sent(struct tls13_ctx *ctx) |
| 1084 | { | 1082 | { |
| 1085 | struct tls13_secrets *secrets = ctx->hs->secrets; | 1083 | struct tls13_secrets *secrets = ctx->hs->tls13.secrets; |
| 1086 | 1084 | ||
| 1087 | /* | 1085 | /* |
| 1088 | * Any records following the client finished message must be encrypted | 1086 | * Any records following the client finished message must be encrypted |
