diff options
Diffstat (limited to 'src/lib/libssl/ssl_tlsext.c')
| -rw-r--r-- | src/lib/libssl/ssl_tlsext.c | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c index d5c30c4e73..2214a61ed3 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.33 2019/01/23 18:24:40 beck Exp $ */ | 1 | /* $OpenBSD: ssl_tlsext.c,v 1.34 2019/01/23 18:39:28 beck 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> |
| @@ -536,8 +536,27 @@ tlsext_sigalgs_client_build(SSL *s, CBB *cbb) | |||
| 536 | if (!CBB_add_u16_length_prefixed(cbb, &sigalgs)) | 536 | if (!CBB_add_u16_length_prefixed(cbb, &sigalgs)) |
| 537 | return 0; | 537 | return 0; |
| 538 | 538 | ||
| 539 | if (!ssl_sigalgs_build(&sigalgs, tls12_sigalgs, tls12_sigalgs_len)) | 539 | switch (TLS1_get_client_version(s)) { |
| 540 | case TLS1_2_VERSION: | ||
| 541 | if (!ssl_sigalgs_build(&sigalgs, tls12_sigalgs, tls12_sigalgs_len)) | ||
| 542 | return 0; | ||
| 543 | break; | ||
| 544 | case TLS1_3_VERSION: | ||
| 545 | if (S3I(s)->hs_tls13.min_version < TLS1_3_VERSION) { | ||
| 546 | if (!ssl_sigalgs_build(&sigalgs, tls12_sigalgs, | ||
| 547 | tls12_sigalgs_len)) | ||
| 548 | return 0; | ||
| 549 | } | ||
| 550 | else { | ||
| 551 | if (!ssl_sigalgs_build(&sigalgs, tls13_sigalgs, | ||
| 552 | tls13_sigalgs_len)) | ||
| 553 | return 0; | ||
| 554 | } | ||
| 555 | break; | ||
| 556 | default: | ||
| 557 | /* Should not happen */ | ||
| 540 | return 0; | 558 | return 0; |
| 559 | } | ||
| 541 | 560 | ||
| 542 | if (!CBB_flush(cbb)) | 561 | if (!CBB_flush(cbb)) |
| 543 | return 0; | 562 | return 0; |
| @@ -553,7 +572,18 @@ tlsext_sigalgs_server_parse(SSL *s, CBS *cbs, int *alert) | |||
| 553 | if (!CBS_get_u16_length_prefixed(cbs, &sigalgs)) | 572 | if (!CBS_get_u16_length_prefixed(cbs, &sigalgs)) |
| 554 | return 0; | 573 | return 0; |
| 555 | 574 | ||
| 556 | return tls1_process_sigalgs(s, &sigalgs); | 575 | switch (s->version) { |
| 576 | case TLS1_3_VERSION: | ||
| 577 | return tls1_process_sigalgs(s, &sigalgs, tls13_sigalgs, | ||
| 578 | tls13_sigalgs_len); | ||
| 579 | case TLS1_2_VERSION: | ||
| 580 | return tls1_process_sigalgs(s, &sigalgs, tls12_sigalgs, | ||
| 581 | tls12_sigalgs_len); | ||
| 582 | default: | ||
| 583 | break; | ||
| 584 | } | ||
| 585 | |||
| 586 | return 0; | ||
| 557 | } | 587 | } |
| 558 | 588 | ||
| 559 | int | 589 | int |
