summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_tlsext.c
diff options
context:
space:
mode:
authorbeck <>2019-01-23 18:39:28 +0000
committerbeck <>2019-01-23 18:39:28 +0000
commit934b3985a409d7e0a88557dd4313222194a110bd (patch)
treee5f32c31b20068e7d8674ff7ddb1ea2fe2ca16fa /src/lib/libssl/ssl_tlsext.c
parent03a77eef903481d4308502d32fca33a961c4bb3a (diff)
downloadopenbsd-934b3985a409d7e0a88557dd4313222194a110bd.tar.gz
openbsd-934b3985a409d7e0a88557dd4313222194a110bd.tar.bz2
openbsd-934b3985a409d7e0a88557dd4313222194a110bd.zip
Modify sigalgs extension processing to accomodate TLS 1.3.
- Make a separate sigalgs list for TLS 1.3 including only modern algorithm choices which we use when the handshake will not negotiate TLS 1.2. - Modify the legacy sigalgs for TLS 1.2 to include the RSA PSS algorithms as mandated by RFC8446 when the handshake will permit negotiation of TLS 1.2 from a 1.3 handshake. ok jsing@ tb@
Diffstat (limited to 'src/lib/libssl/ssl_tlsext.c')
-rw-r--r--src/lib/libssl/ssl_tlsext.c36
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
559int 589int