diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/ssl_tlsext.c | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c index 24f2bd5022..5cebd1d630 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.56 2020/01/25 12:37:06 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_tlsext.c,v 1.57 2020/01/26 03:29:30 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> |
| @@ -571,20 +571,49 @@ tlsext_sigalgs_server_parse(SSL *s, CBS *cbs, int *alert) | |||
| 571 | int | 571 | int |
| 572 | tlsext_sigalgs_server_needs(SSL *s) | 572 | tlsext_sigalgs_server_needs(SSL *s) |
| 573 | { | 573 | { |
| 574 | return 0; | 574 | return (s->version >= TLS1_3_VERSION); |
| 575 | } | 575 | } |
| 576 | 576 | ||
| 577 | int | 577 | int |
| 578 | tlsext_sigalgs_server_build(SSL *s, CBB *cbb) | 578 | tlsext_sigalgs_server_build(SSL *s, CBB *cbb) |
| 579 | { | 579 | { |
| 580 | return 0; | 580 | uint16_t *tls_sigalgs = tls12_sigalgs; |
| 581 | size_t tls_sigalgs_len = tls12_sigalgs_len; | ||
| 582 | CBB sigalgs; | ||
| 583 | |||
| 584 | if (s->version >= TLS1_3_VERSION) { | ||
| 585 | tls_sigalgs = tls13_sigalgs; | ||
| 586 | tls_sigalgs_len = tls13_sigalgs_len; | ||
| 587 | } | ||
| 588 | |||
| 589 | if (!CBB_add_u16_length_prefixed(cbb, &sigalgs)) | ||
| 590 | return 0; | ||
| 591 | |||
| 592 | if (!ssl_sigalgs_build(&sigalgs, tls_sigalgs, tls_sigalgs_len)) | ||
| 593 | return 0; | ||
| 594 | |||
| 595 | if (!CBB_flush(cbb)) | ||
| 596 | return 0; | ||
| 597 | |||
| 598 | return 1; | ||
| 581 | } | 599 | } |
| 582 | 600 | ||
| 583 | int | 601 | int |
| 584 | tlsext_sigalgs_client_parse(SSL *s, CBS *cbs, int *alert) | 602 | tlsext_sigalgs_client_parse(SSL *s, CBS *cbs, int *alert) |
| 585 | { | 603 | { |
| 586 | /* As per the RFC, servers must not send this extension. */ | 604 | CBS sigalgs; |
| 587 | return 0; | 605 | |
| 606 | if (s->version < TLS1_3_VERSION) | ||
| 607 | return 0; | ||
| 608 | |||
| 609 | if (!CBS_get_u16_length_prefixed(cbs, &sigalgs)) | ||
| 610 | return 0; | ||
| 611 | if (CBS_len(&sigalgs) % 2 != 0 || CBS_len(&sigalgs) > 64) | ||
| 612 | return 0; | ||
| 613 | if (!CBS_stow(&sigalgs, &S3I(s)->hs.sigalgs, &S3I(s)->hs.sigalgs_len)) | ||
| 614 | return 0; | ||
| 615 | |||
| 616 | return 1; | ||
| 588 | } | 617 | } |
| 589 | 618 | ||
| 590 | /* | 619 | /* |
