diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libssl/bio_ssl.c | 6 | ||||
| -rw-r--r-- | src/lib/libssl/d1_both.c | 14 | ||||
| -rw-r--r-- | src/lib/libssl/d1_lib.c | 4 | ||||
| -rw-r--r-- | src/lib/libssl/s3_lib.c | 19 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_both.c | 6 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_lib.c | 62 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_locl.h | 18 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_methods.c | 130 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_packet.c | 5 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_versions.c | 21 | ||||
| -rw-r--r-- | src/lib/libssl/t1_enc.c | 4 | ||||
| -rw-r--r-- | src/lib/libssl/t1_lib.c | 6 | ||||
| -rw-r--r-- | src/lib/libssl/tls13_handshake.c | 4 | ||||
| -rw-r--r-- | src/lib/libssl/tls13_legacy.c | 16 | ||||
| -rw-r--r-- | src/lib/libssl/tls13_server.c | 6 |
15 files changed, 126 insertions, 195 deletions
diff --git a/src/lib/libssl/bio_ssl.c b/src/lib/libssl/bio_ssl.c index 460b09fd87..bb40b2a6f7 100644 --- a/src/lib/libssl/bio_ssl.c +++ b/src/lib/libssl/bio_ssl.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: bio_ssl.c,v 1.30 2021/06/11 11:13:53 jsing Exp $ */ | 1 | /* $OpenBSD: bio_ssl.c,v 1.31 2021/07/01 17:53:39 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 | * |
| @@ -294,10 +294,10 @@ ssl_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
| 294 | SSL_shutdown(ssl); | 294 | SSL_shutdown(ssl); |
| 295 | 295 | ||
| 296 | if (ssl->internal->handshake_func == | 296 | if (ssl->internal->handshake_func == |
| 297 | ssl->method->internal->ssl_connect) | 297 | ssl->method->ssl_connect) |
| 298 | SSL_set_connect_state(ssl); | 298 | SSL_set_connect_state(ssl); |
| 299 | else if (ssl->internal->handshake_func == | 299 | else if (ssl->internal->handshake_func == |
| 300 | ssl->method->internal->ssl_accept) | 300 | ssl->method->ssl_accept) |
| 301 | SSL_set_accept_state(ssl); | 301 | SSL_set_accept_state(ssl); |
| 302 | 302 | ||
| 303 | SSL_clear(ssl); | 303 | SSL_clear(ssl); |
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c index 52189128c8..2e5e86641c 100644 --- a/src/lib/libssl/d1_both.c +++ b/src/lib/libssl/d1_both.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: d1_both.c,v 1.75 2021/06/11 17:29:48 jsing Exp $ */ | 1 | /* $OpenBSD: d1_both.c,v 1.76 2021/07/01 17:53:39 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
| 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
| @@ -600,7 +600,7 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
| 600 | unsigned char devnull [256]; | 600 | unsigned char devnull [256]; |
| 601 | 601 | ||
| 602 | while (frag_len) { | 602 | while (frag_len) { |
| 603 | i = s->method->internal->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, | 603 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
| 604 | devnull, frag_len > sizeof(devnull) ? | 604 | devnull, frag_len > sizeof(devnull) ? |
| 605 | sizeof(devnull) : frag_len, 0); | 605 | sizeof(devnull) : frag_len, 0); |
| 606 | if (i <= 0) | 606 | if (i <= 0) |
| @@ -612,7 +612,7 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
| 612 | } | 612 | } |
| 613 | 613 | ||
| 614 | /* read the body of the fragment (header has already been read */ | 614 | /* read the body of the fragment (header has already been read */ |
| 615 | i = s->method->internal->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, | 615 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
| 616 | frag->fragment + msg_hdr->frag_off, frag_len, 0); | 616 | frag->fragment + msg_hdr->frag_off, frag_len, 0); |
| 617 | if (i <= 0 || (unsigned long)i != frag_len) | 617 | if (i <= 0 || (unsigned long)i != frag_len) |
| 618 | goto err; | 618 | goto err; |
| @@ -690,7 +690,7 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
| 690 | unsigned char devnull [256]; | 690 | unsigned char devnull [256]; |
| 691 | 691 | ||
| 692 | while (frag_len) { | 692 | while (frag_len) { |
| 693 | i = s->method->internal->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, | 693 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
| 694 | devnull, frag_len > sizeof(devnull) ? | 694 | devnull, frag_len > sizeof(devnull) ? |
| 695 | sizeof(devnull) : frag_len, 0); | 695 | sizeof(devnull) : frag_len, 0); |
| 696 | if (i <= 0) | 696 | if (i <= 0) |
| @@ -712,7 +712,7 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
| 712 | 712 | ||
| 713 | if (frag_len) { | 713 | if (frag_len) { |
| 714 | /* read the body of the fragment (header has already been read */ | 714 | /* read the body of the fragment (header has already been read */ |
| 715 | i = s->method->internal->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, | 715 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
| 716 | frag->fragment, frag_len, 0); | 716 | frag->fragment, frag_len, 0); |
| 717 | if (i <= 0 || (unsigned long)i != frag_len) | 717 | if (i <= 0 || (unsigned long)i != frag_len) |
| 718 | goto err; | 718 | goto err; |
| @@ -756,7 +756,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) | |||
| 756 | } | 756 | } |
| 757 | 757 | ||
| 758 | /* read handshake message header */ | 758 | /* read handshake message header */ |
| 759 | i = s->method->internal->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, wire, | 759 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, wire, |
| 760 | DTLS1_HM_HEADER_LENGTH, 0); | 760 | DTLS1_HM_HEADER_LENGTH, 0); |
| 761 | if (i <= 0) /* nbio, or an error */ | 761 | if (i <= 0) /* nbio, or an error */ |
| 762 | { | 762 | { |
| @@ -825,7 +825,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) | |||
| 825 | if (frag_len > 0) { | 825 | if (frag_len > 0) { |
| 826 | unsigned char *p = (unsigned char *)s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH; | 826 | unsigned char *p = (unsigned char *)s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH; |
| 827 | 827 | ||
| 828 | i = s->method->internal->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, | 828 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
| 829 | &p[frag_off], frag_len, 0); | 829 | &p[frag_off], frag_len, 0); |
| 830 | /* XDTLS: fix this--message fragments cannot span multiple packets */ | 830 | /* XDTLS: fix this--message fragments cannot span multiple packets */ |
| 831 | if (i <= 0) { | 831 | if (i <= 0) { |
diff --git a/src/lib/libssl/d1_lib.c b/src/lib/libssl/d1_lib.c index 66895a361f..6d9959ff43 100644 --- a/src/lib/libssl/d1_lib.c +++ b/src/lib/libssl/d1_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: d1_lib.c,v 1.56 2021/06/19 16:52:47 jsing Exp $ */ | 1 | /* $OpenBSD: d1_lib.c,v 1.57 2021/07/01 17:53:39 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
| 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
| @@ -100,7 +100,7 @@ dtls1_new(SSL *s) | |||
| 100 | if (s->server) | 100 | if (s->server) |
| 101 | s->d1->internal->cookie_len = sizeof(D1I(s)->cookie); | 101 | s->d1->internal->cookie_len = sizeof(D1I(s)->cookie); |
| 102 | 102 | ||
| 103 | s->method->internal->ssl_clear(s); | 103 | s->method->ssl_clear(s); |
| 104 | return (1); | 104 | return (1); |
| 105 | 105 | ||
| 106 | err: | 106 | err: |
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 0cdf9edd2f..125c108f02 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s3_lib.c,v 1.211 2021/06/30 18:07:50 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.212 2021/07/01 17:53:39 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 | * |
| @@ -1548,7 +1548,7 @@ ssl3_new(SSL *s) | |||
| 1548 | return (0); | 1548 | return (0); |
| 1549 | } | 1549 | } |
| 1550 | 1550 | ||
| 1551 | s->method->internal->ssl_clear(s); | 1551 | s->method->ssl_clear(s); |
| 1552 | 1552 | ||
| 1553 | return (1); | 1553 | return (1); |
| 1554 | } | 1554 | } |
| @@ -2688,7 +2688,7 @@ ssl3_shutdown(SSL *s) | |||
| 2688 | } | 2688 | } |
| 2689 | } else if (!(s->internal->shutdown & SSL_RECEIVED_SHUTDOWN)) { | 2689 | } else if (!(s->internal->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
| 2690 | /* If we are waiting for a close from our peer, we are closed */ | 2690 | /* If we are waiting for a close from our peer, we are closed */ |
| 2691 | s->method->internal->ssl_read_bytes(s, 0, NULL, 0, 0); | 2691 | s->method->ssl_read_bytes(s, 0, NULL, 0, 0); |
| 2692 | if (!(s->internal->shutdown & SSL_RECEIVED_SHUTDOWN)) { | 2692 | if (!(s->internal->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
| 2693 | return(-1); /* return WANT_READ */ | 2693 | return(-1); /* return WANT_READ */ |
| 2694 | } | 2694 | } |
| @@ -2709,8 +2709,8 @@ ssl3_write(SSL *s, const void *buf, int len) | |||
| 2709 | if (S3I(s)->renegotiate) | 2709 | if (S3I(s)->renegotiate) |
| 2710 | ssl3_renegotiate_check(s); | 2710 | ssl3_renegotiate_check(s); |
| 2711 | 2711 | ||
| 2712 | return s->method->internal->ssl_write_bytes(s, | 2712 | return s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, |
| 2713 | SSL3_RT_APPLICATION_DATA, buf, len); | 2713 | buf, len); |
| 2714 | } | 2714 | } |
| 2715 | 2715 | ||
| 2716 | static int | 2716 | static int |
| @@ -2722,8 +2722,9 @@ ssl3_read_internal(SSL *s, void *buf, int len, int peek) | |||
| 2722 | if (S3I(s)->renegotiate) | 2722 | if (S3I(s)->renegotiate) |
| 2723 | ssl3_renegotiate_check(s); | 2723 | ssl3_renegotiate_check(s); |
| 2724 | S3I(s)->in_read_app_data = 1; | 2724 | S3I(s)->in_read_app_data = 1; |
| 2725 | ret = s->method->internal->ssl_read_bytes(s, | 2725 | |
| 2726 | SSL3_RT_APPLICATION_DATA, buf, len, peek); | 2726 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, |
| 2727 | peek); | ||
| 2727 | if ((ret == -1) && (S3I(s)->in_read_app_data == 2)) { | 2728 | if ((ret == -1) && (S3I(s)->in_read_app_data == 2)) { |
| 2728 | /* | 2729 | /* |
| 2729 | * ssl3_read_bytes decided to call s->internal->handshake_func, | 2730 | * ssl3_read_bytes decided to call s->internal->handshake_func, |
| @@ -2733,8 +2734,8 @@ ssl3_read_internal(SSL *s, void *buf, int len, int peek) | |||
| 2733 | * handshake processing and try to read application data again. | 2734 | * handshake processing and try to read application data again. |
| 2734 | */ | 2735 | */ |
| 2735 | s->internal->in_handshake++; | 2736 | s->internal->in_handshake++; |
| 2736 | ret = s->method->internal->ssl_read_bytes(s, | 2737 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, |
| 2737 | SSL3_RT_APPLICATION_DATA, buf, len, peek); | 2738 | buf, len, peek); |
| 2738 | s->internal->in_handshake--; | 2739 | s->internal->in_handshake--; |
| 2739 | } else | 2740 | } else |
| 2740 | S3I(s)->in_read_app_data = 0; | 2741 | S3I(s)->in_read_app_data = 0; |
diff --git a/src/lib/libssl/ssl_both.c b/src/lib/libssl/ssl_both.c index d3d4883b35..03c5a2f1e9 100644 --- a/src/lib/libssl/ssl_both.c +++ b/src/lib/libssl/ssl_both.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_both.c,v 1.32 2021/06/11 11:13:53 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_both.c,v 1.33 2021/07/01 17:53:39 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 | * |
| @@ -433,7 +433,7 @@ ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
| 433 | 433 | ||
| 434 | do { | 434 | do { |
| 435 | while (s->internal->init_num < 4) { | 435 | while (s->internal->init_num < 4) { |
| 436 | i = s->method->internal->ssl_read_bytes(s, | 436 | i = s->method->ssl_read_bytes(s, |
| 437 | SSL3_RT_HANDSHAKE, &p[s->internal->init_num], | 437 | SSL3_RT_HANDSHAKE, &p[s->internal->init_num], |
| 438 | 4 - s->internal->init_num, 0); | 438 | 4 - s->internal->init_num, 0); |
| 439 | if (i <= 0) { | 439 | if (i <= 0) { |
| @@ -500,7 +500,7 @@ ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
| 500 | p = s->internal->init_msg; | 500 | p = s->internal->init_msg; |
| 501 | n = S3I(s)->hs.tls12.message_size - s->internal->init_num; | 501 | n = S3I(s)->hs.tls12.message_size - s->internal->init_num; |
| 502 | while (n > 0) { | 502 | while (n > 0) { |
| 503 | i = s->method->internal->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, | 503 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
| 504 | &p[s->internal->init_num], n, 0); | 504 | &p[s->internal->init_num], n, 0); |
| 505 | if (i <= 0) { | 505 | if (i <= 0) { |
| 506 | s->internal->rwstate = SSL_READING; | 506 | s->internal->rwstate = SSL_READING; |
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index dd46bf9423..bb4b700e0b 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_lib.c,v 1.261 2021/06/19 16:52:47 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.262 2021/07/01 17:53:39 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 | * |
| @@ -187,7 +187,7 @@ SSL_clear(SSL *s) | |||
| 187 | return (0); | 187 | return (0); |
| 188 | } | 188 | } |
| 189 | 189 | ||
| 190 | s->version = s->method->internal->version; | 190 | s->version = s->method->version; |
| 191 | s->client_version = s->version; | 191 | s->client_version = s->version; |
| 192 | s->internal->rwstate = SSL_NOTHING; | 192 | s->internal->rwstate = SSL_NOTHING; |
| 193 | s->internal->rstate = SSL_ST_READ_HEADER; | 193 | s->internal->rstate = SSL_ST_READ_HEADER; |
| @@ -207,12 +207,12 @@ SSL_clear(SSL *s) | |||
| 207 | */ | 207 | */ |
| 208 | if (!s->internal->in_handshake && (s->session == NULL) && | 208 | if (!s->internal->in_handshake && (s->session == NULL) && |
| 209 | (s->method != s->ctx->method)) { | 209 | (s->method != s->ctx->method)) { |
| 210 | s->method->internal->ssl_free(s); | 210 | s->method->ssl_free(s); |
| 211 | s->method = s->ctx->method; | 211 | s->method = s->ctx->method; |
| 212 | if (!s->method->internal->ssl_new(s)) | 212 | if (!s->method->ssl_new(s)) |
| 213 | return (0); | 213 | return (0); |
| 214 | } else | 214 | } else |
| 215 | s->method->internal->ssl_clear(s); | 215 | s->method->ssl_clear(s); |
| 216 | 216 | ||
| 217 | return (1); | 217 | return (1); |
| 218 | } | 218 | } |
| @@ -342,11 +342,11 @@ SSL_new(SSL_CTX *ctx) | |||
| 342 | 342 | ||
| 343 | s->method = ctx->method; | 343 | s->method = ctx->method; |
| 344 | 344 | ||
| 345 | if (!s->method->internal->ssl_new(s)) | 345 | if (!s->method->ssl_new(s)) |
| 346 | goto err; | 346 | goto err; |
| 347 | 347 | ||
| 348 | s->references = 1; | 348 | s->references = 1; |
| 349 | s->server = ctx->method->internal->server; | 349 | s->server = ctx->method->server; |
| 350 | 350 | ||
| 351 | SSL_clear(s); | 351 | SSL_clear(s); |
| 352 | 352 | ||
| @@ -566,7 +566,7 @@ SSL_free(SSL *s) | |||
| 566 | sk_X509_NAME_pop_free(s->internal->client_CA, X509_NAME_free); | 566 | sk_X509_NAME_pop_free(s->internal->client_CA, X509_NAME_free); |
| 567 | 567 | ||
| 568 | if (s->method != NULL) | 568 | if (s->method != NULL) |
| 569 | s->method->internal->ssl_free(s); | 569 | s->method->ssl_free(s); |
| 570 | 570 | ||
| 571 | SSL_CTX_free(s->ctx); | 571 | SSL_CTX_free(s->ctx); |
| 572 | 572 | ||
| @@ -811,7 +811,7 @@ SSL_get_read_ahead(const SSL *s) | |||
| 811 | int | 811 | int |
| 812 | SSL_pending(const SSL *s) | 812 | SSL_pending(const SSL *s) |
| 813 | { | 813 | { |
| 814 | return (s->method->internal->ssl_pending(s)); | 814 | return (s->method->ssl_pending(s)); |
| 815 | } | 815 | } |
| 816 | 816 | ||
| 817 | X509 * | 817 | X509 * |
| @@ -866,9 +866,9 @@ SSL_copy_session_id(SSL *t, const SSL *f) | |||
| 866 | 866 | ||
| 867 | /* What if we are set up for one protocol but want to talk another? */ | 867 | /* What if we are set up for one protocol but want to talk another? */ |
| 868 | if (t->method != f->method) { | 868 | if (t->method != f->method) { |
| 869 | t->method->internal->ssl_free(t); | 869 | t->method->ssl_free(t); |
| 870 | t->method = f->method; | 870 | t->method = f->method; |
| 871 | if (!t->method->internal->ssl_new(t)) | 871 | if (!t->method->ssl_new(t)) |
| 872 | return 0; | 872 | return 0; |
| 873 | } | 873 | } |
| 874 | 874 | ||
| @@ -933,7 +933,7 @@ SSL_accept(SSL *s) | |||
| 933 | if (s->internal->handshake_func == NULL) | 933 | if (s->internal->handshake_func == NULL) |
| 934 | SSL_set_accept_state(s); /* Not properly initialized yet */ | 934 | SSL_set_accept_state(s); /* Not properly initialized yet */ |
| 935 | 935 | ||
| 936 | return (s->method->internal->ssl_accept(s)); | 936 | return (s->method->ssl_accept(s)); |
| 937 | } | 937 | } |
| 938 | 938 | ||
| 939 | int | 939 | int |
| @@ -942,13 +942,13 @@ SSL_connect(SSL *s) | |||
| 942 | if (s->internal->handshake_func == NULL) | 942 | if (s->internal->handshake_func == NULL) |
| 943 | SSL_set_connect_state(s); /* Not properly initialized yet */ | 943 | SSL_set_connect_state(s); /* Not properly initialized yet */ |
| 944 | 944 | ||
| 945 | return (s->method->internal->ssl_connect(s)); | 945 | return (s->method->ssl_connect(s)); |
| 946 | } | 946 | } |
| 947 | 947 | ||
| 948 | int | 948 | int |
| 949 | SSL_is_dtls(const SSL *s) | 949 | SSL_is_dtls(const SSL *s) |
| 950 | { | 950 | { |
| 951 | return s->method->internal->dtls; | 951 | return s->method->dtls; |
| 952 | } | 952 | } |
| 953 | 953 | ||
| 954 | int | 954 | int |
| @@ -1085,7 +1085,7 @@ SSL_shutdown(SSL *s) | |||
| 1085 | } | 1085 | } |
| 1086 | 1086 | ||
| 1087 | if (s != NULL && !SSL_in_init(s)) | 1087 | if (s != NULL && !SSL_in_init(s)) |
| 1088 | return (s->method->internal->ssl_shutdown(s)); | 1088 | return (s->method->ssl_shutdown(s)); |
| 1089 | 1089 | ||
| 1090 | return (1); | 1090 | return (1); |
| 1091 | } | 1091 | } |
| @@ -1098,7 +1098,7 @@ SSL_renegotiate(SSL *s) | |||
| 1098 | 1098 | ||
| 1099 | s->internal->new_session = 1; | 1099 | s->internal->new_session = 1; |
| 1100 | 1100 | ||
| 1101 | return (s->method->internal->ssl_renegotiate(s)); | 1101 | return (s->method->ssl_renegotiate(s)); |
| 1102 | } | 1102 | } |
| 1103 | 1103 | ||
| 1104 | int | 1104 | int |
| @@ -1109,7 +1109,7 @@ SSL_renegotiate_abbreviated(SSL *s) | |||
| 1109 | 1109 | ||
| 1110 | s->internal->new_session = 0; | 1110 | s->internal->new_session = 0; |
| 1111 | 1111 | ||
| 1112 | return (s->method->internal->ssl_renegotiate(s)); | 1112 | return (s->method->ssl_renegotiate(s)); |
| 1113 | } | 1113 | } |
| 1114 | 1114 | ||
| 1115 | int | 1115 | int |
| @@ -1825,8 +1825,8 @@ SSL_CTX_new(const SSL_METHOD *meth) | |||
| 1825 | } | 1825 | } |
| 1826 | 1826 | ||
| 1827 | ret->method = meth; | 1827 | ret->method = meth; |
| 1828 | ret->internal->min_tls_version = meth->internal->min_tls_version; | 1828 | ret->internal->min_tls_version = meth->min_tls_version; |
| 1829 | ret->internal->max_tls_version = meth->internal->max_tls_version; | 1829 | ret->internal->max_tls_version = meth->max_tls_version; |
| 1830 | ret->internal->min_proto_version = 0; | 1830 | ret->internal->min_proto_version = 0; |
| 1831 | ret->internal->max_proto_version = 0; | 1831 | ret->internal->max_proto_version = 0; |
| 1832 | ret->internal->mode = SSL_MODE_AUTO_RETRY; | 1832 | ret->internal->mode = SSL_MODE_AUTO_RETRY; |
| @@ -2293,17 +2293,17 @@ SSL_set_ssl_method(SSL *s, const SSL_METHOD *method) | |||
| 2293 | if (s->method == method) | 2293 | if (s->method == method) |
| 2294 | return (ret); | 2294 | return (ret); |
| 2295 | 2295 | ||
| 2296 | if (s->internal->handshake_func == s->method->internal->ssl_connect) | 2296 | if (s->internal->handshake_func == s->method->ssl_connect) |
| 2297 | handshake_func = method->internal->ssl_connect; | 2297 | handshake_func = method->ssl_connect; |
| 2298 | else if (s->internal->handshake_func == s->method->internal->ssl_accept) | 2298 | else if (s->internal->handshake_func == s->method->ssl_accept) |
| 2299 | handshake_func = method->internal->ssl_accept; | 2299 | handshake_func = method->ssl_accept; |
| 2300 | 2300 | ||
| 2301 | if (s->method->internal->version == method->internal->version) { | 2301 | if (s->method->version == method->version) { |
| 2302 | s->method = method; | 2302 | s->method = method; |
| 2303 | } else { | 2303 | } else { |
| 2304 | s->method->internal->ssl_free(s); | 2304 | s->method->ssl_free(s); |
| 2305 | s->method = method; | 2305 | s->method = method; |
| 2306 | ret = s->method->internal->ssl_new(s); | 2306 | ret = s->method->ssl_new(s); |
| 2307 | } | 2307 | } |
| 2308 | s->internal->handshake_func = handshake_func; | 2308 | s->internal->handshake_func = handshake_func; |
| 2309 | 2309 | ||
| @@ -2398,7 +2398,7 @@ SSL_do_handshake(SSL *s) | |||
| 2398 | return (-1); | 2398 | return (-1); |
| 2399 | } | 2399 | } |
| 2400 | 2400 | ||
| 2401 | s->method->internal->ssl_renegotiate_check(s); | 2401 | s->method->ssl_renegotiate_check(s); |
| 2402 | 2402 | ||
| 2403 | if (SSL_in_init(s) || SSL_in_before(s)) { | 2403 | if (SSL_in_init(s) || SSL_in_before(s)) { |
| 2404 | ret = s->internal->handshake_func(s); | 2404 | ret = s->internal->handshake_func(s); |
| @@ -2416,7 +2416,7 @@ SSL_set_accept_state(SSL *s) | |||
| 2416 | s->server = 1; | 2416 | s->server = 1; |
| 2417 | s->internal->shutdown = 0; | 2417 | s->internal->shutdown = 0; |
| 2418 | S3I(s)->hs.state = SSL_ST_ACCEPT|SSL_ST_BEFORE; | 2418 | S3I(s)->hs.state = SSL_ST_ACCEPT|SSL_ST_BEFORE; |
| 2419 | s->internal->handshake_func = s->method->internal->ssl_accept; | 2419 | s->internal->handshake_func = s->method->ssl_accept; |
| 2420 | ssl_clear_cipher_state(s); | 2420 | ssl_clear_cipher_state(s); |
| 2421 | } | 2421 | } |
| 2422 | 2422 | ||
| @@ -2426,7 +2426,7 @@ SSL_set_connect_state(SSL *s) | |||
| 2426 | s->server = 0; | 2426 | s->server = 0; |
| 2427 | s->internal->shutdown = 0; | 2427 | s->internal->shutdown = 0; |
| 2428 | S3I(s)->hs.state = SSL_ST_CONNECT|SSL_ST_BEFORE; | 2428 | S3I(s)->hs.state = SSL_ST_CONNECT|SSL_ST_BEFORE; |
| 2429 | s->internal->handshake_func = s->method->internal->ssl_connect; | 2429 | s->internal->handshake_func = s->method->ssl_connect; |
| 2430 | ssl_clear_cipher_state(s); | 2430 | ssl_clear_cipher_state(s); |
| 2431 | } | 2431 | } |
| 2432 | 2432 | ||
| @@ -2503,9 +2503,9 @@ SSL_dup(SSL *s) | |||
| 2503 | * and thus we can't use SSL_copy_session_id. | 2503 | * and thus we can't use SSL_copy_session_id. |
| 2504 | */ | 2504 | */ |
| 2505 | 2505 | ||
| 2506 | ret->method->internal->ssl_free(ret); | 2506 | ret->method->ssl_free(ret); |
| 2507 | ret->method = s->method; | 2507 | ret->method = s->method; |
| 2508 | ret->method->internal->ssl_new(ret); | 2508 | ret->method->ssl_new(ret); |
| 2509 | 2509 | ||
| 2510 | ssl_cert_free(ret->cert); | 2510 | ssl_cert_free(ret->cert); |
| 2511 | if ((ret->cert = ssl_cert_dup(s->cert)) == NULL) | 2511 | if ((ret->cert = ssl_cert_dup(s->cert)) == NULL) |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 10fa9b6c17..6ffc2e053c 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_locl.h,v 1.353 2021/06/30 18:04:06 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.354 2021/07/01 17:53:39 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 | * |
| @@ -319,19 +319,19 @@ __BEGIN_HIDDEN_DECLS | |||
| 319 | 319 | ||
| 320 | /* See if we use signature algorithms extension. */ | 320 | /* See if we use signature algorithms extension. */ |
| 321 | #define SSL_USE_SIGALGS(s) \ | 321 | #define SSL_USE_SIGALGS(s) \ |
| 322 | (s->method->internal->enc_flags & SSL_ENC_FLAG_SIGALGS) | 322 | (s->method->enc_flags & SSL_ENC_FLAG_SIGALGS) |
| 323 | 323 | ||
| 324 | /* See if we use SHA256 default PRF. */ | 324 | /* See if we use SHA256 default PRF. */ |
| 325 | #define SSL_USE_SHA256_PRF(s) \ | 325 | #define SSL_USE_SHA256_PRF(s) \ |
| 326 | (s->method->internal->enc_flags & SSL_ENC_FLAG_SHA256_PRF) | 326 | (s->method->enc_flags & SSL_ENC_FLAG_SHA256_PRF) |
| 327 | 327 | ||
| 328 | /* Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2. */ | 328 | /* Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2. */ |
| 329 | #define SSL_USE_TLS1_2_CIPHERS(s) \ | 329 | #define SSL_USE_TLS1_2_CIPHERS(s) \ |
| 330 | (s->method->internal->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS) | 330 | (s->method->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS) |
| 331 | 331 | ||
| 332 | /* Allow TLS 1.3 ciphersuites only. */ | 332 | /* Allow TLS 1.3 ciphersuites only. */ |
| 333 | #define SSL_USE_TLS1_3_CIPHERS(s) \ | 333 | #define SSL_USE_TLS1_3_CIPHERS(s) \ |
| 334 | (s->method->internal->enc_flags & SSL_ENC_FLAG_TLS1_3_CIPHERS) | 334 | (s->method->enc_flags & SSL_ENC_FLAG_TLS1_3_CIPHERS) |
| 335 | 335 | ||
| 336 | #define SSL_PKEY_RSA 0 | 336 | #define SSL_PKEY_RSA 0 |
| 337 | #define SSL_PKEY_ECC 1 | 337 | #define SSL_PKEY_ECC 1 |
| @@ -378,7 +378,7 @@ struct ssl_cipher_st { | |||
| 378 | int alg_bits; /* Number of bits for algorithm */ | 378 | int alg_bits; /* Number of bits for algorithm */ |
| 379 | }; | 379 | }; |
| 380 | 380 | ||
| 381 | typedef struct ssl_method_internal_st { | 381 | struct ssl_method_st { |
| 382 | int dtls; | 382 | int dtls; |
| 383 | int server; | 383 | int server; |
| 384 | int version; | 384 | int version; |
| @@ -402,17 +402,13 @@ typedef struct ssl_method_internal_st { | |||
| 402 | int peek); | 402 | int peek); |
| 403 | int (*ssl_write_bytes)(SSL *s, int type, const void *buf_, int len); | 403 | int (*ssl_write_bytes)(SSL *s, int type, const void *buf_, int len); |
| 404 | 404 | ||
| 405 | unsigned int enc_flags; /* SSL_ENC_FLAG_* */ | ||
| 406 | } SSL_METHOD_INTERNAL; | ||
| 407 | |||
| 408 | struct ssl_method_st { | ||
| 409 | int (*ssl_dispatch_alert)(SSL *s); | 405 | int (*ssl_dispatch_alert)(SSL *s); |
| 410 | int (*num_ciphers)(void); | 406 | int (*num_ciphers)(void); |
| 411 | const SSL_CIPHER *(*get_cipher)(unsigned int ncipher); | 407 | const SSL_CIPHER *(*get_cipher)(unsigned int ncipher); |
| 412 | const SSL_CIPHER *(*get_cipher_by_char)(const unsigned char *ptr); | 408 | const SSL_CIPHER *(*get_cipher_by_char)(const unsigned char *ptr); |
| 413 | int (*put_cipher_by_char)(const SSL_CIPHER *cipher, unsigned char *ptr); | 409 | int (*put_cipher_by_char)(const SSL_CIPHER *cipher, unsigned char *ptr); |
| 414 | 410 | ||
| 415 | const struct ssl_method_internal_st *internal; | 411 | unsigned int enc_flags; /* SSL_ENC_FLAG_* */ |
| 416 | }; | 412 | }; |
| 417 | 413 | ||
| 418 | typedef struct ssl_session_internal_st { | 414 | typedef struct ssl_session_internal_st { |
diff --git a/src/lib/libssl/ssl_methods.c b/src/lib/libssl/ssl_methods.c index f1a59cd738..a3097c37b9 100644 --- a/src/lib/libssl/ssl_methods.c +++ b/src/lib/libssl/ssl_methods.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_methods.c,v 1.25 2021/05/16 13:56:31 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_methods.c,v 1.26 2021/07/01 17:53:39 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 | * |
| @@ -60,7 +60,7 @@ | |||
| 60 | #include "ssl_locl.h" | 60 | #include "ssl_locl.h" |
| 61 | #include "tls13_internal.h" | 61 | #include "tls13_internal.h" |
| 62 | 62 | ||
| 63 | static const SSL_METHOD_INTERNAL DTLS_method_internal_data = { | 63 | static const SSL_METHOD DTLS_method_data = { |
| 64 | .dtls = 1, | 64 | .dtls = 1, |
| 65 | .server = 1, | 65 | .server = 1, |
| 66 | .version = DTLS1_2_VERSION, | 66 | .version = DTLS1_2_VERSION, |
| @@ -77,19 +77,15 @@ static const SSL_METHOD_INTERNAL DTLS_method_internal_data = { | |||
| 77 | .ssl_pending = ssl3_pending, | 77 | .ssl_pending = ssl3_pending, |
| 78 | .ssl_read_bytes = dtls1_read_bytes, | 78 | .ssl_read_bytes = dtls1_read_bytes, |
| 79 | .ssl_write_bytes = dtls1_write_app_data_bytes, | 79 | .ssl_write_bytes = dtls1_write_app_data_bytes, |
| 80 | .enc_flags = TLSV1_2_ENC_FLAGS, | ||
| 81 | }; | ||
| 82 | |||
| 83 | static const SSL_METHOD DTLS_method_data = { | ||
| 84 | .ssl_dispatch_alert = dtls1_dispatch_alert, | 80 | .ssl_dispatch_alert = dtls1_dispatch_alert, |
| 85 | .num_ciphers = ssl3_num_ciphers, | 81 | .num_ciphers = ssl3_num_ciphers, |
| 86 | .get_cipher = dtls1_get_cipher, | 82 | .get_cipher = dtls1_get_cipher, |
| 87 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 83 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 88 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 84 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 89 | .internal = &DTLS_method_internal_data, | 85 | .enc_flags = TLSV1_2_ENC_FLAGS, |
| 90 | }; | 86 | }; |
| 91 | 87 | ||
| 92 | static const SSL_METHOD_INTERNAL DTLS_client_method_internal_data = { | 88 | static const SSL_METHOD DTLS_client_method_data = { |
| 93 | .dtls = 1, | 89 | .dtls = 1, |
| 94 | .server = 0, | 90 | .server = 0, |
| 95 | .version = DTLS1_2_VERSION, | 91 | .version = DTLS1_2_VERSION, |
| @@ -106,19 +102,15 @@ static const SSL_METHOD_INTERNAL DTLS_client_method_internal_data = { | |||
| 106 | .ssl_pending = ssl3_pending, | 102 | .ssl_pending = ssl3_pending, |
| 107 | .ssl_read_bytes = dtls1_read_bytes, | 103 | .ssl_read_bytes = dtls1_read_bytes, |
| 108 | .ssl_write_bytes = dtls1_write_app_data_bytes, | 104 | .ssl_write_bytes = dtls1_write_app_data_bytes, |
| 109 | .enc_flags = TLSV1_2_ENC_FLAGS, | ||
| 110 | }; | ||
| 111 | |||
| 112 | static const SSL_METHOD DTLS_client_method_data = { | ||
| 113 | .ssl_dispatch_alert = dtls1_dispatch_alert, | 105 | .ssl_dispatch_alert = dtls1_dispatch_alert, |
| 114 | .num_ciphers = ssl3_num_ciphers, | 106 | .num_ciphers = ssl3_num_ciphers, |
| 115 | .get_cipher = dtls1_get_cipher, | 107 | .get_cipher = dtls1_get_cipher, |
| 116 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 108 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 117 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 109 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 118 | .internal = &DTLS_client_method_internal_data, | 110 | .enc_flags = TLSV1_2_ENC_FLAGS, |
| 119 | }; | 111 | }; |
| 120 | 112 | ||
| 121 | static const SSL_METHOD_INTERNAL DTLSv1_method_internal_data = { | 113 | static const SSL_METHOD DTLSv1_method_data = { |
| 122 | .dtls = 1, | 114 | .dtls = 1, |
| 123 | .server = 1, | 115 | .server = 1, |
| 124 | .version = DTLS1_VERSION, | 116 | .version = DTLS1_VERSION, |
| @@ -135,19 +127,15 @@ static const SSL_METHOD_INTERNAL DTLSv1_method_internal_data = { | |||
| 135 | .ssl_pending = ssl3_pending, | 127 | .ssl_pending = ssl3_pending, |
| 136 | .ssl_read_bytes = dtls1_read_bytes, | 128 | .ssl_read_bytes = dtls1_read_bytes, |
| 137 | .ssl_write_bytes = dtls1_write_app_data_bytes, | 129 | .ssl_write_bytes = dtls1_write_app_data_bytes, |
| 138 | .enc_flags = TLSV1_1_ENC_FLAGS, | ||
| 139 | }; | ||
| 140 | |||
| 141 | static const SSL_METHOD DTLSv1_method_data = { | ||
| 142 | .ssl_dispatch_alert = dtls1_dispatch_alert, | 130 | .ssl_dispatch_alert = dtls1_dispatch_alert, |
| 143 | .num_ciphers = ssl3_num_ciphers, | 131 | .num_ciphers = ssl3_num_ciphers, |
| 144 | .get_cipher = dtls1_get_cipher, | 132 | .get_cipher = dtls1_get_cipher, |
| 145 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 133 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 146 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 134 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 147 | .internal = &DTLSv1_method_internal_data, | 135 | .enc_flags = TLSV1_1_ENC_FLAGS, |
| 148 | }; | 136 | }; |
| 149 | 137 | ||
| 150 | static const SSL_METHOD_INTERNAL DTLSv1_client_method_internal_data = { | 138 | static const SSL_METHOD DTLSv1_client_method_data = { |
| 151 | .dtls = 1, | 139 | .dtls = 1, |
| 152 | .server = 0, | 140 | .server = 0, |
| 153 | .version = DTLS1_VERSION, | 141 | .version = DTLS1_VERSION, |
| @@ -164,19 +152,15 @@ static const SSL_METHOD_INTERNAL DTLSv1_client_method_internal_data = { | |||
| 164 | .ssl_pending = ssl3_pending, | 152 | .ssl_pending = ssl3_pending, |
| 165 | .ssl_read_bytes = dtls1_read_bytes, | 153 | .ssl_read_bytes = dtls1_read_bytes, |
| 166 | .ssl_write_bytes = dtls1_write_app_data_bytes, | 154 | .ssl_write_bytes = dtls1_write_app_data_bytes, |
| 167 | .enc_flags = TLSV1_1_ENC_FLAGS, | ||
| 168 | }; | ||
| 169 | |||
| 170 | static const SSL_METHOD DTLSv1_client_method_data = { | ||
| 171 | .ssl_dispatch_alert = dtls1_dispatch_alert, | 155 | .ssl_dispatch_alert = dtls1_dispatch_alert, |
| 172 | .num_ciphers = ssl3_num_ciphers, | 156 | .num_ciphers = ssl3_num_ciphers, |
| 173 | .get_cipher = dtls1_get_cipher, | 157 | .get_cipher = dtls1_get_cipher, |
| 174 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 158 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 175 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 159 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 176 | .internal = &DTLSv1_client_method_internal_data, | 160 | .enc_flags = TLSV1_1_ENC_FLAGS, |
| 177 | }; | 161 | }; |
| 178 | 162 | ||
| 179 | static const SSL_METHOD_INTERNAL DTLSv1_2_method_internal_data = { | 163 | static const SSL_METHOD DTLSv1_2_method_data = { |
| 180 | .dtls = 1, | 164 | .dtls = 1, |
| 181 | .server = 1, | 165 | .server = 1, |
| 182 | .version = DTLS1_2_VERSION, | 166 | .version = DTLS1_2_VERSION, |
| @@ -193,19 +177,15 @@ static const SSL_METHOD_INTERNAL DTLSv1_2_method_internal_data = { | |||
| 193 | .ssl_pending = ssl3_pending, | 177 | .ssl_pending = ssl3_pending, |
| 194 | .ssl_read_bytes = dtls1_read_bytes, | 178 | .ssl_read_bytes = dtls1_read_bytes, |
| 195 | .ssl_write_bytes = dtls1_write_app_data_bytes, | 179 | .ssl_write_bytes = dtls1_write_app_data_bytes, |
| 196 | .enc_flags = TLSV1_2_ENC_FLAGS, | ||
| 197 | }; | ||
| 198 | |||
| 199 | static const SSL_METHOD DTLSv1_2_method_data = { | ||
| 200 | .ssl_dispatch_alert = dtls1_dispatch_alert, | 180 | .ssl_dispatch_alert = dtls1_dispatch_alert, |
| 201 | .num_ciphers = ssl3_num_ciphers, | 181 | .num_ciphers = ssl3_num_ciphers, |
| 202 | .get_cipher = dtls1_get_cipher, | 182 | .get_cipher = dtls1_get_cipher, |
| 203 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 183 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 204 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 184 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 205 | .internal = &DTLSv1_2_method_internal_data, | 185 | .enc_flags = TLSV1_2_ENC_FLAGS, |
| 206 | }; | 186 | }; |
| 207 | 187 | ||
| 208 | static const SSL_METHOD_INTERNAL DTLSv1_2_client_method_internal_data = { | 188 | static const SSL_METHOD DTLSv1_2_client_method_data = { |
| 209 | .dtls = 1, | 189 | .dtls = 1, |
| 210 | .server = 0, | 190 | .server = 0, |
| 211 | .version = DTLS1_2_VERSION, | 191 | .version = DTLS1_2_VERSION, |
| @@ -222,16 +202,12 @@ static const SSL_METHOD_INTERNAL DTLSv1_2_client_method_internal_data = { | |||
| 222 | .ssl_pending = ssl3_pending, | 202 | .ssl_pending = ssl3_pending, |
| 223 | .ssl_read_bytes = dtls1_read_bytes, | 203 | .ssl_read_bytes = dtls1_read_bytes, |
| 224 | .ssl_write_bytes = dtls1_write_app_data_bytes, | 204 | .ssl_write_bytes = dtls1_write_app_data_bytes, |
| 225 | .enc_flags = TLSV1_2_ENC_FLAGS, | ||
| 226 | }; | ||
| 227 | |||
| 228 | static const SSL_METHOD DTLSv1_2_client_method_data = { | ||
| 229 | .ssl_dispatch_alert = dtls1_dispatch_alert, | 205 | .ssl_dispatch_alert = dtls1_dispatch_alert, |
| 230 | .num_ciphers = ssl3_num_ciphers, | 206 | .num_ciphers = ssl3_num_ciphers, |
| 231 | .get_cipher = dtls1_get_cipher, | 207 | .get_cipher = dtls1_get_cipher, |
| 232 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 208 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 233 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 209 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 234 | .internal = &DTLSv1_2_client_method_internal_data, | 210 | .enc_flags = TLSV1_2_ENC_FLAGS, |
| 235 | }; | 211 | }; |
| 236 | 212 | ||
| 237 | const SSL_METHOD * | 213 | const SSL_METHOD * |
| @@ -289,7 +265,7 @@ DTLS_server_method(void) | |||
| 289 | } | 265 | } |
| 290 | 266 | ||
| 291 | #if defined(LIBRESSL_HAS_TLS1_3_CLIENT) && defined(LIBRESSL_HAS_TLS1_3_SERVER) | 267 | #if defined(LIBRESSL_HAS_TLS1_3_CLIENT) && defined(LIBRESSL_HAS_TLS1_3_SERVER) |
| 292 | static const SSL_METHOD_INTERNAL TLS_method_internal_data = { | 268 | static const SSL_METHOD TLS_method_data = { |
| 293 | .dtls = 0, | 269 | .dtls = 0, |
| 294 | .server = 1, | 270 | .server = 1, |
| 295 | .version = TLS1_3_VERSION, | 271 | .version = TLS1_3_VERSION, |
| @@ -306,20 +282,16 @@ static const SSL_METHOD_INTERNAL TLS_method_internal_data = { | |||
| 306 | .ssl_pending = tls13_legacy_pending, | 282 | .ssl_pending = tls13_legacy_pending, |
| 307 | .ssl_read_bytes = tls13_legacy_read_bytes, | 283 | .ssl_read_bytes = tls13_legacy_read_bytes, |
| 308 | .ssl_write_bytes = tls13_legacy_write_bytes, | 284 | .ssl_write_bytes = tls13_legacy_write_bytes, |
| 309 | .enc_flags = TLSV1_3_ENC_FLAGS, | ||
| 310 | }; | ||
| 311 | |||
| 312 | static const SSL_METHOD TLS_method_data = { | ||
| 313 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 285 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 314 | .num_ciphers = ssl3_num_ciphers, | 286 | .num_ciphers = ssl3_num_ciphers, |
| 315 | .get_cipher = ssl3_get_cipher, | 287 | .get_cipher = ssl3_get_cipher, |
| 316 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 288 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 317 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 289 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 318 | .internal = &TLS_method_internal_data, | 290 | .enc_flags = TLSV1_3_ENC_FLAGS, |
| 319 | }; | 291 | }; |
| 320 | #endif | 292 | #endif |
| 321 | 293 | ||
| 322 | static const SSL_METHOD_INTERNAL TLS_legacy_method_internal_data = { | 294 | static const SSL_METHOD TLS_legacy_method_data = { |
| 323 | .dtls = 0, | 295 | .dtls = 0, |
| 324 | .server = 1, | 296 | .server = 1, |
| 325 | .version = TLS1_2_VERSION, | 297 | .version = TLS1_2_VERSION, |
| @@ -336,20 +308,16 @@ static const SSL_METHOD_INTERNAL TLS_legacy_method_internal_data = { | |||
| 336 | .ssl_pending = ssl3_pending, | 308 | .ssl_pending = ssl3_pending, |
| 337 | .ssl_read_bytes = ssl3_read_bytes, | 309 | .ssl_read_bytes = ssl3_read_bytes, |
| 338 | .ssl_write_bytes = ssl3_write_bytes, | 310 | .ssl_write_bytes = ssl3_write_bytes, |
| 339 | .enc_flags = TLSV1_2_ENC_FLAGS, | ||
| 340 | }; | ||
| 341 | |||
| 342 | static const SSL_METHOD TLS_legacy_method_data = { | ||
| 343 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 311 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 344 | .num_ciphers = ssl3_num_ciphers, | 312 | .num_ciphers = ssl3_num_ciphers, |
| 345 | .get_cipher = ssl3_get_cipher, | 313 | .get_cipher = ssl3_get_cipher, |
| 346 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 314 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 347 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 315 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 348 | .internal = &TLS_legacy_method_internal_data, | 316 | .enc_flags = TLSV1_2_ENC_FLAGS, |
| 349 | }; | 317 | }; |
| 350 | 318 | ||
| 351 | #if defined(LIBRESSL_HAS_TLS1_3_CLIENT) | 319 | #if defined(LIBRESSL_HAS_TLS1_3_CLIENT) |
| 352 | static const SSL_METHOD_INTERNAL TLS_client_method_internal_data = { | 320 | static const SSL_METHOD TLS_client_method_data = { |
| 353 | .dtls = 0, | 321 | .dtls = 0, |
| 354 | .server = 0, | 322 | .server = 0, |
| 355 | .version = TLS1_3_VERSION, | 323 | .version = TLS1_3_VERSION, |
| @@ -366,21 +334,17 @@ static const SSL_METHOD_INTERNAL TLS_client_method_internal_data = { | |||
| 366 | .ssl_pending = tls13_legacy_pending, | 334 | .ssl_pending = tls13_legacy_pending, |
| 367 | .ssl_read_bytes = tls13_legacy_read_bytes, | 335 | .ssl_read_bytes = tls13_legacy_read_bytes, |
| 368 | .ssl_write_bytes = tls13_legacy_write_bytes, | 336 | .ssl_write_bytes = tls13_legacy_write_bytes, |
| 369 | .enc_flags = TLSV1_3_ENC_FLAGS, | ||
| 370 | }; | ||
| 371 | |||
| 372 | static const SSL_METHOD TLS_client_method_data = { | ||
| 373 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 337 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 374 | .num_ciphers = ssl3_num_ciphers, | 338 | .num_ciphers = ssl3_num_ciphers, |
| 375 | .get_cipher = ssl3_get_cipher, | 339 | .get_cipher = ssl3_get_cipher, |
| 376 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 340 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 377 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 341 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 378 | .internal = &TLS_client_method_internal_data, | 342 | .enc_flags = TLSV1_3_ENC_FLAGS, |
| 379 | }; | 343 | }; |
| 380 | 344 | ||
| 381 | #else | 345 | #else |
| 382 | 346 | ||
| 383 | static const SSL_METHOD_INTERNAL TLS_legacy_client_method_internal_data = { | 347 | static const SSL_METHOD TLS_legacy_client_method_data = { |
| 384 | .dtls = 0, | 348 | .dtls = 0, |
| 385 | .server = 0, | 349 | .server = 0, |
| 386 | .version = TLS1_2_VERSION, | 350 | .version = TLS1_2_VERSION, |
| @@ -397,20 +361,16 @@ static const SSL_METHOD_INTERNAL TLS_legacy_client_method_internal_data = { | |||
| 397 | .ssl_pending = ssl3_pending, | 361 | .ssl_pending = ssl3_pending, |
| 398 | .ssl_read_bytes = ssl3_read_bytes, | 362 | .ssl_read_bytes = ssl3_read_bytes, |
| 399 | .ssl_write_bytes = ssl3_write_bytes, | 363 | .ssl_write_bytes = ssl3_write_bytes, |
| 400 | .enc_flags = TLSV1_2_ENC_FLAGS, | ||
| 401 | }; | ||
| 402 | |||
| 403 | static const SSL_METHOD TLS_legacy_client_method_data = { | ||
| 404 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 364 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 405 | .num_ciphers = ssl3_num_ciphers, | 365 | .num_ciphers = ssl3_num_ciphers, |
| 406 | .get_cipher = ssl3_get_cipher, | 366 | .get_cipher = ssl3_get_cipher, |
| 407 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 367 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 408 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 368 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 409 | .internal = &TLS_legacy_client_method_internal_data, | 369 | .enc_flags = TLSV1_2_ENC_FLAGS, |
| 410 | }; | 370 | }; |
| 411 | #endif | 371 | #endif |
| 412 | 372 | ||
| 413 | static const SSL_METHOD_INTERNAL TLSv1_method_internal_data = { | 373 | static const SSL_METHOD TLSv1_method_data = { |
| 414 | .dtls = 0, | 374 | .dtls = 0, |
| 415 | .server = 1, | 375 | .server = 1, |
| 416 | .version = TLS1_VERSION, | 376 | .version = TLS1_VERSION, |
| @@ -427,19 +387,15 @@ static const SSL_METHOD_INTERNAL TLSv1_method_internal_data = { | |||
| 427 | .ssl_pending = ssl3_pending, | 387 | .ssl_pending = ssl3_pending, |
| 428 | .ssl_read_bytes = ssl3_read_bytes, | 388 | .ssl_read_bytes = ssl3_read_bytes, |
| 429 | .ssl_write_bytes = ssl3_write_bytes, | 389 | .ssl_write_bytes = ssl3_write_bytes, |
| 430 | .enc_flags = TLSV1_ENC_FLAGS, | ||
| 431 | }; | ||
| 432 | |||
| 433 | static const SSL_METHOD TLSv1_method_data = { | ||
| 434 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 390 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 435 | .num_ciphers = ssl3_num_ciphers, | 391 | .num_ciphers = ssl3_num_ciphers, |
| 436 | .get_cipher = ssl3_get_cipher, | 392 | .get_cipher = ssl3_get_cipher, |
| 437 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 393 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 438 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 394 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 439 | .internal = &TLSv1_method_internal_data, | 395 | .enc_flags = TLSV1_ENC_FLAGS, |
| 440 | }; | 396 | }; |
| 441 | 397 | ||
| 442 | static const SSL_METHOD_INTERNAL TLSv1_client_method_internal_data = { | 398 | static const SSL_METHOD TLSv1_client_method_data = { |
| 443 | .dtls = 0, | 399 | .dtls = 0, |
| 444 | .server = 0, | 400 | .server = 0, |
| 445 | .version = TLS1_VERSION, | 401 | .version = TLS1_VERSION, |
| @@ -456,19 +412,15 @@ static const SSL_METHOD_INTERNAL TLSv1_client_method_internal_data = { | |||
| 456 | .ssl_pending = ssl3_pending, | 412 | .ssl_pending = ssl3_pending, |
| 457 | .ssl_read_bytes = ssl3_read_bytes, | 413 | .ssl_read_bytes = ssl3_read_bytes, |
| 458 | .ssl_write_bytes = ssl3_write_bytes, | 414 | .ssl_write_bytes = ssl3_write_bytes, |
| 459 | .enc_flags = TLSV1_ENC_FLAGS, | ||
| 460 | }; | ||
| 461 | |||
| 462 | static const SSL_METHOD TLSv1_client_method_data = { | ||
| 463 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 415 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 464 | .num_ciphers = ssl3_num_ciphers, | 416 | .num_ciphers = ssl3_num_ciphers, |
| 465 | .get_cipher = ssl3_get_cipher, | 417 | .get_cipher = ssl3_get_cipher, |
| 466 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 418 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 467 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 419 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 468 | .internal = &TLSv1_client_method_internal_data, | 420 | .enc_flags = TLSV1_ENC_FLAGS, |
| 469 | }; | 421 | }; |
| 470 | 422 | ||
| 471 | static const SSL_METHOD_INTERNAL TLSv1_1_method_internal_data = { | 423 | static const SSL_METHOD TLSv1_1_method_data = { |
| 472 | .dtls = 0, | 424 | .dtls = 0, |
| 473 | .server = 1, | 425 | .server = 1, |
| 474 | .version = TLS1_1_VERSION, | 426 | .version = TLS1_1_VERSION, |
| @@ -485,19 +437,15 @@ static const SSL_METHOD_INTERNAL TLSv1_1_method_internal_data = { | |||
| 485 | .ssl_pending = ssl3_pending, | 437 | .ssl_pending = ssl3_pending, |
| 486 | .ssl_read_bytes = ssl3_read_bytes, | 438 | .ssl_read_bytes = ssl3_read_bytes, |
| 487 | .ssl_write_bytes = ssl3_write_bytes, | 439 | .ssl_write_bytes = ssl3_write_bytes, |
| 488 | .enc_flags = TLSV1_1_ENC_FLAGS, | ||
| 489 | }; | ||
| 490 | |||
| 491 | static const SSL_METHOD TLSv1_1_method_data = { | ||
| 492 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 440 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 493 | .num_ciphers = ssl3_num_ciphers, | 441 | .num_ciphers = ssl3_num_ciphers, |
| 494 | .get_cipher = ssl3_get_cipher, | 442 | .get_cipher = ssl3_get_cipher, |
| 495 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 443 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 496 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 444 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 497 | .internal = &TLSv1_1_method_internal_data, | 445 | .enc_flags = TLSV1_1_ENC_FLAGS, |
| 498 | }; | 446 | }; |
| 499 | 447 | ||
| 500 | static const SSL_METHOD_INTERNAL TLSv1_1_client_method_internal_data = { | 448 | static const SSL_METHOD TLSv1_1_client_method_data = { |
| 501 | .dtls = 0, | 449 | .dtls = 0, |
| 502 | .server = 0, | 450 | .server = 0, |
| 503 | .version = TLS1_1_VERSION, | 451 | .version = TLS1_1_VERSION, |
| @@ -514,19 +462,15 @@ static const SSL_METHOD_INTERNAL TLSv1_1_client_method_internal_data = { | |||
| 514 | .ssl_pending = ssl3_pending, | 462 | .ssl_pending = ssl3_pending, |
| 515 | .ssl_read_bytes = ssl3_read_bytes, | 463 | .ssl_read_bytes = ssl3_read_bytes, |
| 516 | .ssl_write_bytes = ssl3_write_bytes, | 464 | .ssl_write_bytes = ssl3_write_bytes, |
| 517 | .enc_flags = TLSV1_1_ENC_FLAGS, | ||
| 518 | }; | ||
| 519 | |||
| 520 | static const SSL_METHOD TLSv1_1_client_method_data = { | ||
| 521 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 465 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 522 | .num_ciphers = ssl3_num_ciphers, | 466 | .num_ciphers = ssl3_num_ciphers, |
| 523 | .get_cipher = ssl3_get_cipher, | 467 | .get_cipher = ssl3_get_cipher, |
| 524 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 468 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 525 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 469 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 526 | .internal = &TLSv1_1_client_method_internal_data, | 470 | .enc_flags = TLSV1_1_ENC_FLAGS, |
| 527 | }; | 471 | }; |
| 528 | 472 | ||
| 529 | static const SSL_METHOD_INTERNAL TLSv1_2_method_internal_data = { | 473 | static const SSL_METHOD TLSv1_2_method_data = { |
| 530 | .dtls = 0, | 474 | .dtls = 0, |
| 531 | .server = 1, | 475 | .server = 1, |
| 532 | .version = TLS1_2_VERSION, | 476 | .version = TLS1_2_VERSION, |
| @@ -543,19 +487,15 @@ static const SSL_METHOD_INTERNAL TLSv1_2_method_internal_data = { | |||
| 543 | .ssl_pending = ssl3_pending, | 487 | .ssl_pending = ssl3_pending, |
| 544 | .ssl_read_bytes = ssl3_read_bytes, | 488 | .ssl_read_bytes = ssl3_read_bytes, |
| 545 | .ssl_write_bytes = ssl3_write_bytes, | 489 | .ssl_write_bytes = ssl3_write_bytes, |
| 546 | .enc_flags = TLSV1_2_ENC_FLAGS, | ||
| 547 | }; | ||
| 548 | |||
| 549 | static const SSL_METHOD TLSv1_2_method_data = { | ||
| 550 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 490 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 551 | .num_ciphers = ssl3_num_ciphers, | 491 | .num_ciphers = ssl3_num_ciphers, |
| 552 | .get_cipher = ssl3_get_cipher, | 492 | .get_cipher = ssl3_get_cipher, |
| 553 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 493 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 554 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 494 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 555 | .internal = &TLSv1_2_method_internal_data, | 495 | .enc_flags = TLSV1_2_ENC_FLAGS, |
| 556 | }; | 496 | }; |
| 557 | 497 | ||
| 558 | static const SSL_METHOD_INTERNAL TLSv1_2_client_method_internal_data = { | 498 | static const SSL_METHOD TLSv1_2_client_method_data = { |
| 559 | .dtls = 0, | 499 | .dtls = 0, |
| 560 | .server = 0, | 500 | .server = 0, |
| 561 | .version = TLS1_2_VERSION, | 501 | .version = TLS1_2_VERSION, |
| @@ -572,16 +512,12 @@ static const SSL_METHOD_INTERNAL TLSv1_2_client_method_internal_data = { | |||
| 572 | .ssl_pending = ssl3_pending, | 512 | .ssl_pending = ssl3_pending, |
| 573 | .ssl_read_bytes = ssl3_read_bytes, | 513 | .ssl_read_bytes = ssl3_read_bytes, |
| 574 | .ssl_write_bytes = ssl3_write_bytes, | 514 | .ssl_write_bytes = ssl3_write_bytes, |
| 575 | .enc_flags = TLSV1_2_ENC_FLAGS, | ||
| 576 | }; | ||
| 577 | |||
| 578 | static const SSL_METHOD TLSv1_2_client_method_data = { | ||
| 579 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 515 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
| 580 | .num_ciphers = ssl3_num_ciphers, | 516 | .num_ciphers = ssl3_num_ciphers, |
| 581 | .get_cipher = ssl3_get_cipher, | 517 | .get_cipher = ssl3_get_cipher, |
| 582 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 518 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
| 583 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 519 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
| 584 | .internal = &TLSv1_2_client_method_internal_data, | 520 | .enc_flags = TLSV1_2_ENC_FLAGS, |
| 585 | }; | 521 | }; |
| 586 | 522 | ||
| 587 | const SSL_METHOD * | 523 | const SSL_METHOD * |
diff --git a/src/lib/libssl/ssl_packet.c b/src/lib/libssl/ssl_packet.c index 0a0c5a29df..af56dcef7f 100644 --- a/src/lib/libssl/ssl_packet.c +++ b/src/lib/libssl/ssl_packet.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_packet.c,v 1.11 2021/05/16 14:10:43 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_packet.c,v 1.12 2021/07/01 17:53:39 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -246,8 +246,7 @@ ssl_server_legacy_first_packet(SSL *s) | |||
| 246 | return 1; | 246 | return 1; |
| 247 | 247 | ||
| 248 | /* Only continue if this is not a version locked method. */ | 248 | /* Only continue if this is not a version locked method. */ |
| 249 | if (s->method->internal->min_tls_version == | 249 | if (s->method->min_tls_version == s->method->max_tls_version) |
| 250 | s->method->internal->max_tls_version) | ||
| 251 | return 1; | 250 | return 1; |
| 252 | 251 | ||
| 253 | if (ssl_is_sslv2_client_hello(&header) == 1) { | 252 | if (ssl_is_sslv2_client_hello(&header) == 1) { |
diff --git a/src/lib/libssl/ssl_versions.c b/src/lib/libssl/ssl_versions.c index 68e69ebca3..c633b58c25 100644 --- a/src/lib/libssl/ssl_versions.c +++ b/src/lib/libssl/ssl_versions.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_versions.c,v 1.19 2021/06/27 16:54:14 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_versions.c,v 1.20 2021/07/01 17:53:39 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -61,7 +61,7 @@ ssl_version_set_min(const SSL_METHOD *meth, uint16_t proto_ver, | |||
| 61 | uint16_t min_proto, min_version, max_version; | 61 | uint16_t min_proto, min_version, max_version; |
| 62 | 62 | ||
| 63 | if (proto_ver == 0) { | 63 | if (proto_ver == 0) { |
| 64 | *out_tls_ver = meth->internal->min_tls_version; | 64 | *out_tls_ver = meth->min_tls_version; |
| 65 | *out_proto_ver = 0; | 65 | *out_proto_ver = 0; |
| 66 | return 1; | 66 | return 1; |
| 67 | } | 67 | } |
| @@ -69,17 +69,17 @@ ssl_version_set_min(const SSL_METHOD *meth, uint16_t proto_ver, | |||
| 69 | min_version = proto_ver; | 69 | min_version = proto_ver; |
| 70 | max_version = max_tls_ver; | 70 | max_version = max_tls_ver; |
| 71 | 71 | ||
| 72 | if (meth->internal->dtls) { | 72 | if (meth->dtls) { |
| 73 | if ((min_version = ssl_dtls_to_tls_version(proto_ver)) == 0) | 73 | if ((min_version = ssl_dtls_to_tls_version(proto_ver)) == 0) |
| 74 | return 0; | 74 | return 0; |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | if (!ssl_clamp_tls_version_range(&min_version, &max_version, | 77 | if (!ssl_clamp_tls_version_range(&min_version, &max_version, |
| 78 | meth->internal->min_tls_version, meth->internal->max_tls_version)) | 78 | meth->min_tls_version, meth->max_tls_version)) |
| 79 | return 0; | 79 | return 0; |
| 80 | 80 | ||
| 81 | min_proto = min_version; | 81 | min_proto = min_version; |
| 82 | if (meth->internal->dtls) { | 82 | if (meth->dtls) { |
| 83 | if ((min_proto = ssl_tls_to_dtls_version(min_version)) == 0) | 83 | if ((min_proto = ssl_tls_to_dtls_version(min_version)) == 0) |
| 84 | return 0; | 84 | return 0; |
| 85 | } | 85 | } |
| @@ -96,7 +96,7 @@ ssl_version_set_max(const SSL_METHOD *meth, uint16_t proto_ver, | |||
| 96 | uint16_t max_proto, min_version, max_version; | 96 | uint16_t max_proto, min_version, max_version; |
| 97 | 97 | ||
| 98 | if (proto_ver == 0) { | 98 | if (proto_ver == 0) { |
| 99 | *out_tls_ver = meth->internal->max_tls_version; | 99 | *out_tls_ver = meth->max_tls_version; |
| 100 | *out_proto_ver = 0; | 100 | *out_proto_ver = 0; |
| 101 | return 1; | 101 | return 1; |
| 102 | } | 102 | } |
| @@ -104,17 +104,17 @@ ssl_version_set_max(const SSL_METHOD *meth, uint16_t proto_ver, | |||
| 104 | min_version = min_tls_ver; | 104 | min_version = min_tls_ver; |
| 105 | max_version = proto_ver; | 105 | max_version = proto_ver; |
| 106 | 106 | ||
| 107 | if (meth->internal->dtls) { | 107 | if (meth->dtls) { |
| 108 | if ((max_version = ssl_dtls_to_tls_version(proto_ver)) == 0) | 108 | if ((max_version = ssl_dtls_to_tls_version(proto_ver)) == 0) |
| 109 | return 0; | 109 | return 0; |
| 110 | } | 110 | } |
| 111 | 111 | ||
| 112 | if (!ssl_clamp_tls_version_range(&min_version, &max_version, | 112 | if (!ssl_clamp_tls_version_range(&min_version, &max_version, |
| 113 | meth->internal->min_tls_version, meth->internal->max_tls_version)) | 113 | meth->min_tls_version, meth->max_tls_version)) |
| 114 | return 0; | 114 | return 0; |
| 115 | 115 | ||
| 116 | max_proto = max_version; | 116 | max_proto = max_version; |
| 117 | if (meth->internal->dtls) { | 117 | if (meth->dtls) { |
| 118 | if ((max_proto = ssl_tls_to_dtls_version(max_version)) == 0) | 118 | if ((max_proto = ssl_tls_to_dtls_version(max_version)) == 0) |
| 119 | return 0; | 119 | return 0; |
| 120 | } | 120 | } |
| @@ -195,8 +195,7 @@ ssl_supported_tls_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver) | |||
| 195 | 195 | ||
| 196 | /* Limit to the versions supported by this method. */ | 196 | /* Limit to the versions supported by this method. */ |
| 197 | if (!ssl_clamp_tls_version_range(&min_version, &max_version, | 197 | if (!ssl_clamp_tls_version_range(&min_version, &max_version, |
| 198 | s->method->internal->min_tls_version, | 198 | s->method->min_tls_version, s->method->max_tls_version)) |
| 199 | s->method->internal->max_tls_version)) | ||
| 200 | return 0; | 199 | return 0; |
| 201 | 200 | ||
| 202 | if (min_ver != NULL) | 201 | if (min_ver != NULL) |
diff --git a/src/lib/libssl/t1_enc.c b/src/lib/libssl/t1_enc.c index 15afb1bae8..65e2063398 100644 --- a/src/lib/libssl/t1_enc.c +++ b/src/lib/libssl/t1_enc.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: t1_enc.c,v 1.150 2021/06/13 15:34:41 jsing Exp $ */ | 1 | /* $OpenBSD: t1_enc.c,v 1.151 2021/07/01 17:53:39 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 | * |
| @@ -389,7 +389,7 @@ tls1_setup_key_block(SSL *s) | |||
| 389 | key_block = NULL; | 389 | key_block = NULL; |
| 390 | 390 | ||
| 391 | if (!(s->internal->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS) && | 391 | if (!(s->internal->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS) && |
| 392 | s->method->internal->version <= TLS1_VERSION) { | 392 | s->method->version <= TLS1_VERSION) { |
| 393 | /* | 393 | /* |
| 394 | * Enable vulnerability countermeasure for CBC ciphers with | 394 | * Enable vulnerability countermeasure for CBC ciphers with |
| 395 | * known-IV problem (http://www.openssl.org/~bodo/tls-cbc.txt) | 395 | * known-IV problem (http://www.openssl.org/~bodo/tls-cbc.txt) |
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index 72958b7c56..3cb2d8a113 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.181 2021/06/11 11:13:53 jsing Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.182 2021/07/01 17:53:39 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 | * |
| @@ -129,7 +129,7 @@ tls1_new(SSL *s) | |||
| 129 | { | 129 | { |
| 130 | if (!ssl3_new(s)) | 130 | if (!ssl3_new(s)) |
| 131 | return (0); | 131 | return (0); |
| 132 | s->method->internal->ssl_clear(s); | 132 | s->method->ssl_clear(s); |
| 133 | return (1); | 133 | return (1); |
| 134 | } | 134 | } |
| 135 | 135 | ||
| @@ -147,7 +147,7 @@ void | |||
| 147 | tls1_clear(SSL *s) | 147 | tls1_clear(SSL *s) |
| 148 | { | 148 | { |
| 149 | ssl3_clear(s); | 149 | ssl3_clear(s); |
| 150 | s->version = s->method->internal->version; | 150 | s->version = s->method->version; |
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | static const int nid_list[] = { | 153 | static const int nid_list[] = { |
diff --git a/src/lib/libssl/tls13_handshake.c b/src/lib/libssl/tls13_handshake.c index 55fefe544f..310a2116b8 100644 --- a/src/lib/libssl/tls13_handshake.c +++ b/src/lib/libssl/tls13_handshake.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls13_handshake.c,v 1.68 2021/06/28 18:48:56 tb Exp $ */ | 1 | /* $OpenBSD: tls13_handshake.c,v 1.69 2021/07/01 17:53:39 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2018-2021 Theo Buehler <tb@openbsd.org> | 3 | * Copyright (c) 2018-2021 Theo Buehler <tb@openbsd.org> |
| 4 | * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> | 4 | * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> |
| @@ -535,7 +535,7 @@ tls13_handshake_recv_action(struct tls13_ctx *ctx, | |||
| 535 | tls13_handshake_msg_free(ctx->hs_msg); | 535 | tls13_handshake_msg_free(ctx->hs_msg); |
| 536 | ctx->hs_msg = NULL; | 536 | ctx->hs_msg = NULL; |
| 537 | 537 | ||
| 538 | if (ctx->ssl->method->internal->version < TLS1_3_VERSION) | 538 | if (ctx->ssl->method->version < TLS1_3_VERSION) |
| 539 | return TLS13_IO_USE_LEGACY; | 539 | return TLS13_IO_USE_LEGACY; |
| 540 | 540 | ||
| 541 | return ret; | 541 | return ret; |
diff --git a/src/lib/libssl/tls13_legacy.c b/src/lib/libssl/tls13_legacy.c index cd9ec9942d..beb8952402 100644 --- a/src/lib/libssl/tls13_legacy.c +++ b/src/lib/libssl/tls13_legacy.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls13_legacy.c,v 1.25 2021/06/28 15:36:51 tb Exp $ */ | 1 | /* $OpenBSD: tls13_legacy.c,v 1.26 2021/07/01 17:53:39 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -358,8 +358,8 @@ tls13_use_legacy_client(struct tls13_ctx *ctx) | |||
| 358 | if (!tls13_use_legacy_stack(ctx)) | 358 | if (!tls13_use_legacy_stack(ctx)) |
| 359 | return 0; | 359 | return 0; |
| 360 | 360 | ||
| 361 | s->internal->handshake_func = s->method->internal->ssl_connect; | 361 | s->internal->handshake_func = s->method->ssl_connect; |
| 362 | s->client_version = s->version = s->method->internal->max_tls_version; | 362 | s->client_version = s->version = s->method->max_tls_version; |
| 363 | 363 | ||
| 364 | return 1; | 364 | return 1; |
| 365 | } | 365 | } |
| @@ -372,8 +372,8 @@ tls13_use_legacy_server(struct tls13_ctx *ctx) | |||
| 372 | if (!tls13_use_legacy_stack(ctx)) | 372 | if (!tls13_use_legacy_stack(ctx)) |
| 373 | return 0; | 373 | return 0; |
| 374 | 374 | ||
| 375 | s->internal->handshake_func = s->method->internal->ssl_accept; | 375 | s->internal->handshake_func = s->method->ssl_accept; |
| 376 | s->client_version = s->version = s->method->internal->max_tls_version; | 376 | s->client_version = s->version = s->method->max_tls_version; |
| 377 | s->server = 1; | 377 | s->server = 1; |
| 378 | 378 | ||
| 379 | return 1; | 379 | return 1; |
| @@ -405,7 +405,7 @@ tls13_legacy_accept(SSL *ssl) | |||
| 405 | 405 | ||
| 406 | ret = tls13_server_accept(ctx); | 406 | ret = tls13_server_accept(ctx); |
| 407 | if (ret == TLS13_IO_USE_LEGACY) | 407 | if (ret == TLS13_IO_USE_LEGACY) |
| 408 | return ssl->method->internal->ssl_accept(ssl); | 408 | return ssl->method->ssl_accept(ssl); |
| 409 | 409 | ||
| 410 | return tls13_legacy_return_code(ssl, ret); | 410 | return tls13_legacy_return_code(ssl, ret); |
| 411 | } | 411 | } |
| @@ -420,7 +420,7 @@ tls13_legacy_connect(SSL *ssl) | |||
| 420 | /* XXX drop back to legacy for client auth for now */ | 420 | /* XXX drop back to legacy for client auth for now */ |
| 421 | if (ssl->cert->key->privatekey != NULL) { | 421 | if (ssl->cert->key->privatekey != NULL) { |
| 422 | ssl->method = tls_legacy_client_method(); | 422 | ssl->method = tls_legacy_client_method(); |
| 423 | return ssl->method->internal->ssl_connect(ssl); | 423 | return ssl->method->ssl_connect(ssl); |
| 424 | } | 424 | } |
| 425 | #endif | 425 | #endif |
| 426 | 426 | ||
| @@ -444,7 +444,7 @@ tls13_legacy_connect(SSL *ssl) | |||
| 444 | 444 | ||
| 445 | ret = tls13_client_connect(ctx); | 445 | ret = tls13_client_connect(ctx); |
| 446 | if (ret == TLS13_IO_USE_LEGACY) | 446 | if (ret == TLS13_IO_USE_LEGACY) |
| 447 | return ssl->method->internal->ssl_connect(ssl); | 447 | return ssl->method->ssl_connect(ssl); |
| 448 | 448 | ||
| 449 | return tls13_legacy_return_code(ssl, ret); | 449 | return tls13_legacy_return_code(ssl, ret); |
| 450 | } | 450 | } |
diff --git a/src/lib/libssl/tls13_server.c b/src/lib/libssl/tls13_server.c index ff410fbb34..d2c7abbf7c 100644 --- a/src/lib/libssl/tls13_server.c +++ b/src/lib/libssl/tls13_server.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls13_server.c,v 1.83 2021/06/29 19:20:39 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_server.c,v 1.84 2021/07/01 17:53:39 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org> |
| 4 | * Copyright (c) 2020 Bob Beck <beck@openbsd.org> | 4 | * Copyright (c) 2020 Bob Beck <beck@openbsd.org> |
| @@ -282,7 +282,7 @@ tls13_client_hello_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 282 | goto err; | 282 | goto err; |
| 283 | 283 | ||
| 284 | /* See if we switched back to the legacy client method. */ | 284 | /* See if we switched back to the legacy client method. */ |
| 285 | if (s->method->internal->version < TLS1_3_VERSION) | 285 | if (s->method->version < TLS1_3_VERSION) |
| 286 | return 1; | 286 | return 1; |
| 287 | 287 | ||
| 288 | /* | 288 | /* |
| @@ -460,7 +460,7 @@ tls13_client_hello_retry_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 460 | return 0; | 460 | return 0; |
| 461 | 461 | ||
| 462 | /* XXX - need further checks. */ | 462 | /* XXX - need further checks. */ |
| 463 | if (s->method->internal->version < TLS1_3_VERSION) | 463 | if (s->method->version < TLS1_3_VERSION) |
| 464 | return 0; | 464 | return 0; |
| 465 | 465 | ||
| 466 | ctx->hs->tls13.hrr = 0; | 466 | ctx->hs->tls13.hrr = 0; |
