diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libssl/ssl_tlsext.c | 52 |
1 files changed, 19 insertions, 33 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c index c99ad671dc..08aafb206a 100644 --- a/src/lib/libssl/ssl_tlsext.c +++ b/src/lib/libssl/ssl_tlsext.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_tlsext.c,v 1.38 2019/01/28 15:52:17 beck Exp $ */ | 1 | /* $OpenBSD: ssl_tlsext.c,v 1.39 2019/01/30 16:37:32 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org> |
| 4 | * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> | 4 | * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> |
| @@ -540,32 +540,21 @@ tlsext_sigalgs_client_needs(SSL *s) | |||
| 540 | int | 540 | int |
| 541 | tlsext_sigalgs_client_build(SSL *s, CBB *cbb) | 541 | tlsext_sigalgs_client_build(SSL *s, CBB *cbb) |
| 542 | { | 542 | { |
| 543 | uint16_t *tls_sigalgs = tls12_sigalgs; | ||
| 544 | size_t tls_sigalgs_len = tls12_sigalgs_len; | ||
| 543 | CBB sigalgs; | 545 | CBB sigalgs; |
| 544 | 546 | ||
| 547 | if (TLS1_get_client_version(s) >= TLS1_3_VERSION && | ||
| 548 | S3I(s)->hs_tls13.min_version >= TLS1_3_VERSION) { | ||
| 549 | tls_sigalgs = tls13_sigalgs; | ||
| 550 | tls_sigalgs_len = tls13_sigalgs_len; | ||
| 551 | } | ||
| 552 | |||
| 545 | if (!CBB_add_u16_length_prefixed(cbb, &sigalgs)) | 553 | if (!CBB_add_u16_length_prefixed(cbb, &sigalgs)) |
| 546 | return 0; | 554 | return 0; |
| 547 | 555 | ||
| 548 | switch (TLS1_get_client_version(s)) { | 556 | if (!ssl_sigalgs_build(&sigalgs, tls_sigalgs, tls_sigalgs_len)) |
| 549 | case TLS1_2_VERSION: | ||
| 550 | if (!ssl_sigalgs_build(&sigalgs, tls12_sigalgs, tls12_sigalgs_len)) | ||
| 551 | return 0; | ||
| 552 | break; | ||
| 553 | case TLS1_3_VERSION: | ||
| 554 | if (S3I(s)->hs_tls13.min_version < TLS1_3_VERSION) { | ||
| 555 | if (!ssl_sigalgs_build(&sigalgs, tls12_sigalgs, | ||
| 556 | tls12_sigalgs_len)) | ||
| 557 | return 0; | ||
| 558 | } | ||
| 559 | else { | ||
| 560 | if (!ssl_sigalgs_build(&sigalgs, tls13_sigalgs, | ||
| 561 | tls13_sigalgs_len)) | ||
| 562 | return 0; | ||
| 563 | } | ||
| 564 | break; | ||
| 565 | default: | ||
| 566 | /* Should not happen */ | ||
| 567 | return 0; | 557 | return 0; |
| 568 | } | ||
| 569 | 558 | ||
| 570 | if (!CBB_flush(cbb)) | 559 | if (!CBB_flush(cbb)) |
| 571 | return 0; | 560 | return 0; |
| @@ -576,23 +565,20 @@ tlsext_sigalgs_client_build(SSL *s, CBB *cbb) | |||
| 576 | int | 565 | int |
| 577 | tlsext_sigalgs_server_parse(SSL *s, CBS *cbs, int *alert) | 566 | tlsext_sigalgs_server_parse(SSL *s, CBS *cbs, int *alert) |
| 578 | { | 567 | { |
| 568 | uint16_t *tls_sigalgs = tls12_sigalgs; | ||
| 569 | size_t tls_sigalgs_len = tls12_sigalgs_len; | ||
| 579 | CBS sigalgs; | 570 | CBS sigalgs; |
| 580 | 571 | ||
| 572 | if (s->version >= TLS1_3_VERSION) { | ||
| 573 | tls_sigalgs = tls13_sigalgs; | ||
| 574 | tls_sigalgs_len = tls13_sigalgs_len; | ||
| 575 | } | ||
| 576 | |||
| 581 | if (!CBS_get_u16_length_prefixed(cbs, &sigalgs)) | 577 | if (!CBS_get_u16_length_prefixed(cbs, &sigalgs)) |
| 582 | return 0; | 578 | return 0; |
| 583 | 579 | ||
| 584 | switch (s->version) { | 580 | return tls1_process_sigalgs(s, &sigalgs, tls_sigalgs, |
| 585 | case TLS1_3_VERSION: | 581 | tls_sigalgs_len); |
| 586 | return tls1_process_sigalgs(s, &sigalgs, tls13_sigalgs, | ||
| 587 | tls13_sigalgs_len); | ||
| 588 | case TLS1_2_VERSION: | ||
| 589 | return tls1_process_sigalgs(s, &sigalgs, tls12_sigalgs, | ||
| 590 | tls12_sigalgs_len); | ||
| 591 | default: | ||
| 592 | break; | ||
| 593 | } | ||
| 594 | |||
| 595 | return 0; | ||
| 596 | } | 582 | } |
| 597 | 583 | ||
| 598 | int | 584 | int |
