diff options
-rw-r--r-- | src/lib/libssl/tls13_client.c | 81 | ||||
-rw-r--r-- | src/lib/libssl/tls13_handshake.c | 22 | ||||
-rw-r--r-- | src/lib/libssl/tls13_internal.h | 31 | ||||
-rw-r--r-- | src/lib/libssl/tls13_lib.c | 5 | ||||
-rw-r--r-- | src/lib/libssl/tls13_server.c | 16 |
5 files changed, 70 insertions, 85 deletions
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c index 3648d09b22..4ec5e58f02 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.27 2020/01/22 11:26:47 beck Exp $ */ | 1 | /* $OpenBSD: tls13_client.c,v 1.28 2020/01/22 13:10:51 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 | * |
@@ -288,17 +288,17 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs) | |||
288 | if (!CBS_get_u8(cbs, &compression_method)) | 288 | if (!CBS_get_u8(cbs, &compression_method)) |
289 | goto err; | 289 | goto err; |
290 | 290 | ||
291 | if (tls13_server_hello_is_legacy(cbs)) | 291 | if (tls13_server_hello_is_legacy(cbs)) { |
292 | if (!CBS_skip(cbs, CBS_len(cbs))) | ||
293 | goto err; | ||
292 | return tls13_use_legacy_client(ctx); | 294 | return tls13_use_legacy_client(ctx); |
295 | } | ||
293 | 296 | ||
294 | if (!tlsext_client_parse(s, cbs, &alert_desc, SSL_TLSEXT_MSG_SH)) { | 297 | if (!tlsext_client_parse(s, cbs, &alert_desc, SSL_TLSEXT_MSG_SH)) { |
295 | ctx->alert = alert_desc; | 298 | ctx->alert = alert_desc; |
296 | goto err; | 299 | goto err; |
297 | } | 300 | } |
298 | 301 | ||
299 | if (CBS_len(cbs) != 0) | ||
300 | goto err; | ||
301 | |||
302 | /* | 302 | /* |
303 | * See if a supported versions extension was returned. If it was then | 303 | * See if a supported versions extension was returned. If it was then |
304 | * the legacy version must be set to 0x0303 (RFC 8446 section 4.1.3). | 304 | * the legacy version must be set to 0x0303 (RFC 8446 section 4.1.3). |
@@ -359,7 +359,7 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs) | |||
359 | } | 359 | } |
360 | 360 | ||
361 | int | 361 | int |
362 | tls13_server_hello_recv(struct tls13_ctx *ctx) | 362 | tls13_server_hello_recv(struct tls13_ctx *ctx, CBS *cbs) |
363 | { | 363 | { |
364 | struct tls13_secrets *secrets; | 364 | struct tls13_secrets *secrets; |
365 | struct tls13_secret context; | 365 | struct tls13_secret context; |
@@ -368,12 +368,8 @@ tls13_server_hello_recv(struct tls13_ctx *ctx) | |||
368 | size_t hash_len; | 368 | size_t hash_len; |
369 | SSL *s = ctx->ssl; | 369 | SSL *s = ctx->ssl; |
370 | int ret = 0; | 370 | int ret = 0; |
371 | CBS cbs; | ||
372 | |||
373 | if (!tls13_handshake_msg_content(ctx->hs_msg, &cbs)) | ||
374 | goto err; | ||
375 | 371 | ||
376 | if (!tls13_server_hello_process(ctx, &cbs)) | 372 | if (!tls13_server_hello_process(ctx, cbs)) |
377 | goto err; | 373 | goto err; |
378 | 374 | ||
379 | /* See if we switched back to the legacy client method. */ | 375 | /* See if we switched back to the legacy client method. */ |
@@ -440,22 +436,15 @@ tls13_server_hello_recv(struct tls13_ctx *ctx) | |||
440 | } | 436 | } |
441 | 437 | ||
442 | int | 438 | int |
443 | tls13_server_encrypted_extensions_recv(struct tls13_ctx *ctx) | 439 | tls13_server_encrypted_extensions_recv(struct tls13_ctx *ctx, CBS *cbs) |
444 | { | 440 | { |
445 | CBS cbs; | ||
446 | int alert_desc; | 441 | int alert_desc; |
447 | 442 | ||
448 | if (!tls13_handshake_msg_content(ctx->hs_msg, &cbs)) | 443 | if (!tlsext_client_parse(ctx->ssl, cbs, &alert_desc, SSL_TLSEXT_MSG_EE)) { |
449 | goto err; | ||
450 | |||
451 | if (!tlsext_client_parse(ctx->ssl, &cbs, &alert_desc, SSL_TLSEXT_MSG_EE)) { | ||
452 | ctx->alert = alert_desc; | 444 | ctx->alert = alert_desc; |
453 | goto err; | 445 | goto err; |
454 | } | 446 | } |
455 | 447 | ||
456 | if (CBS_len(&cbs) != 0) | ||
457 | goto err; | ||
458 | |||
459 | return 1; | 448 | return 1; |
460 | 449 | ||
461 | err: | 450 | err: |
@@ -465,7 +454,7 @@ tls13_server_encrypted_extensions_recv(struct tls13_ctx *ctx) | |||
465 | } | 454 | } |
466 | 455 | ||
467 | int | 456 | int |
468 | tls13_server_certificate_request_recv(struct tls13_ctx *ctx) | 457 | tls13_server_certificate_request_recv(struct tls13_ctx *ctx, CBS *cbs) |
469 | { | 458 | { |
470 | /* | 459 | /* |
471 | * Thanks to poor state design in the RFC, this function can be called | 460 | * Thanks to poor state design in the RFC, this function can be called |
@@ -475,7 +464,7 @@ tls13_server_certificate_request_recv(struct tls13_ctx *ctx) | |||
475 | */ | 464 | */ |
476 | if (tls13_handshake_msg_type(ctx->hs_msg) == TLS13_MT_CERTIFICATE) { | 465 | if (tls13_handshake_msg_type(ctx->hs_msg) == TLS13_MT_CERTIFICATE) { |
477 | ctx->handshake_stage.hs_type |= WITHOUT_CR; | 466 | ctx->handshake_stage.hs_type |= WITHOUT_CR; |
478 | return tls13_server_certificate_recv(ctx); | 467 | return tls13_server_certificate_recv(ctx, cbs); |
479 | } | 468 | } |
480 | 469 | ||
481 | /* XXX - unimplemented. */ | 470 | /* XXX - unimplemented. */ |
@@ -484,9 +473,9 @@ tls13_server_certificate_request_recv(struct tls13_ctx *ctx) | |||
484 | } | 473 | } |
485 | 474 | ||
486 | int | 475 | int |
487 | tls13_server_certificate_recv(struct tls13_ctx *ctx) | 476 | tls13_server_certificate_recv(struct tls13_ctx *ctx, CBS *cbs) |
488 | { | 477 | { |
489 | CBS cbs, cert_request_context, cert_list, cert_data, cert_exts; | 478 | CBS cert_request_context, cert_list, cert_data, cert_exts; |
490 | struct stack_st_X509 *certs = NULL; | 479 | struct stack_st_X509 *certs = NULL; |
491 | SSL *s = ctx->ssl; | 480 | SSL *s = ctx->ssl; |
492 | X509 *cert = NULL; | 481 | X509 *cert = NULL; |
@@ -498,16 +487,11 @@ tls13_server_certificate_recv(struct tls13_ctx *ctx) | |||
498 | if ((certs = sk_X509_new_null()) == NULL) | 487 | if ((certs = sk_X509_new_null()) == NULL) |
499 | goto err; | 488 | goto err; |
500 | 489 | ||
501 | if (!tls13_handshake_msg_content(ctx->hs_msg, &cbs)) | 490 | if (!CBS_get_u8_length_prefixed(cbs, &cert_request_context)) |
502 | goto err; | ||
503 | |||
504 | if (!CBS_get_u8_length_prefixed(&cbs, &cert_request_context)) | ||
505 | goto err; | 491 | goto err; |
506 | if (CBS_len(&cert_request_context) != 0) | 492 | if (CBS_len(&cert_request_context) != 0) |
507 | goto err; | 493 | goto err; |
508 | if (!CBS_get_u24_length_prefixed(&cbs, &cert_list)) | 494 | if (!CBS_get_u24_length_prefixed(cbs, &cert_list)) |
509 | goto err; | ||
510 | if (CBS_len(&cbs) != 0) | ||
511 | goto err; | 495 | goto err; |
512 | 496 | ||
513 | while (CBS_len(&cert_list) > 0) { | 497 | while (CBS_len(&cert_list) > 0) { |
@@ -595,7 +579,7 @@ static uint8_t cert_verify_pad[64] = { | |||
595 | static uint8_t server_cert_verify_context[] = "TLS 1.3, server CertificateVerify"; | 579 | static uint8_t server_cert_verify_context[] = "TLS 1.3, server CertificateVerify"; |
596 | 580 | ||
597 | int | 581 | int |
598 | tls13_server_certificate_verify_recv(struct tls13_ctx *ctx) | 582 | tls13_server_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs) |
599 | { | 583 | { |
600 | const struct ssl_sigalg *sigalg; | 584 | const struct ssl_sigalg *sigalg; |
601 | uint16_t signature_scheme; | 585 | uint16_t signature_scheme; |
@@ -605,20 +589,15 @@ tls13_server_certificate_verify_recv(struct tls13_ctx *ctx) | |||
605 | EVP_PKEY_CTX *pctx; | 589 | EVP_PKEY_CTX *pctx; |
606 | EVP_PKEY *pkey; | 590 | EVP_PKEY *pkey; |
607 | X509 *cert; | 591 | X509 *cert; |
608 | CBS cbs, signature; | 592 | CBS signature; |
609 | CBB cbb; | 593 | CBB cbb; |
610 | int ret = 0; | 594 | int ret = 0; |
611 | 595 | ||
612 | memset(&cbb, 0, sizeof(cbb)); | 596 | memset(&cbb, 0, sizeof(cbb)); |
613 | 597 | ||
614 | if (!tls13_handshake_msg_content(ctx->hs_msg, &cbs)) | 598 | if (!CBS_get_u16(cbs, &signature_scheme)) |
615 | goto err; | ||
616 | |||
617 | if (!CBS_get_u16(&cbs, &signature_scheme)) | ||
618 | goto err; | ||
619 | if (!CBS_get_u16_length_prefixed(&cbs, &signature)) | ||
620 | goto err; | 599 | goto err; |
621 | if (CBS_len(&cbs) != 0) | 600 | if (!CBS_get_u16_length_prefixed(cbs, &signature)) |
622 | goto err; | 601 | goto err; |
623 | 602 | ||
624 | if ((sigalg = ssl_sigalg(signature_scheme, tls13_sigalgs, | 603 | if ((sigalg = ssl_sigalg(signature_scheme, tls13_sigalgs, |
@@ -680,7 +659,7 @@ tls13_server_certificate_verify_recv(struct tls13_ctx *ctx) | |||
680 | } | 659 | } |
681 | 660 | ||
682 | int | 661 | int |
683 | tls13_server_finished_recv(struct tls13_ctx *ctx) | 662 | tls13_server_finished_recv(struct tls13_ctx *ctx, CBS *cbs) |
684 | { | 663 | { |
685 | struct tls13_secrets *secrets = ctx->hs->secrets; | 664 | struct tls13_secrets *secrets = ctx->hs->secrets; |
686 | struct tls13_secret context = { .data = "", .len = 0 }; | 665 | struct tls13_secret context = { .data = "", .len = 0 }; |
@@ -693,10 +672,6 @@ tls13_server_finished_recv(struct tls13_ctx *ctx) | |||
693 | HMAC_CTX *hmac_ctx = NULL; | 672 | HMAC_CTX *hmac_ctx = NULL; |
694 | unsigned int hlen; | 673 | unsigned int hlen; |
695 | int ret = 0; | 674 | int ret = 0; |
696 | CBS cbs; | ||
697 | |||
698 | if (!tls13_handshake_msg_content(ctx->hs_msg, &cbs)) | ||
699 | goto err; | ||
700 | 675 | ||
701 | /* | 676 | /* |
702 | * Verify server finished. | 677 | * Verify server finished. |
@@ -725,11 +700,14 @@ tls13_server_finished_recv(struct tls13_ctx *ctx) | |||
725 | if (hlen != verify_data_len) | 700 | if (hlen != verify_data_len) |
726 | goto err; | 701 | goto err; |
727 | 702 | ||
728 | if (!CBS_mem_equal(&cbs, verify_data, verify_data_len)) { | 703 | if (!CBS_mem_equal(cbs, verify_data, verify_data_len)) { |
729 | ctx->alert = TLS1_AD_DECRYPTION_FAILED; | 704 | ctx->alert = TLS1_AD_DECRYPTION_FAILED; |
730 | goto err; | 705 | goto err; |
731 | } | 706 | } |
732 | 707 | ||
708 | if (!CBS_skip(cbs, verify_data_len)) | ||
709 | goto err; | ||
710 | |||
733 | /* | 711 | /* |
734 | * Derive application traffic keys. | 712 | * Derive application traffic keys. |
735 | */ | 713 | */ |
@@ -864,9 +842,6 @@ tls13_client_hello_retry_process(struct tls13_ctx *ctx, CBS *cbs) | |||
864 | goto err; | 842 | goto err; |
865 | } | 843 | } |
866 | 844 | ||
867 | if (CBS_len(cbs) != 0) | ||
868 | goto err; | ||
869 | |||
870 | /* XXX for now, just say no, we will not change our hello */ | 845 | /* XXX for now, just say no, we will not change our hello */ |
871 | ctx->alert = SSL_AD_ILLEGAL_PARAMETER; | 846 | ctx->alert = SSL_AD_ILLEGAL_PARAMETER; |
872 | err: | 847 | err: |
@@ -876,15 +851,11 @@ tls13_client_hello_retry_process(struct tls13_ctx *ctx, CBS *cbs) | |||
876 | } | 851 | } |
877 | 852 | ||
878 | int | 853 | int |
879 | tls13_client_hello_retry_recv(struct tls13_ctx *ctx) | 854 | tls13_client_hello_retry_recv(struct tls13_ctx *ctx, CBS *cbs) |
880 | { | 855 | { |
881 | int ret = 0; | 856 | int ret = 0; |
882 | CBS cbs; | ||
883 | |||
884 | if (!tls13_handshake_msg_content(ctx->hs_msg, &cbs)) | ||
885 | goto err; | ||
886 | 857 | ||
887 | if (!tls13_client_hello_retry_process(ctx, &cbs)) { | 858 | if (!tls13_client_hello_retry_process(ctx, cbs)) { |
888 | if (ctx->alert == SSL_AD_ILLEGAL_PARAMETER) | 859 | if (ctx->alert == SSL_AD_ILLEGAL_PARAMETER) |
889 | tls13_set_errorx(ctx, TLS13_ERR_HRR_FAILED, 0, | 860 | tls13_set_errorx(ctx, TLS13_ERR_HRR_FAILED, 0, |
890 | "Unsatisfiable hello retry request", NULL); | 861 | "Unsatisfiable hello retry request", NULL); |
diff --git a/src/lib/libssl/tls13_handshake.c b/src/lib/libssl/tls13_handshake.c index ca36f879b4..d4d998248d 100644 --- a/src/lib/libssl/tls13_handshake.c +++ b/src/lib/libssl/tls13_handshake.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_handshake.c,v 1.39 2020/01/22 02:39:45 tb Exp $ */ | 1 | /* $OpenBSD: tls13_handshake.c,v 1.40 2020/01/22 13:10:51 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018-2019 Theo Buehler <tb@openbsd.org> | 3 | * Copyright (c) 2018-2019 Theo Buehler <tb@openbsd.org> |
4 | * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> | 4 | * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> |
@@ -32,7 +32,7 @@ struct tls13_handshake_action { | |||
32 | 32 | ||
33 | int (*send)(struct tls13_ctx *ctx); | 33 | int (*send)(struct tls13_ctx *ctx); |
34 | int (*sent)(struct tls13_ctx *ctx); | 34 | int (*sent)(struct tls13_ctx *ctx); |
35 | int (*recv)(struct tls13_ctx *ctx); | 35 | int (*recv)(struct tls13_ctx *ctx, CBS *cbs); |
36 | }; | 36 | }; |
37 | 37 | ||
38 | enum tls13_message_type tls13_handshake_active_state(struct tls13_ctx *ctx); | 38 | enum tls13_message_type tls13_handshake_active_state(struct tls13_ctx *ctx); |
@@ -389,11 +389,21 @@ tls13_handshake_recv_action(struct tls13_ctx *ctx, | |||
389 | action->handshake_type != TLS13_MT_CERTIFICATE_REQUEST)) | 389 | action->handshake_type != TLS13_MT_CERTIFICATE_REQUEST)) |
390 | return tls13_send_alert(ctx->rl, SSL_AD_UNEXPECTED_MESSAGE); | 390 | return tls13_send_alert(ctx->rl, SSL_AD_UNEXPECTED_MESSAGE); |
391 | 391 | ||
392 | /* XXX provide CBS and check all consumed. */ | 392 | if (!tls13_handshake_msg_content(ctx->hs_msg, &cbs)) |
393 | return TLS13_IO_FAILURE; | ||
394 | |||
393 | ret = TLS13_IO_FAILURE; | 395 | ret = TLS13_IO_FAILURE; |
394 | if (action->recv(ctx)) | 396 | if (action->recv(ctx, &cbs)) { |
395 | ret = TLS13_IO_SUCCESS; | 397 | if (CBS_len(&cbs) != 0) { |
396 | else if (ctx->alert) | 398 | tls13_set_errorx(ctx, TLS13_ERR_TRAILING_DATA, 0, |
399 | "trailing data in handshake message", NULL); | ||
400 | ctx->alert = SSL_AD_DECODE_ERROR; | ||
401 | } else { | ||
402 | ret = TLS13_IO_SUCCESS; | ||
403 | } | ||
404 | } | ||
405 | |||
406 | if (ctx->alert) | ||
397 | ret = tls13_send_alert(ctx->rl, ctx->alert); | 407 | ret = tls13_send_alert(ctx->rl, ctx->alert); |
398 | 408 | ||
399 | tls13_handshake_msg_free(ctx->hs_msg); | 409 | tls13_handshake_msg_free(ctx->hs_msg); |
diff --git a/src/lib/libssl/tls13_internal.h b/src/lib/libssl/tls13_internal.h index 68a129a634..ba34961e33 100644 --- a/src/lib/libssl/tls13_internal.h +++ b/src/lib/libssl/tls13_internal.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_internal.h,v 1.44 2020/01/22 06:23:00 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_internal.h,v 1.45 2020/01/22 13:10:51 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018 Bob Beck <beck@openbsd.org> | 3 | * Copyright (c) 2018 Bob Beck <beck@openbsd.org> |
4 | * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> | 4 | * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> |
@@ -39,6 +39,7 @@ __BEGIN_HIDDEN_DECLS | |||
39 | 39 | ||
40 | #define TLS13_ERR_VERIFY_FAILED 16 | 40 | #define TLS13_ERR_VERIFY_FAILED 16 |
41 | #define TLS13_ERR_HRR_FAILED 17 | 41 | #define TLS13_ERR_HRR_FAILED 17 |
42 | #define TLS13_ERR_TRAILING_DATA 18 | ||
42 | 43 | ||
43 | typedef void (*tls13_alert_cb)(uint8_t _alert_desc, void *_cb_arg); | 44 | typedef void (*tls13_alert_cb)(uint8_t _alert_desc, void *_cb_arg); |
44 | typedef ssize_t (*tls13_phh_recv_cb)(void *_cb_arg, CBS *cbs); | 45 | typedef ssize_t (*tls13_phh_recv_cb)(void *_cb_arg, CBS *cbs); |
@@ -258,33 +259,33 @@ int tls13_handshake_perform(struct tls13_ctx *ctx); | |||
258 | 259 | ||
259 | int tls13_client_hello_send(struct tls13_ctx *ctx); | 260 | int tls13_client_hello_send(struct tls13_ctx *ctx); |
260 | int tls13_client_hello_sent(struct tls13_ctx *ctx); | 261 | int tls13_client_hello_sent(struct tls13_ctx *ctx); |
261 | int tls13_client_hello_recv(struct tls13_ctx *ctx); | 262 | int tls13_client_hello_recv(struct tls13_ctx *ctx, CBS *cbs); |
262 | int tls13_client_hello_retry_send(struct tls13_ctx *ctx); | 263 | int tls13_client_hello_retry_send(struct tls13_ctx *ctx); |
263 | int tls13_client_hello_retry_recv(struct tls13_ctx *ctx); | 264 | int tls13_client_hello_retry_recv(struct tls13_ctx *ctx, CBS *cbs); |
264 | int tls13_client_end_of_early_data_send(struct tls13_ctx *ctx); | 265 | int tls13_client_end_of_early_data_send(struct tls13_ctx *ctx); |
265 | int tls13_client_end_of_early_data_recv(struct tls13_ctx *ctx); | 266 | int tls13_client_end_of_early_data_recv(struct tls13_ctx *ctx, CBS *cbs); |
266 | int tls13_client_certificate_send(struct tls13_ctx *ctx); | 267 | int tls13_client_certificate_send(struct tls13_ctx *ctx); |
267 | int tls13_client_certificate_recv(struct tls13_ctx *ctx); | 268 | int tls13_client_certificate_recv(struct tls13_ctx *ctx, CBS *cbs); |
268 | int tls13_client_certificate_verify_send(struct tls13_ctx *ctx); | 269 | int tls13_client_certificate_verify_send(struct tls13_ctx *ctx); |
269 | int tls13_client_certificate_verify_recv(struct tls13_ctx *ctx); | 270 | int tls13_client_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs); |
270 | int tls13_client_finished_recv(struct tls13_ctx *ctx); | 271 | int tls13_client_finished_recv(struct tls13_ctx *ctx, CBS *cbs); |
271 | int tls13_client_finished_send(struct tls13_ctx *ctx); | 272 | int tls13_client_finished_send(struct tls13_ctx *ctx); |
272 | int tls13_client_finished_sent(struct tls13_ctx *ctx); | 273 | int tls13_client_finished_sent(struct tls13_ctx *ctx); |
273 | int tls13_client_key_update_send(struct tls13_ctx *ctx); | 274 | int tls13_client_key_update_send(struct tls13_ctx *ctx); |
274 | int tls13_client_key_update_recv(struct tls13_ctx *ctx); | 275 | int tls13_client_key_update_recv(struct tls13_ctx *ctx, CBS *cbs); |
275 | int tls13_server_hello_recv(struct tls13_ctx *ctx); | 276 | int tls13_server_hello_recv(struct tls13_ctx *ctx, CBS *cbs); |
276 | int tls13_server_hello_send(struct tls13_ctx *ctx); | 277 | int tls13_server_hello_send(struct tls13_ctx *ctx); |
277 | int tls13_server_hello_retry_recv(struct tls13_ctx *ctx); | 278 | int tls13_server_hello_retry_recv(struct tls13_ctx *ctx, CBS *cbs); |
278 | int tls13_server_hello_retry_send(struct tls13_ctx *ctx); | 279 | int tls13_server_hello_retry_send(struct tls13_ctx *ctx); |
279 | int tls13_server_encrypted_extensions_recv(struct tls13_ctx *ctx); | 280 | int tls13_server_encrypted_extensions_recv(struct tls13_ctx *ctx, CBS *cbs); |
280 | int tls13_server_encrypted_extensions_send(struct tls13_ctx *ctx); | 281 | int tls13_server_encrypted_extensions_send(struct tls13_ctx *ctx); |
281 | int tls13_server_certificate_recv(struct tls13_ctx *ctx); | 282 | int tls13_server_certificate_recv(struct tls13_ctx *ctx, CBS *cbs); |
282 | int tls13_server_certificate_send(struct tls13_ctx *ctx); | 283 | int tls13_server_certificate_send(struct tls13_ctx *ctx); |
283 | int tls13_server_certificate_request_recv(struct tls13_ctx *ctx); | 284 | int tls13_server_certificate_request_recv(struct tls13_ctx *ctx, CBS *cbs); |
284 | int tls13_server_certificate_request_send(struct tls13_ctx *ctx); | 285 | int tls13_server_certificate_request_send(struct tls13_ctx *ctx); |
285 | int tls13_server_certificate_verify_send(struct tls13_ctx *ctx); | 286 | int tls13_server_certificate_verify_send(struct tls13_ctx *ctx); |
286 | int tls13_server_certificate_verify_recv(struct tls13_ctx *ctx); | 287 | int tls13_server_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs); |
287 | int tls13_server_finished_recv(struct tls13_ctx *ctx); | 288 | int tls13_server_finished_recv(struct tls13_ctx *ctx, CBS *cbs); |
288 | int tls13_server_finished_send(struct tls13_ctx *ctx); | 289 | int tls13_server_finished_send(struct tls13_ctx *ctx); |
289 | 290 | ||
290 | void tls13_error_clear(struct tls13_error *error); | 291 | void tls13_error_clear(struct tls13_error *error); |
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c index 73d936ac3f..51a2a383ed 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.20 2020/01/22 06:23:00 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_lib.c,v 1.21 2020/01/22 13:10:51 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> |
@@ -356,6 +356,9 @@ tls13_legacy_error(SSL *ssl) | |||
356 | case TLS13_ERR_HRR_FAILED: | 356 | case TLS13_ERR_HRR_FAILED: |
357 | reason = SSL_R_NO_CIPHERS_AVAILABLE; | 357 | reason = SSL_R_NO_CIPHERS_AVAILABLE; |
358 | break; | 358 | break; |
359 | case TLS13_ERR_TRAILING_DATA: | ||
360 | reason = SSL_R_EXTRA_DATA_IN_MESSAGE; | ||
361 | break; | ||
359 | } | 362 | } |
360 | 363 | ||
361 | ERR_put_error(ERR_LIB_SSL, (0xfff), reason, ctx->error.file, | 364 | ERR_put_error(ERR_LIB_SSL, (0xfff), reason, ctx->error.file, |
diff --git a/src/lib/libssl/tls13_server.c b/src/lib/libssl/tls13_server.c index fc3e80ad58..90a339dc61 100644 --- a/src/lib/libssl/tls13_server.c +++ b/src/lib/libssl/tls13_server.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_server.c,v 1.5 2020/01/22 05:06:23 tb Exp $ */ | 1 | /* $OpenBSD: tls13_server.c,v 1.6 2020/01/22 13:10:51 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -79,7 +79,7 @@ tls13_legacy_accept(SSL *ssl) | |||
79 | } | 79 | } |
80 | 80 | ||
81 | int | 81 | int |
82 | tls13_client_hello_recv(struct tls13_ctx *ctx) | 82 | tls13_client_hello_recv(struct tls13_ctx *ctx, CBS *cbs) |
83 | { | 83 | { |
84 | tls13_record_layer_allow_ccs(ctx->rl, 1); | 84 | tls13_record_layer_allow_ccs(ctx->rl, 1); |
85 | 85 | ||
@@ -93,7 +93,7 @@ tls13_client_hello_retry_send(struct tls13_ctx *ctx) | |||
93 | } | 93 | } |
94 | 94 | ||
95 | int | 95 | int |
96 | tls13_server_hello_retry_recv(struct tls13_ctx *ctx) | 96 | tls13_server_hello_retry_recv(struct tls13_ctx *ctx, CBS *cbs) |
97 | { | 97 | { |
98 | return 0; | 98 | return 0; |
99 | } | 99 | } |
@@ -105,7 +105,7 @@ tls13_client_end_of_early_data_send(struct tls13_ctx *ctx) | |||
105 | } | 105 | } |
106 | 106 | ||
107 | int | 107 | int |
108 | tls13_client_end_of_early_data_recv(struct tls13_ctx *ctx) | 108 | tls13_client_end_of_early_data_recv(struct tls13_ctx *ctx, CBS *cbs) |
109 | { | 109 | { |
110 | return 0; | 110 | return 0; |
111 | } | 111 | } |
@@ -117,7 +117,7 @@ tls13_client_certificate_send(struct tls13_ctx *ctx) | |||
117 | } | 117 | } |
118 | 118 | ||
119 | int | 119 | int |
120 | tls13_client_certificate_recv(struct tls13_ctx *ctx) | 120 | tls13_client_certificate_recv(struct tls13_ctx *ctx, CBS *cbs) |
121 | { | 121 | { |
122 | return 0; | 122 | return 0; |
123 | } | 123 | } |
@@ -129,13 +129,13 @@ tls13_client_certificate_verify_send(struct tls13_ctx *ctx) | |||
129 | } | 129 | } |
130 | 130 | ||
131 | int | 131 | int |
132 | tls13_client_certificate_verify_recv(struct tls13_ctx *ctx) | 132 | tls13_client_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs) |
133 | { | 133 | { |
134 | return 0; | 134 | return 0; |
135 | } | 135 | } |
136 | 136 | ||
137 | int | 137 | int |
138 | tls13_client_finished_recv(struct tls13_ctx *ctx) | 138 | tls13_client_finished_recv(struct tls13_ctx *ctx, CBS *cbs) |
139 | { | 139 | { |
140 | tls13_record_layer_allow_ccs(ctx->rl, 0); | 140 | tls13_record_layer_allow_ccs(ctx->rl, 0); |
141 | 141 | ||
@@ -149,7 +149,7 @@ tls13_client_key_update_send(struct tls13_ctx *ctx) | |||
149 | } | 149 | } |
150 | 150 | ||
151 | int | 151 | int |
152 | tls13_client_key_update_recv(struct tls13_ctx *ctx) | 152 | tls13_client_key_update_recv(struct tls13_ctx *ctx, CBS *cbs) |
153 | { | 153 | { |
154 | return 0; | 154 | return 0; |
155 | } | 155 | } |