1*8dc90bbaSjsing /* $OpenBSD: ssl_methods.c,v 1.9 2020/01/23 03:17:40 jsing Exp $ */ 29158af98Sjsing /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 39158af98Sjsing * All rights reserved. 49158af98Sjsing * 59158af98Sjsing * This package is an SSL implementation written 69158af98Sjsing * by Eric Young (eay@cryptsoft.com). 79158af98Sjsing * The implementation was written so as to conform with Netscapes SSL. 89158af98Sjsing * 99158af98Sjsing * This library is free for commercial and non-commercial use as long as 109158af98Sjsing * the following conditions are aheared to. The following conditions 119158af98Sjsing * apply to all code found in this distribution, be it the RC4, RSA, 129158af98Sjsing * lhash, DES, etc., code; not just the SSL code. The SSL documentation 139158af98Sjsing * included with this distribution is covered by the same copyright terms 149158af98Sjsing * except that the holder is Tim Hudson (tjh@cryptsoft.com). 159158af98Sjsing * 169158af98Sjsing * Copyright remains Eric Young's, and as such any Copyright notices in 179158af98Sjsing * the code are not to be removed. 189158af98Sjsing * If this package is used in a product, Eric Young should be given attribution 199158af98Sjsing * as the author of the parts of the library used. 209158af98Sjsing * This can be in the form of a textual message at program startup or 219158af98Sjsing * in documentation (online or textual) provided with the package. 229158af98Sjsing * 239158af98Sjsing * Redistribution and use in source and binary forms, with or without 249158af98Sjsing * modification, are permitted provided that the following conditions 259158af98Sjsing * are met: 269158af98Sjsing * 1. Redistributions of source code must retain the copyright 279158af98Sjsing * notice, this list of conditions and the following disclaimer. 289158af98Sjsing * 2. Redistributions in binary form must reproduce the above copyright 299158af98Sjsing * notice, this list of conditions and the following disclaimer in the 309158af98Sjsing * documentation and/or other materials provided with the distribution. 319158af98Sjsing * 3. All advertising materials mentioning features or use of this software 329158af98Sjsing * must display the following acknowledgement: 339158af98Sjsing * "This product includes cryptographic software written by 349158af98Sjsing * Eric Young (eay@cryptsoft.com)" 359158af98Sjsing * The word 'cryptographic' can be left out if the rouines from the library 369158af98Sjsing * being used are not cryptographic related :-). 379158af98Sjsing * 4. If you include any Windows specific code (or a derivative thereof) from 389158af98Sjsing * the apps directory (application code) you must include an acknowledgement: 399158af98Sjsing * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 409158af98Sjsing * 419158af98Sjsing * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 429158af98Sjsing * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 439158af98Sjsing * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 449158af98Sjsing * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 459158af98Sjsing * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 469158af98Sjsing * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 479158af98Sjsing * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 489158af98Sjsing * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 499158af98Sjsing * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 509158af98Sjsing * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 519158af98Sjsing * SUCH DAMAGE. 529158af98Sjsing * 539158af98Sjsing * The licence and distribution terms for any publically available version or 549158af98Sjsing * derivative of this code cannot be changed. i.e. this code cannot simply be 559158af98Sjsing * copied and put under another distribution licence 569158af98Sjsing * [including the GNU Public Licence.] 579158af98Sjsing */ 589158af98Sjsing 599158af98Sjsing #include "ssl_locl.h" 60efee3f2fSjsing #include "tls13_internal.h" 619158af98Sjsing 629158af98Sjsing static const SSL_METHOD_INTERNAL DTLSv1_client_method_internal_data = { 639158af98Sjsing .version = DTLS1_VERSION, 649158af98Sjsing .min_version = DTLS1_VERSION, 659158af98Sjsing .max_version = DTLS1_VERSION, 669158af98Sjsing .ssl_new = dtls1_new, 679158af98Sjsing .ssl_clear = dtls1_clear, 689158af98Sjsing .ssl_free = dtls1_free, 699158af98Sjsing .ssl_accept = ssl_undefined_function, 709158af98Sjsing .ssl_connect = ssl3_connect, 711a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 729158af98Sjsing .get_ssl_method = dtls1_get_client_method, 739158af98Sjsing .get_timeout = dtls1_default_timeout, 749158af98Sjsing .ssl_version = ssl_undefined_void_function, 759158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 769158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 779158af98Sjsing .ssl_get_message = dtls1_get_message, 78*8dc90bbaSjsing .ssl_pending = ssl3_pending, 799158af98Sjsing .ssl_read_bytes = dtls1_read_bytes, 809158af98Sjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 819158af98Sjsing .ssl3_enc = &DTLSv1_enc_data, 829158af98Sjsing }; 839158af98Sjsing 849158af98Sjsing static const SSL_METHOD DTLSv1_client_method_data = { 859158af98Sjsing .ssl_dispatch_alert = dtls1_dispatch_alert, 869158af98Sjsing .num_ciphers = ssl3_num_ciphers, 879158af98Sjsing .get_cipher = dtls1_get_cipher, 889158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 899158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 909158af98Sjsing .internal = &DTLSv1_client_method_internal_data, 919158af98Sjsing }; 929158af98Sjsing 939158af98Sjsing const SSL_METHOD * 949158af98Sjsing DTLSv1_client_method(void) 959158af98Sjsing { 969158af98Sjsing return &DTLSv1_client_method_data; 979158af98Sjsing } 989158af98Sjsing 999158af98Sjsing const SSL_METHOD * 10071023d34Sjsing DTLS_client_method(void) 10171023d34Sjsing { 10271023d34Sjsing return DTLSv1_client_method(); 10371023d34Sjsing } 10471023d34Sjsing 10571023d34Sjsing const SSL_METHOD * 1069158af98Sjsing dtls1_get_client_method(int ver) 1079158af98Sjsing { 1089158af98Sjsing if (ver == DTLS1_VERSION) 1099158af98Sjsing return (DTLSv1_client_method()); 1109158af98Sjsing return (NULL); 1119158af98Sjsing } 1129158af98Sjsing 1139158af98Sjsing static const SSL_METHOD *dtls1_get_method(int ver); 1149158af98Sjsing 1159158af98Sjsing static const SSL_METHOD_INTERNAL DTLSv1_method_internal_data = { 1169158af98Sjsing .version = DTLS1_VERSION, 1179158af98Sjsing .min_version = DTLS1_VERSION, 1189158af98Sjsing .max_version = DTLS1_VERSION, 1199158af98Sjsing .ssl_new = dtls1_new, 1209158af98Sjsing .ssl_clear = dtls1_clear, 1219158af98Sjsing .ssl_free = dtls1_free, 1229158af98Sjsing .ssl_accept = ssl3_accept, 1239158af98Sjsing .ssl_connect = ssl3_connect, 1241a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 1259158af98Sjsing .get_ssl_method = dtls1_get_method, 1269158af98Sjsing .get_timeout = dtls1_default_timeout, 1279158af98Sjsing .ssl_version = ssl_undefined_void_function, 1289158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 1299158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 1309158af98Sjsing .ssl_get_message = dtls1_get_message, 131*8dc90bbaSjsing .ssl_pending = ssl3_pending, 1329158af98Sjsing .ssl_read_bytes = dtls1_read_bytes, 1339158af98Sjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 1349158af98Sjsing .ssl3_enc = &DTLSv1_enc_data, 1359158af98Sjsing }; 1369158af98Sjsing 1379158af98Sjsing static const SSL_METHOD DTLSv1_method_data = { 1389158af98Sjsing .ssl_dispatch_alert = dtls1_dispatch_alert, 1399158af98Sjsing .num_ciphers = ssl3_num_ciphers, 1409158af98Sjsing .get_cipher = dtls1_get_cipher, 1419158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 1429158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 1439158af98Sjsing .internal = &DTLSv1_method_internal_data, 1449158af98Sjsing }; 1459158af98Sjsing 1469158af98Sjsing const SSL_METHOD * 1479158af98Sjsing DTLSv1_method(void) 1489158af98Sjsing { 1499158af98Sjsing return &DTLSv1_method_data; 1509158af98Sjsing } 1519158af98Sjsing 15271023d34Sjsing const SSL_METHOD * 15371023d34Sjsing DTLS_method(void) 15471023d34Sjsing { 15571023d34Sjsing return DTLSv1_method(); 15671023d34Sjsing } 15771023d34Sjsing 1589158af98Sjsing static const SSL_METHOD * 1599158af98Sjsing dtls1_get_method(int ver) 1609158af98Sjsing { 1619158af98Sjsing if (ver == DTLS1_VERSION) 1629158af98Sjsing return (DTLSv1_method()); 1639158af98Sjsing return (NULL); 1649158af98Sjsing } 1659158af98Sjsing 1669158af98Sjsing static const SSL_METHOD_INTERNAL DTLSv1_server_method_internal_data = { 1679158af98Sjsing .version = DTLS1_VERSION, 1689158af98Sjsing .min_version = DTLS1_VERSION, 1699158af98Sjsing .max_version = DTLS1_VERSION, 1709158af98Sjsing .ssl_new = dtls1_new, 1719158af98Sjsing .ssl_clear = dtls1_clear, 1729158af98Sjsing .ssl_free = dtls1_free, 1739158af98Sjsing .ssl_accept = ssl3_accept, 1749158af98Sjsing .ssl_connect = ssl_undefined_function, 1751a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 1769158af98Sjsing .get_ssl_method = dtls1_get_server_method, 1779158af98Sjsing .get_timeout = dtls1_default_timeout, 1789158af98Sjsing .ssl_version = ssl_undefined_void_function, 1799158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 1809158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 1819158af98Sjsing .ssl_get_message = dtls1_get_message, 182*8dc90bbaSjsing .ssl_pending = ssl3_pending, 1839158af98Sjsing .ssl_read_bytes = dtls1_read_bytes, 1849158af98Sjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 1859158af98Sjsing .ssl3_enc = &DTLSv1_enc_data, 1869158af98Sjsing }; 1879158af98Sjsing 1889158af98Sjsing static const SSL_METHOD DTLSv1_server_method_data = { 1899158af98Sjsing .ssl_dispatch_alert = dtls1_dispatch_alert, 1909158af98Sjsing .num_ciphers = ssl3_num_ciphers, 1919158af98Sjsing .get_cipher = dtls1_get_cipher, 1929158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 1939158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 1949158af98Sjsing .internal = &DTLSv1_server_method_internal_data, 1959158af98Sjsing }; 1969158af98Sjsing 1979158af98Sjsing const SSL_METHOD * 1989158af98Sjsing DTLSv1_server_method(void) 1999158af98Sjsing { 2009158af98Sjsing return &DTLSv1_server_method_data; 2019158af98Sjsing } 2029158af98Sjsing 2039158af98Sjsing const SSL_METHOD * 20471023d34Sjsing DTLS_server_method(void) 20571023d34Sjsing { 20671023d34Sjsing return DTLSv1_server_method(); 20771023d34Sjsing } 20871023d34Sjsing 20971023d34Sjsing const SSL_METHOD * 2109158af98Sjsing dtls1_get_server_method(int ver) 2119158af98Sjsing { 2129158af98Sjsing if (ver == DTLS1_VERSION) 2139158af98Sjsing return (DTLSv1_server_method()); 2149158af98Sjsing return (NULL); 2159158af98Sjsing } 2169158af98Sjsing 2177214807fSjsing #ifdef LIBRESSL_HAS_TLS1_3_CLIENT 2189158af98Sjsing static const SSL_METHOD_INTERNAL TLS_client_method_internal_data = { 219efee3f2fSjsing .version = TLS1_3_VERSION, 220efee3f2fSjsing .min_version = TLS1_VERSION, 221efee3f2fSjsing .max_version = TLS1_3_VERSION, 222efee3f2fSjsing .ssl_new = tls1_new, 223efee3f2fSjsing .ssl_clear = tls1_clear, 224efee3f2fSjsing .ssl_free = tls1_free, 225efee3f2fSjsing .ssl_accept = ssl_undefined_function, 226efee3f2fSjsing .ssl_connect = tls13_legacy_connect, 227df62dce5Sjsing .ssl_shutdown = tls13_legacy_shutdown, 228efee3f2fSjsing .get_ssl_method = tls1_get_client_method, 229efee3f2fSjsing .get_timeout = tls1_default_timeout, 230efee3f2fSjsing .ssl_version = ssl_undefined_void_function, 231efee3f2fSjsing .ssl_renegotiate = ssl_undefined_function, 232efee3f2fSjsing .ssl_renegotiate_check = ssl_ok, 233efee3f2fSjsing .ssl_get_message = ssl3_get_message, 234*8dc90bbaSjsing .ssl_pending = ssl3_pending, 235efee3f2fSjsing .ssl_read_bytes = tls13_legacy_read_bytes, 236efee3f2fSjsing .ssl_write_bytes = tls13_legacy_write_bytes, 237efee3f2fSjsing .ssl3_enc = &TLSv1_2_enc_data, 238efee3f2fSjsing }; 239efee3f2fSjsing 240efee3f2fSjsing static const SSL_METHOD TLS_client_method_data = { 241efee3f2fSjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 242efee3f2fSjsing .num_ciphers = ssl3_num_ciphers, 243efee3f2fSjsing .get_cipher = ssl3_get_cipher, 244efee3f2fSjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 245efee3f2fSjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 246efee3f2fSjsing .internal = &TLS_client_method_internal_data, 247efee3f2fSjsing }; 248efee3f2fSjsing #endif 249efee3f2fSjsing 250efee3f2fSjsing static const SSL_METHOD_INTERNAL TLS_legacy_client_method_internal_data = { 2519158af98Sjsing .version = TLS1_2_VERSION, 2529158af98Sjsing .min_version = TLS1_VERSION, 2539158af98Sjsing .max_version = TLS1_2_VERSION, 2549158af98Sjsing .ssl_new = tls1_new, 2559158af98Sjsing .ssl_clear = tls1_clear, 2569158af98Sjsing .ssl_free = tls1_free, 2579158af98Sjsing .ssl_accept = ssl_undefined_function, 2589158af98Sjsing .ssl_connect = ssl3_connect, 2591a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 2609158af98Sjsing .get_ssl_method = tls1_get_client_method, 2619158af98Sjsing .get_timeout = tls1_default_timeout, 2629158af98Sjsing .ssl_version = ssl_undefined_void_function, 2639158af98Sjsing .ssl_renegotiate = ssl_undefined_function, 2649158af98Sjsing .ssl_renegotiate_check = ssl_ok, 2659158af98Sjsing .ssl_get_message = ssl3_get_message, 266*8dc90bbaSjsing .ssl_pending = ssl3_pending, 2679158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 2689158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 2699158af98Sjsing .ssl3_enc = &TLSv1_2_enc_data, 2709158af98Sjsing }; 2719158af98Sjsing 272efee3f2fSjsing static const SSL_METHOD TLS_legacy_client_method_data = { 2739158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 2749158af98Sjsing .num_ciphers = ssl3_num_ciphers, 2759158af98Sjsing .get_cipher = ssl3_get_cipher, 2769158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 2779158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 278efee3f2fSjsing .internal = &TLS_legacy_client_method_internal_data, 2799158af98Sjsing }; 2809158af98Sjsing 2819158af98Sjsing static const SSL_METHOD_INTERNAL TLSv1_client_method_internal_data = { 2829158af98Sjsing .version = TLS1_VERSION, 2839158af98Sjsing .min_version = TLS1_VERSION, 2849158af98Sjsing .max_version = TLS1_VERSION, 2859158af98Sjsing .ssl_new = tls1_new, 2869158af98Sjsing .ssl_clear = tls1_clear, 2879158af98Sjsing .ssl_free = tls1_free, 2889158af98Sjsing .ssl_accept = ssl_undefined_function, 2899158af98Sjsing .ssl_connect = ssl3_connect, 2901a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 2919158af98Sjsing .get_ssl_method = tls1_get_client_method, 2929158af98Sjsing .get_timeout = tls1_default_timeout, 2939158af98Sjsing .ssl_version = ssl_undefined_void_function, 2949158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 2959158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 2969158af98Sjsing .ssl_get_message = ssl3_get_message, 297*8dc90bbaSjsing .ssl_pending = ssl3_pending, 2989158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 2999158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 3009158af98Sjsing .ssl3_enc = &TLSv1_enc_data, 3019158af98Sjsing }; 3029158af98Sjsing 3039158af98Sjsing static const SSL_METHOD TLSv1_client_method_data = { 3049158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 3059158af98Sjsing .num_ciphers = ssl3_num_ciphers, 3069158af98Sjsing .get_cipher = ssl3_get_cipher, 3079158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 3089158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 3099158af98Sjsing .internal = &TLSv1_client_method_internal_data, 3109158af98Sjsing }; 3119158af98Sjsing 3129158af98Sjsing static const SSL_METHOD_INTERNAL TLSv1_1_client_method_internal_data = { 3139158af98Sjsing .version = TLS1_1_VERSION, 3149158af98Sjsing .min_version = TLS1_1_VERSION, 3159158af98Sjsing .max_version = TLS1_1_VERSION, 3169158af98Sjsing .ssl_new = tls1_new, 3179158af98Sjsing .ssl_clear = tls1_clear, 3189158af98Sjsing .ssl_free = tls1_free, 3199158af98Sjsing .ssl_accept = ssl_undefined_function, 3209158af98Sjsing .ssl_connect = ssl3_connect, 3211a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 3229158af98Sjsing .get_ssl_method = tls1_get_client_method, 3239158af98Sjsing .get_timeout = tls1_default_timeout, 3249158af98Sjsing .ssl_version = ssl_undefined_void_function, 3259158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 3269158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3279158af98Sjsing .ssl_get_message = ssl3_get_message, 328*8dc90bbaSjsing .ssl_pending = ssl3_pending, 3299158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 3309158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 3319158af98Sjsing .ssl3_enc = &TLSv1_1_enc_data, 3329158af98Sjsing }; 3339158af98Sjsing 3349158af98Sjsing static const SSL_METHOD TLSv1_1_client_method_data = { 3359158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 3369158af98Sjsing .num_ciphers = ssl3_num_ciphers, 3379158af98Sjsing .get_cipher = ssl3_get_cipher, 3389158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 3399158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 3409158af98Sjsing .internal = &TLSv1_1_client_method_internal_data, 3419158af98Sjsing }; 3429158af98Sjsing 3439158af98Sjsing static const SSL_METHOD_INTERNAL TLSv1_2_client_method_internal_data = { 3449158af98Sjsing .version = TLS1_2_VERSION, 3459158af98Sjsing .min_version = TLS1_2_VERSION, 3469158af98Sjsing .max_version = TLS1_2_VERSION, 3479158af98Sjsing .ssl_new = tls1_new, 3489158af98Sjsing .ssl_clear = tls1_clear, 3499158af98Sjsing .ssl_free = tls1_free, 3509158af98Sjsing .ssl_accept = ssl_undefined_function, 3519158af98Sjsing .ssl_connect = ssl3_connect, 3521a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 3539158af98Sjsing .get_ssl_method = tls1_get_client_method, 3549158af98Sjsing .get_timeout = tls1_default_timeout, 3559158af98Sjsing .ssl_version = ssl_undefined_void_function, 3569158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 3579158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3589158af98Sjsing .ssl_get_message = ssl3_get_message, 359*8dc90bbaSjsing .ssl_pending = ssl3_pending, 3609158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 3619158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 3629158af98Sjsing .ssl3_enc = &TLSv1_2_enc_data, 3639158af98Sjsing }; 3649158af98Sjsing 3659158af98Sjsing static const SSL_METHOD TLSv1_2_client_method_data = { 3669158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 3679158af98Sjsing .num_ciphers = ssl3_num_ciphers, 3689158af98Sjsing .get_cipher = ssl3_get_cipher, 3699158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 3709158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 3719158af98Sjsing .internal = &TLSv1_2_client_method_internal_data, 3729158af98Sjsing }; 3739158af98Sjsing 3749158af98Sjsing const SSL_METHOD * 3759158af98Sjsing tls1_get_client_method(int ver) 3769158af98Sjsing { 3779158af98Sjsing if (ver == TLS1_2_VERSION) 3789158af98Sjsing return (TLSv1_2_client_method()); 3799158af98Sjsing if (ver == TLS1_1_VERSION) 3809158af98Sjsing return (TLSv1_1_client_method()); 3819158af98Sjsing if (ver == TLS1_VERSION) 3829158af98Sjsing return (TLSv1_client_method()); 3839158af98Sjsing return (NULL); 3849158af98Sjsing } 3859158af98Sjsing 3869158af98Sjsing const SSL_METHOD * 3879158af98Sjsing SSLv23_client_method(void) 3889158af98Sjsing { 3899158af98Sjsing return (TLS_client_method()); 3909158af98Sjsing } 3919158af98Sjsing 3929158af98Sjsing const SSL_METHOD * 3939158af98Sjsing TLS_client_method(void) 3949158af98Sjsing { 3957214807fSjsing #ifdef LIBRESSL_HAS_TLS1_3_CLIENT 3969158af98Sjsing return (&TLS_client_method_data); 397efee3f2fSjsing #else 398efee3f2fSjsing return tls_legacy_client_method(); 399efee3f2fSjsing #endif 400efee3f2fSjsing } 401efee3f2fSjsing 402efee3f2fSjsing const SSL_METHOD * 403efee3f2fSjsing tls_legacy_client_method(void) 404efee3f2fSjsing { 405efee3f2fSjsing return (&TLS_legacy_client_method_data); 4069158af98Sjsing } 4079158af98Sjsing 4089158af98Sjsing const SSL_METHOD * 4099158af98Sjsing TLSv1_client_method(void) 4109158af98Sjsing { 4119158af98Sjsing return (&TLSv1_client_method_data); 4129158af98Sjsing } 4139158af98Sjsing 4149158af98Sjsing const SSL_METHOD * 4159158af98Sjsing TLSv1_1_client_method(void) 4169158af98Sjsing { 4179158af98Sjsing return (&TLSv1_1_client_method_data); 4189158af98Sjsing } 4199158af98Sjsing 4209158af98Sjsing const SSL_METHOD * 4219158af98Sjsing TLSv1_2_client_method(void) 4229158af98Sjsing { 4239158af98Sjsing return (&TLSv1_2_client_method_data); 4249158af98Sjsing } 4259158af98Sjsing 4269158af98Sjsing static const SSL_METHOD *tls1_get_method(int ver); 4279158af98Sjsing 4289158af98Sjsing static const SSL_METHOD_INTERNAL TLS_method_internal_data = { 4299158af98Sjsing .version = TLS1_2_VERSION, 4309158af98Sjsing .min_version = TLS1_VERSION, 4319158af98Sjsing .max_version = TLS1_2_VERSION, 4329158af98Sjsing .ssl_new = tls1_new, 4339158af98Sjsing .ssl_clear = tls1_clear, 4349158af98Sjsing .ssl_free = tls1_free, 4359158af98Sjsing .ssl_accept = ssl3_accept, 4369158af98Sjsing .ssl_connect = ssl3_connect, 4371a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 4389158af98Sjsing .get_ssl_method = tls1_get_method, 4399158af98Sjsing .get_timeout = tls1_default_timeout, 4409158af98Sjsing .ssl_version = ssl_undefined_void_function, 4419158af98Sjsing .ssl_renegotiate = ssl_undefined_function, 4429158af98Sjsing .ssl_renegotiate_check = ssl_ok, 4439158af98Sjsing .ssl_get_message = ssl3_get_message, 444*8dc90bbaSjsing .ssl_pending = ssl3_pending, 4459158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 4469158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 4479158af98Sjsing .ssl3_enc = &TLSv1_2_enc_data, 4489158af98Sjsing }; 4499158af98Sjsing 4509158af98Sjsing static const SSL_METHOD TLS_method_data = { 4519158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 4529158af98Sjsing .num_ciphers = ssl3_num_ciphers, 4539158af98Sjsing .get_cipher = ssl3_get_cipher, 4549158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 4559158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 4569158af98Sjsing .internal = &TLS_method_internal_data, 4579158af98Sjsing }; 4589158af98Sjsing 4599158af98Sjsing static const SSL_METHOD_INTERNAL TLSv1_method_internal_data = { 4609158af98Sjsing .version = TLS1_VERSION, 4619158af98Sjsing .min_version = TLS1_VERSION, 4629158af98Sjsing .max_version = TLS1_VERSION, 4639158af98Sjsing .ssl_new = tls1_new, 4649158af98Sjsing .ssl_clear = tls1_clear, 4659158af98Sjsing .ssl_free = tls1_free, 4669158af98Sjsing .ssl_accept = ssl3_accept, 4679158af98Sjsing .ssl_connect = ssl3_connect, 4681a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 4699158af98Sjsing .get_ssl_method = tls1_get_method, 4709158af98Sjsing .get_timeout = tls1_default_timeout, 4719158af98Sjsing .ssl_version = ssl_undefined_void_function, 4729158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 4739158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 4749158af98Sjsing .ssl_get_message = ssl3_get_message, 475*8dc90bbaSjsing .ssl_pending = ssl3_pending, 4769158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 4779158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 4789158af98Sjsing .ssl3_enc = &TLSv1_enc_data, 4799158af98Sjsing }; 4809158af98Sjsing 4819158af98Sjsing static const SSL_METHOD TLSv1_method_data = { 4829158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 4839158af98Sjsing .num_ciphers = ssl3_num_ciphers, 4849158af98Sjsing .get_cipher = ssl3_get_cipher, 4859158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 4869158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 4879158af98Sjsing .internal = &TLSv1_method_internal_data, 4889158af98Sjsing }; 4899158af98Sjsing 4909158af98Sjsing static const SSL_METHOD_INTERNAL TLSv1_1_method_internal_data = { 4919158af98Sjsing .version = TLS1_1_VERSION, 4929158af98Sjsing .min_version = TLS1_1_VERSION, 4939158af98Sjsing .max_version = TLS1_1_VERSION, 4949158af98Sjsing .ssl_new = tls1_new, 4959158af98Sjsing .ssl_clear = tls1_clear, 4969158af98Sjsing .ssl_free = tls1_free, 4979158af98Sjsing .ssl_accept = ssl3_accept, 4989158af98Sjsing .ssl_connect = ssl3_connect, 4991a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 5009158af98Sjsing .get_ssl_method = tls1_get_method, 5019158af98Sjsing .get_timeout = tls1_default_timeout, 5029158af98Sjsing .ssl_version = ssl_undefined_void_function, 5039158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 5049158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 5059158af98Sjsing .ssl_get_message = ssl3_get_message, 506*8dc90bbaSjsing .ssl_pending = ssl3_pending, 5079158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 5089158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 5099158af98Sjsing .ssl3_enc = &TLSv1_1_enc_data, 5109158af98Sjsing }; 5119158af98Sjsing 5129158af98Sjsing static const SSL_METHOD TLSv1_1_method_data = { 5139158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 5149158af98Sjsing .num_ciphers = ssl3_num_ciphers, 5159158af98Sjsing .get_cipher = ssl3_get_cipher, 5169158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 5179158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 5189158af98Sjsing .internal = &TLSv1_1_method_internal_data, 5199158af98Sjsing }; 5209158af98Sjsing 5219158af98Sjsing static const SSL_METHOD_INTERNAL TLSv1_2_method_internal_data = { 5229158af98Sjsing .version = TLS1_2_VERSION, 5239158af98Sjsing .min_version = TLS1_2_VERSION, 5249158af98Sjsing .max_version = TLS1_2_VERSION, 5259158af98Sjsing .ssl_new = tls1_new, 5269158af98Sjsing .ssl_clear = tls1_clear, 5279158af98Sjsing .ssl_free = tls1_free, 5289158af98Sjsing .ssl_accept = ssl3_accept, 5299158af98Sjsing .ssl_connect = ssl3_connect, 5301a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 5319158af98Sjsing .get_ssl_method = tls1_get_method, 5329158af98Sjsing .get_timeout = tls1_default_timeout, 5339158af98Sjsing .ssl_version = ssl_undefined_void_function, 5349158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 5359158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 5369158af98Sjsing .ssl_get_message = ssl3_get_message, 537*8dc90bbaSjsing .ssl_pending = ssl3_pending, 5389158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 5399158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 5409158af98Sjsing .ssl3_enc = &TLSv1_2_enc_data, 5419158af98Sjsing }; 5429158af98Sjsing 5439158af98Sjsing static const SSL_METHOD TLSv1_2_method_data = { 5449158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 5459158af98Sjsing .num_ciphers = ssl3_num_ciphers, 5469158af98Sjsing .get_cipher = ssl3_get_cipher, 5479158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 5489158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 5499158af98Sjsing .internal = &TLSv1_2_method_internal_data, 5509158af98Sjsing }; 5519158af98Sjsing 5529158af98Sjsing static const SSL_METHOD * 5539158af98Sjsing tls1_get_method(int ver) 5549158af98Sjsing { 5559158af98Sjsing if (ver == TLS1_2_VERSION) 5569158af98Sjsing return (TLSv1_2_method()); 5579158af98Sjsing if (ver == TLS1_1_VERSION) 5589158af98Sjsing return (TLSv1_1_method()); 5599158af98Sjsing if (ver == TLS1_VERSION) 5609158af98Sjsing return (TLSv1_method()); 5619158af98Sjsing return (NULL); 5629158af98Sjsing } 5639158af98Sjsing 5649158af98Sjsing const SSL_METHOD * 5659158af98Sjsing SSLv23_method(void) 5669158af98Sjsing { 5679158af98Sjsing return (TLS_method()); 5689158af98Sjsing } 5699158af98Sjsing 5709158af98Sjsing const SSL_METHOD * 5719158af98Sjsing TLS_method(void) 5729158af98Sjsing { 5739158af98Sjsing return &TLS_method_data; 5749158af98Sjsing } 5759158af98Sjsing 5769158af98Sjsing const SSL_METHOD * 5779158af98Sjsing TLSv1_method(void) 5789158af98Sjsing { 5799158af98Sjsing return (&TLSv1_method_data); 5809158af98Sjsing } 5819158af98Sjsing 5829158af98Sjsing const SSL_METHOD * 5839158af98Sjsing TLSv1_1_method(void) 5849158af98Sjsing { 5859158af98Sjsing return (&TLSv1_1_method_data); 5869158af98Sjsing } 5879158af98Sjsing 5889158af98Sjsing const SSL_METHOD * 5899158af98Sjsing TLSv1_2_method(void) 5909158af98Sjsing { 5919158af98Sjsing return (&TLSv1_2_method_data); 5929158af98Sjsing } 5939158af98Sjsing 5940dbd9f91Sjsing #ifdef LIBRESSL_HAS_TLS1_3_SERVER 5959158af98Sjsing static const SSL_METHOD_INTERNAL TLS_server_method_internal_data = { 5960dbd9f91Sjsing .version = TLS1_3_VERSION, 5970dbd9f91Sjsing .min_version = TLS1_VERSION, 5980dbd9f91Sjsing .max_version = TLS1_3_VERSION, 5990dbd9f91Sjsing .ssl_new = tls1_new, 6000dbd9f91Sjsing .ssl_clear = tls1_clear, 6010dbd9f91Sjsing .ssl_free = tls1_free, 6020dbd9f91Sjsing .ssl_accept = tls13_legacy_accept, 6030dbd9f91Sjsing .ssl_connect = ssl_undefined_function, 6040dbd9f91Sjsing .ssl_shutdown = tls13_legacy_shutdown, 6050dbd9f91Sjsing .get_ssl_method = tls1_get_server_method, 6060dbd9f91Sjsing .get_timeout = tls1_default_timeout, 6070dbd9f91Sjsing .ssl_version = ssl_undefined_void_function, 6080dbd9f91Sjsing .ssl_renegotiate = ssl_undefined_function, 6090dbd9f91Sjsing .ssl_renegotiate_check = ssl_ok, 6100dbd9f91Sjsing .ssl_get_message = ssl3_get_message, 611*8dc90bbaSjsing .ssl_pending = ssl3_pending, 6120dbd9f91Sjsing .ssl_read_bytes = tls13_legacy_read_bytes, 6130dbd9f91Sjsing .ssl_write_bytes = tls13_legacy_write_bytes, 6140dbd9f91Sjsing .ssl3_enc = &TLSv1_2_enc_data, 6150dbd9f91Sjsing }; 6160dbd9f91Sjsing 6170dbd9f91Sjsing static const SSL_METHOD TLS_server_method_data = { 6180dbd9f91Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 6190dbd9f91Sjsing .num_ciphers = ssl3_num_ciphers, 6200dbd9f91Sjsing .get_cipher = ssl3_get_cipher, 6210dbd9f91Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 6220dbd9f91Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 6230dbd9f91Sjsing .internal = &TLS_server_method_internal_data, 6240dbd9f91Sjsing }; 6250dbd9f91Sjsing #endif 6260dbd9f91Sjsing 6270dbd9f91Sjsing static const SSL_METHOD_INTERNAL TLS_legacy_server_method_internal_data = { 6289158af98Sjsing .version = TLS1_2_VERSION, 6299158af98Sjsing .min_version = TLS1_VERSION, 6309158af98Sjsing .max_version = TLS1_2_VERSION, 6319158af98Sjsing .ssl_new = tls1_new, 6329158af98Sjsing .ssl_clear = tls1_clear, 6339158af98Sjsing .ssl_free = tls1_free, 6349158af98Sjsing .ssl_accept = ssl3_accept, 6359158af98Sjsing .ssl_connect = ssl_undefined_function, 6361a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 6379158af98Sjsing .get_ssl_method = tls1_get_server_method, 6389158af98Sjsing .get_timeout = tls1_default_timeout, 6399158af98Sjsing .ssl_version = ssl_undefined_void_function, 6409158af98Sjsing .ssl_renegotiate = ssl_undefined_function, 6419158af98Sjsing .ssl_renegotiate_check = ssl_ok, 6429158af98Sjsing .ssl_get_message = ssl3_get_message, 643*8dc90bbaSjsing .ssl_pending = ssl3_pending, 6449158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 6459158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 6469158af98Sjsing .ssl3_enc = &TLSv1_2_enc_data, 6479158af98Sjsing }; 6489158af98Sjsing 6490dbd9f91Sjsing static const SSL_METHOD TLS_legacy_server_method_data = { 6509158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 6519158af98Sjsing .num_ciphers = ssl3_num_ciphers, 6529158af98Sjsing .get_cipher = ssl3_get_cipher, 6539158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 6549158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 6550dbd9f91Sjsing .internal = &TLS_legacy_server_method_internal_data, 6569158af98Sjsing }; 6579158af98Sjsing 6589158af98Sjsing static const SSL_METHOD_INTERNAL TLSv1_server_method_internal_data = { 6599158af98Sjsing .version = TLS1_VERSION, 6609158af98Sjsing .min_version = TLS1_VERSION, 6619158af98Sjsing .max_version = TLS1_VERSION, 6629158af98Sjsing .ssl_new = tls1_new, 6639158af98Sjsing .ssl_clear = tls1_clear, 6649158af98Sjsing .ssl_free = tls1_free, 6659158af98Sjsing .ssl_accept = ssl3_accept, 6669158af98Sjsing .ssl_connect = ssl_undefined_function, 6671a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 6689158af98Sjsing .get_ssl_method = tls1_get_server_method, 6699158af98Sjsing .get_timeout = tls1_default_timeout, 6709158af98Sjsing .ssl_version = ssl_undefined_void_function, 6719158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 6729158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 6739158af98Sjsing .ssl_get_message = ssl3_get_message, 674*8dc90bbaSjsing .ssl_pending = ssl3_pending, 6759158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 6769158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 6779158af98Sjsing .ssl3_enc = &TLSv1_enc_data, 6789158af98Sjsing }; 6799158af98Sjsing 6809158af98Sjsing static const SSL_METHOD TLSv1_server_method_data = { 6819158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 6829158af98Sjsing .num_ciphers = ssl3_num_ciphers, 6839158af98Sjsing .get_cipher = ssl3_get_cipher, 6849158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 6859158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 6869158af98Sjsing .internal = &TLSv1_server_method_internal_data, 6879158af98Sjsing }; 6889158af98Sjsing 6899158af98Sjsing static const SSL_METHOD_INTERNAL TLSv1_1_server_method_internal_data = { 6909158af98Sjsing .version = TLS1_1_VERSION, 6919158af98Sjsing .min_version = TLS1_1_VERSION, 6929158af98Sjsing .max_version = TLS1_1_VERSION, 6939158af98Sjsing .ssl_new = tls1_new, 6949158af98Sjsing .ssl_clear = tls1_clear, 6959158af98Sjsing .ssl_free = tls1_free, 6969158af98Sjsing .ssl_accept = ssl3_accept, 6979158af98Sjsing .ssl_connect = ssl_undefined_function, 6981a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 6999158af98Sjsing .get_ssl_method = tls1_get_server_method, 7009158af98Sjsing .get_timeout = tls1_default_timeout, 7019158af98Sjsing .ssl_version = ssl_undefined_void_function, 7029158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 7039158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 7049158af98Sjsing .ssl_get_message = ssl3_get_message, 705*8dc90bbaSjsing .ssl_pending = ssl3_pending, 7069158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 7079158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 7089158af98Sjsing .ssl3_enc = &TLSv1_1_enc_data, 7099158af98Sjsing }; 7109158af98Sjsing 7119158af98Sjsing static const SSL_METHOD TLSv1_1_server_method_data = { 7129158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 7139158af98Sjsing .num_ciphers = ssl3_num_ciphers, 7149158af98Sjsing .get_cipher = ssl3_get_cipher, 7159158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 7169158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 7179158af98Sjsing .internal = &TLSv1_1_server_method_internal_data, 7189158af98Sjsing }; 7199158af98Sjsing 7209158af98Sjsing static const SSL_METHOD_INTERNAL TLSv1_2_server_method_internal_data = { 7219158af98Sjsing .version = TLS1_2_VERSION, 7229158af98Sjsing .min_version = TLS1_2_VERSION, 7239158af98Sjsing .max_version = TLS1_2_VERSION, 7249158af98Sjsing .ssl_new = tls1_new, 7259158af98Sjsing .ssl_clear = tls1_clear, 7269158af98Sjsing .ssl_free = tls1_free, 7279158af98Sjsing .ssl_accept = ssl3_accept, 7289158af98Sjsing .ssl_connect = ssl_undefined_function, 7291a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 7309158af98Sjsing .get_ssl_method = tls1_get_server_method, 7319158af98Sjsing .get_timeout = tls1_default_timeout, 7329158af98Sjsing .ssl_version = ssl_undefined_void_function, 7339158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 7349158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 7359158af98Sjsing .ssl_get_message = ssl3_get_message, 736*8dc90bbaSjsing .ssl_pending = ssl3_pending, 7379158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 7389158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 7399158af98Sjsing .ssl3_enc = &TLSv1_2_enc_data, 7409158af98Sjsing }; 7419158af98Sjsing 7429158af98Sjsing static const SSL_METHOD TLSv1_2_server_method_data = { 7439158af98Sjsing .ssl_dispatch_alert = ssl3_dispatch_alert, 7449158af98Sjsing .num_ciphers = ssl3_num_ciphers, 7459158af98Sjsing .get_cipher = ssl3_get_cipher, 7469158af98Sjsing .get_cipher_by_char = ssl3_get_cipher_by_char, 7479158af98Sjsing .put_cipher_by_char = ssl3_put_cipher_by_char, 7489158af98Sjsing .internal = &TLSv1_2_server_method_internal_data, 7499158af98Sjsing }; 7509158af98Sjsing 7519158af98Sjsing const SSL_METHOD * 7529158af98Sjsing tls1_get_server_method(int ver) 7539158af98Sjsing { 7549158af98Sjsing if (ver == TLS1_2_VERSION) 7559158af98Sjsing return (TLSv1_2_server_method()); 7569158af98Sjsing if (ver == TLS1_1_VERSION) 7579158af98Sjsing return (TLSv1_1_server_method()); 7589158af98Sjsing if (ver == TLS1_VERSION) 7599158af98Sjsing return (TLSv1_server_method()); 7609158af98Sjsing return (NULL); 7619158af98Sjsing } 7629158af98Sjsing 7639158af98Sjsing const SSL_METHOD * 7649158af98Sjsing SSLv23_server_method(void) 7659158af98Sjsing { 7669158af98Sjsing return (TLS_server_method()); 7679158af98Sjsing } 7689158af98Sjsing 7699158af98Sjsing const SSL_METHOD * 7709158af98Sjsing TLS_server_method(void) 7719158af98Sjsing { 7720dbd9f91Sjsing #ifdef LIBRESSL_HAS_TLS1_3_SERVER 7739158af98Sjsing return (&TLS_server_method_data); 7740dbd9f91Sjsing #else 7750dbd9f91Sjsing return tls_legacy_server_method(); 7760dbd9f91Sjsing #endif 7770dbd9f91Sjsing } 7780dbd9f91Sjsing 7790dbd9f91Sjsing const SSL_METHOD * 7800dbd9f91Sjsing tls_legacy_server_method(void) 7810dbd9f91Sjsing { 7820dbd9f91Sjsing return (&TLS_legacy_server_method_data); 7839158af98Sjsing } 7849158af98Sjsing 7859158af98Sjsing const SSL_METHOD * 7869158af98Sjsing TLSv1_server_method(void) 7879158af98Sjsing { 7889158af98Sjsing return (&TLSv1_server_method_data); 7899158af98Sjsing } 7909158af98Sjsing 7919158af98Sjsing const SSL_METHOD * 7929158af98Sjsing TLSv1_1_server_method(void) 7939158af98Sjsing { 7949158af98Sjsing return (&TLSv1_1_server_method_data); 7959158af98Sjsing } 7969158af98Sjsing 7979158af98Sjsing const SSL_METHOD * 7989158af98Sjsing TLSv1_2_server_method(void) 7999158af98Sjsing { 8009158af98Sjsing return (&TLSv1_2_server_method_data); 8019158af98Sjsing } 802