diff options
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 3 | ||||
-rw-r--r-- | src/lib/libssl/ssl_methods.c | 54 |
2 files changed, 52 insertions, 5 deletions
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index bf1f846d13..f7a8b0786d 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.280 2020/06/06 01:40:09 beck Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.281 2020/07/07 19:24:23 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 | * |
@@ -1104,6 +1104,7 @@ int ssl_downgrade_max_version(SSL *s, uint16_t *max_ver); | |||
1104 | int ssl_cipher_is_permitted(const SSL_CIPHER *cipher, uint16_t min_ver, | 1104 | int ssl_cipher_is_permitted(const SSL_CIPHER *cipher, uint16_t min_ver, |
1105 | uint16_t max_ver); | 1105 | uint16_t max_ver); |
1106 | 1106 | ||
1107 | const SSL_METHOD *tls_legacy_method(void); | ||
1107 | const SSL_METHOD *tls_legacy_client_method(void); | 1108 | const SSL_METHOD *tls_legacy_client_method(void); |
1108 | const SSL_METHOD *tls_legacy_server_method(void); | 1109 | const SSL_METHOD *tls_legacy_server_method(void); |
1109 | 1110 | ||
diff --git a/src/lib/libssl/ssl_methods.c b/src/lib/libssl/ssl_methods.c index 276fcc66d8..d679e3242f 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.12 2020/02/06 16:05:58 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_methods.c,v 1.13 2020/07/07 19:24:23 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 | * |
@@ -421,7 +421,39 @@ TLSv1_2_client_method(void) | |||
421 | 421 | ||
422 | static const SSL_METHOD *tls1_get_method(int ver); | 422 | static const SSL_METHOD *tls1_get_method(int ver); |
423 | 423 | ||
424 | #if defined(LIBRESSL_HAS_TLS1_3_CLIENT) && defined(LIBRESSL_HAS_TLS1_3_SERVER) | ||
424 | static const SSL_METHOD_INTERNAL TLS_method_internal_data = { | 425 | static const SSL_METHOD_INTERNAL TLS_method_internal_data = { |
426 | .version = TLS1_3_VERSION, | ||
427 | .min_version = TLS1_VERSION, | ||
428 | .max_version = TLS1_3_VERSION, | ||
429 | .ssl_new = tls1_new, | ||
430 | .ssl_clear = tls1_clear, | ||
431 | .ssl_free = tls1_free, | ||
432 | .ssl_accept = tls13_legacy_accept, | ||
433 | .ssl_connect = tls13_legacy_connect, | ||
434 | .ssl_shutdown = tls13_legacy_shutdown, | ||
435 | .get_ssl_method = tls1_get_client_method, | ||
436 | .get_timeout = tls1_default_timeout, | ||
437 | .ssl_version = ssl_undefined_void_function, | ||
438 | .ssl_renegotiate = ssl_undefined_function, | ||
439 | .ssl_renegotiate_check = ssl_ok, | ||
440 | .ssl_pending = tls13_legacy_pending, | ||
441 | .ssl_read_bytes = tls13_legacy_read_bytes, | ||
442 | .ssl_write_bytes = tls13_legacy_write_bytes, | ||
443 | .ssl3_enc = &TLSv1_3_enc_data, | ||
444 | }; | ||
445 | |||
446 | static const SSL_METHOD TLS_method_data = { | ||
447 | .ssl_dispatch_alert = ssl3_dispatch_alert, | ||
448 | .num_ciphers = ssl3_num_ciphers, | ||
449 | .get_cipher = ssl3_get_cipher, | ||
450 | .get_cipher_by_char = ssl3_get_cipher_by_char, | ||
451 | .put_cipher_by_char = ssl3_put_cipher_by_char, | ||
452 | .internal = &TLS_method_internal_data, | ||
453 | }; | ||
454 | #endif | ||
455 | |||
456 | static const SSL_METHOD_INTERNAL TLS_legacy_method_internal_data = { | ||
425 | .version = TLS1_2_VERSION, | 457 | .version = TLS1_2_VERSION, |
426 | .min_version = TLS1_VERSION, | 458 | .min_version = TLS1_VERSION, |
427 | .max_version = TLS1_2_VERSION, | 459 | .max_version = TLS1_2_VERSION, |
@@ -442,13 +474,13 @@ static const SSL_METHOD_INTERNAL TLS_method_internal_data = { | |||
442 | .ssl3_enc = &TLSv1_2_enc_data, | 474 | .ssl3_enc = &TLSv1_2_enc_data, |
443 | }; | 475 | }; |
444 | 476 | ||
445 | static const SSL_METHOD TLS_method_data = { | 477 | static const SSL_METHOD TLS_legacy_method_data = { |
446 | .ssl_dispatch_alert = ssl3_dispatch_alert, | 478 | .ssl_dispatch_alert = ssl3_dispatch_alert, |
447 | .num_ciphers = ssl3_num_ciphers, | 479 | .num_ciphers = ssl3_num_ciphers, |
448 | .get_cipher = ssl3_get_cipher, | 480 | .get_cipher = ssl3_get_cipher, |
449 | .get_cipher_by_char = ssl3_get_cipher_by_char, | 481 | .get_cipher_by_char = ssl3_get_cipher_by_char, |
450 | .put_cipher_by_char = ssl3_put_cipher_by_char, | 482 | .put_cipher_by_char = ssl3_put_cipher_by_char, |
451 | .internal = &TLS_method_internal_data, | 483 | .internal = &TLS_legacy_method_internal_data, |
452 | }; | 484 | }; |
453 | 485 | ||
454 | static const SSL_METHOD_INTERNAL TLSv1_method_internal_data = { | 486 | static const SSL_METHOD_INTERNAL TLSv1_method_internal_data = { |
@@ -544,6 +576,10 @@ static const SSL_METHOD TLSv1_2_method_data = { | |||
544 | static const SSL_METHOD * | 576 | static const SSL_METHOD * |
545 | tls1_get_method(int ver) | 577 | tls1_get_method(int ver) |
546 | { | 578 | { |
579 | #if defined(LIBRESSL_HAS_TLS1_3_CLIENT) && defined(LIBRESSL_HAS_TLS1_3_SERVER) | ||
580 | if (ver == TLS1_3_VERSION) | ||
581 | return (TLS_method()); | ||
582 | #endif | ||
547 | if (ver == TLS1_2_VERSION) | 583 | if (ver == TLS1_2_VERSION) |
548 | return (TLSv1_2_method()); | 584 | return (TLSv1_2_method()); |
549 | if (ver == TLS1_1_VERSION) | 585 | if (ver == TLS1_1_VERSION) |
@@ -562,7 +598,17 @@ SSLv23_method(void) | |||
562 | const SSL_METHOD * | 598 | const SSL_METHOD * |
563 | TLS_method(void) | 599 | TLS_method(void) |
564 | { | 600 | { |
565 | return &TLS_method_data; | 601 | #if defined(LIBRESSL_HAS_TLS1_3_CLIENT) && defined(LIBRESSL_HAS_TLS1_3_SERVER) |
602 | return (&TLS_method_data); | ||
603 | #else | ||
604 | return tls_legacy_method(); | ||
605 | #endif | ||
606 | } | ||
607 | |||
608 | const SSL_METHOD * | ||
609 | tls_legacy_method(void) | ||
610 | { | ||
611 | return (&TLS_legacy_method_data); | ||
566 | } | 612 | } |
567 | 613 | ||
568 | const SSL_METHOD * | 614 | const SSL_METHOD * |