diff options
Diffstat (limited to 'src/lib/libssl/t1_lib.c')
-rw-r--r-- | src/lib/libssl/t1_lib.c | 63 |
1 files changed, 5 insertions, 58 deletions
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index 8d56e74759..bf5e2de80b 100644 --- a/src/lib/libssl/t1_lib.c +++ b/src/lib/libssl/t1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_lib.c,v 1.120 2017/07/23 16:27:44 jsing Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.121 2017/07/24 17:10:31 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -720,29 +720,6 @@ ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned char *limit) | |||
720 | return NULL; | 720 | return NULL; |
721 | ret += len; | 721 | ret += len; |
722 | 722 | ||
723 | /* Add RI if renegotiating */ | ||
724 | if (s->internal->renegotiate) { | ||
725 | int el; | ||
726 | |||
727 | if (!ssl_add_clienthello_renegotiate_ext(s, 0, &el, 0)) { | ||
728 | SSLerror(s, ERR_R_INTERNAL_ERROR); | ||
729 | return NULL; | ||
730 | } | ||
731 | |||
732 | if ((size_t)(limit - ret) < 4 + el) | ||
733 | return NULL; | ||
734 | |||
735 | s2n(TLSEXT_TYPE_renegotiate, ret); | ||
736 | s2n(el, ret); | ||
737 | |||
738 | if (!ssl_add_clienthello_renegotiate_ext(s, ret, &el, el)) { | ||
739 | SSLerror(s, ERR_R_INTERNAL_ERROR); | ||
740 | return NULL; | ||
741 | } | ||
742 | |||
743 | ret += el; | ||
744 | } | ||
745 | |||
746 | if (using_ecc) { | 723 | if (using_ecc) { |
747 | size_t curveslen, formatslen, lenmax; | 724 | size_t curveslen, formatslen, lenmax; |
748 | const uint16_t *curves; | 725 | const uint16_t *curves; |
@@ -1006,28 +983,6 @@ ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit) | |||
1006 | return NULL; | 983 | return NULL; |
1007 | ret += len; | 984 | ret += len; |
1008 | 985 | ||
1009 | if (S3I(s)->send_connection_binding) { | ||
1010 | int el; | ||
1011 | |||
1012 | if (!ssl_add_serverhello_renegotiate_ext(s, 0, &el, 0)) { | ||
1013 | SSLerror(s, ERR_R_INTERNAL_ERROR); | ||
1014 | return NULL; | ||
1015 | } | ||
1016 | |||
1017 | if ((size_t)(limit - ret) < 4 + el) | ||
1018 | return NULL; | ||
1019 | |||
1020 | s2n(TLSEXT_TYPE_renegotiate, ret); | ||
1021 | s2n(el, ret); | ||
1022 | |||
1023 | if (!ssl_add_serverhello_renegotiate_ext(s, ret, &el, el)) { | ||
1024 | SSLerror(s, ERR_R_INTERNAL_ERROR); | ||
1025 | return NULL; | ||
1026 | } | ||
1027 | |||
1028 | ret += el; | ||
1029 | } | ||
1030 | |||
1031 | if (using_ecc && s->version != DTLS1_VERSION) { | 986 | if (using_ecc && s->version != DTLS1_VERSION) { |
1032 | const unsigned char *formats; | 987 | const unsigned char *formats; |
1033 | size_t formatslen, lenmax; | 988 | size_t formatslen, lenmax; |
@@ -1229,12 +1184,12 @@ ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, | |||
1229 | unsigned short len; | 1184 | unsigned short len; |
1230 | unsigned char *data = *p; | 1185 | unsigned char *data = *p; |
1231 | unsigned char *end = d + n; | 1186 | unsigned char *end = d + n; |
1232 | int renegotiate_seen = 0; | ||
1233 | int sigalg_seen = 0; | 1187 | int sigalg_seen = 0; |
1234 | CBS cbs; | 1188 | CBS cbs; |
1235 | 1189 | ||
1236 | s->internal->servername_done = 0; | 1190 | s->internal->servername_done = 0; |
1237 | s->tlsext_status_type = -1; | 1191 | s->tlsext_status_type = -1; |
1192 | S3I(s)->renegotiate_seen = 0; | ||
1238 | S3I(s)->next_proto_neg_seen = 0; | 1193 | S3I(s)->next_proto_neg_seen = 0; |
1239 | free(S3I(s)->alpn_selected); | 1194 | free(S3I(s)->alpn_selected); |
1240 | S3I(s)->alpn_selected = NULL; | 1195 | S3I(s)->alpn_selected = NULL; |
@@ -1335,10 +1290,6 @@ ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, | |||
1335 | *al = TLS1_AD_INTERNAL_ERROR; | 1290 | *al = TLS1_AD_INTERNAL_ERROR; |
1336 | return 0; | 1291 | return 0; |
1337 | } | 1292 | } |
1338 | } else if (type == TLSEXT_TYPE_renegotiate) { | ||
1339 | if (!ssl_parse_clienthello_renegotiate_ext(s, data, size, al)) | ||
1340 | return 0; | ||
1341 | renegotiate_seen = 1; | ||
1342 | } else if (type == TLSEXT_TYPE_signature_algorithms) { | 1293 | } else if (type == TLSEXT_TYPE_signature_algorithms) { |
1343 | int dsize; | 1294 | int dsize; |
1344 | if (sigalg_seen || size < 2) { | 1295 | if (sigalg_seen || size < 2) { |
@@ -1513,7 +1464,7 @@ ri_check: | |||
1513 | 1464 | ||
1514 | /* Need RI if renegotiating */ | 1465 | /* Need RI if renegotiating */ |
1515 | 1466 | ||
1516 | if (!renegotiate_seen && s->internal->renegotiate) { | 1467 | if (!S3I(s)->renegotiate_seen && s->internal->renegotiate) { |
1517 | *al = SSL_AD_HANDSHAKE_FAILURE; | 1468 | *al = SSL_AD_HANDSHAKE_FAILURE; |
1518 | SSLerror(s, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); | 1469 | SSLerror(s, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); |
1519 | return 0; | 1470 | return 0; |
@@ -1554,9 +1505,9 @@ ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, size_t n, int *al) | |||
1554 | unsigned char *data = *p; | 1505 | unsigned char *data = *p; |
1555 | unsigned char *end = *p + n; | 1506 | unsigned char *end = *p + n; |
1556 | int tlsext_servername = 0; | 1507 | int tlsext_servername = 0; |
1557 | int renegotiate_seen = 0; | ||
1558 | CBS cbs; | 1508 | CBS cbs; |
1559 | 1509 | ||
1510 | S3I(s)->renegotiate_seen = 0; | ||
1560 | S3I(s)->next_proto_neg_seen = 0; | 1511 | S3I(s)->next_proto_neg_seen = 0; |
1561 | free(S3I(s)->alpn_selected); | 1512 | free(S3I(s)->alpn_selected); |
1562 | S3I(s)->alpn_selected = NULL; | 1513 | S3I(s)->alpn_selected = NULL; |
@@ -1719,10 +1670,6 @@ ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, size_t n, int *al) | |||
1719 | memcpy(S3I(s)->alpn_selected, data + 3, len); | 1670 | memcpy(S3I(s)->alpn_selected, data + 3, len); |
1720 | S3I(s)->alpn_selected_len = len; | 1671 | S3I(s)->alpn_selected_len = len; |
1721 | 1672 | ||
1722 | } else if (type == TLSEXT_TYPE_renegotiate) { | ||
1723 | if (!ssl_parse_serverhello_renegotiate_ext(s, data, size, al)) | ||
1724 | return 0; | ||
1725 | renegotiate_seen = 1; | ||
1726 | } | 1673 | } |
1727 | #ifndef OPENSSL_NO_SRTP | 1674 | #ifndef OPENSSL_NO_SRTP |
1728 | else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_use_srtp) { | 1675 | else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_use_srtp) { |
@@ -1769,7 +1716,7 @@ ri_check: | |||
1769 | * which doesn't support RI so for the immediate future tolerate RI | 1716 | * which doesn't support RI so for the immediate future tolerate RI |
1770 | * absence on initial connect only. | 1717 | * absence on initial connect only. |
1771 | */ | 1718 | */ |
1772 | if (!renegotiate_seen && | 1719 | if (!S3I(s)->renegotiate_seen && |
1773 | !(s->internal->options & SSL_OP_LEGACY_SERVER_CONNECT)) { | 1720 | !(s->internal->options & SSL_OP_LEGACY_SERVER_CONNECT)) { |
1774 | *al = SSL_AD_HANDSHAKE_FAILURE; | 1721 | *al = SSL_AD_HANDSHAKE_FAILURE; |
1775 | SSLerror(s, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); | 1722 | SSLerror(s, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); |