1*ae0a2582Sjsing /* $OpenBSD: ssl_methods.c,v 1.32 2024/07/23 14:40:54 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 59c9675a23Stb #include "dtls_local.h" 60c9675a23Stb #include "ssl_local.h" 61efee3f2fSjsing #include "tls13_internal.h" 629158af98Sjsing 636ba40c14Sjsing static const SSL_METHOD DTLS_method_data = { 64a48e0dedSjsing .dtls = 1, 65a48e0dedSjsing .server = 1, 66a48e0dedSjsing .version = DTLS1_2_VERSION, 67970acf87Sjsing .min_tls_version = TLS1_1_VERSION, 68970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 69a48e0dedSjsing .ssl_new = dtls1_new, 70a48e0dedSjsing .ssl_clear = dtls1_clear, 71a48e0dedSjsing .ssl_free = dtls1_free, 72a48e0dedSjsing .ssl_accept = ssl3_accept, 73a48e0dedSjsing .ssl_connect = ssl3_connect, 74a48e0dedSjsing .ssl_shutdown = ssl3_shutdown, 75a48e0dedSjsing .ssl_renegotiate = ssl3_renegotiate, 76a48e0dedSjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 77a48e0dedSjsing .ssl_pending = ssl3_pending, 78a48e0dedSjsing .ssl_read_bytes = dtls1_read_bytes, 79a48e0dedSjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 80a48e0dedSjsing .enc_flags = TLSV1_2_ENC_FLAGS, 81a48e0dedSjsing }; 82a48e0dedSjsing 83a48e0dedSjsing static const SSL_METHOD DTLS_client_method_data = { 846ba40c14Sjsing .dtls = 1, 856ba40c14Sjsing .server = 0, 866ba40c14Sjsing .version = DTLS1_2_VERSION, 876ba40c14Sjsing .min_tls_version = TLS1_1_VERSION, 886ba40c14Sjsing .max_tls_version = TLS1_2_VERSION, 896ba40c14Sjsing .ssl_new = dtls1_new, 906ba40c14Sjsing .ssl_clear = dtls1_clear, 916ba40c14Sjsing .ssl_free = dtls1_free, 926ba40c14Sjsing .ssl_accept = ssl_undefined_function, 936ba40c14Sjsing .ssl_connect = ssl3_connect, 946ba40c14Sjsing .ssl_shutdown = ssl3_shutdown, 956ba40c14Sjsing .ssl_renegotiate = ssl3_renegotiate, 966ba40c14Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 976ba40c14Sjsing .ssl_pending = ssl3_pending, 986ba40c14Sjsing .ssl_read_bytes = dtls1_read_bytes, 996ba40c14Sjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 1006ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 101a48e0dedSjsing }; 102a48e0dedSjsing 1036ba40c14Sjsing static const SSL_METHOD DTLSv1_method_data = { 104354e02d3Sjsing .dtls = 1, 105d1294899Stb .server = 1, 1069158af98Sjsing .version = DTLS1_VERSION, 107970acf87Sjsing .min_tls_version = TLS1_1_VERSION, 108970acf87Sjsing .max_tls_version = TLS1_1_VERSION, 1099158af98Sjsing .ssl_new = dtls1_new, 1109158af98Sjsing .ssl_clear = dtls1_clear, 1119158af98Sjsing .ssl_free = dtls1_free, 1129158af98Sjsing .ssl_accept = ssl3_accept, 1139158af98Sjsing .ssl_connect = ssl3_connect, 1141a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 1159158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 1169158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 1178dc90bbaSjsing .ssl_pending = ssl3_pending, 1189158af98Sjsing .ssl_read_bytes = dtls1_read_bytes, 1199158af98Sjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 120d1294899Stb .enc_flags = TLSV1_1_ENC_FLAGS, 121d1294899Stb }; 122d1294899Stb 123d1294899Stb static const SSL_METHOD DTLSv1_client_method_data = { 1246ba40c14Sjsing .dtls = 1, 1256ba40c14Sjsing .server = 0, 1266ba40c14Sjsing .version = DTLS1_VERSION, 1276ba40c14Sjsing .min_tls_version = TLS1_1_VERSION, 1286ba40c14Sjsing .max_tls_version = TLS1_1_VERSION, 1296ba40c14Sjsing .ssl_new = dtls1_new, 1306ba40c14Sjsing .ssl_clear = dtls1_clear, 1316ba40c14Sjsing .ssl_free = dtls1_free, 1326ba40c14Sjsing .ssl_accept = ssl_undefined_function, 1336ba40c14Sjsing .ssl_connect = ssl3_connect, 1346ba40c14Sjsing .ssl_shutdown = ssl3_shutdown, 1356ba40c14Sjsing .ssl_renegotiate = ssl3_renegotiate, 1366ba40c14Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 1376ba40c14Sjsing .ssl_pending = ssl3_pending, 1386ba40c14Sjsing .ssl_read_bytes = dtls1_read_bytes, 1396ba40c14Sjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 1406ba40c14Sjsing .enc_flags = TLSV1_1_ENC_FLAGS, 141d1294899Stb }; 142d1294899Stb 1436ba40c14Sjsing static const SSL_METHOD DTLSv1_2_method_data = { 144a48e0dedSjsing .dtls = 1, 145a48e0dedSjsing .server = 1, 146a48e0dedSjsing .version = DTLS1_2_VERSION, 147970acf87Sjsing .min_tls_version = TLS1_2_VERSION, 148970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 149a48e0dedSjsing .ssl_new = dtls1_new, 150a48e0dedSjsing .ssl_clear = dtls1_clear, 151a48e0dedSjsing .ssl_free = dtls1_free, 152a48e0dedSjsing .ssl_accept = ssl3_accept, 153a48e0dedSjsing .ssl_connect = ssl3_connect, 154a48e0dedSjsing .ssl_shutdown = ssl3_shutdown, 155a48e0dedSjsing .ssl_renegotiate = ssl3_renegotiate, 156a48e0dedSjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 157a48e0dedSjsing .ssl_pending = ssl3_pending, 158a48e0dedSjsing .ssl_read_bytes = dtls1_read_bytes, 159a48e0dedSjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 1606ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 161a48e0dedSjsing }; 162a48e0dedSjsing 1636ba40c14Sjsing static const SSL_METHOD DTLSv1_2_client_method_data = { 164a48e0dedSjsing .dtls = 1, 165a48e0dedSjsing .server = 0, 166a48e0dedSjsing .version = DTLS1_2_VERSION, 167970acf87Sjsing .min_tls_version = TLS1_2_VERSION, 168970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 169a48e0dedSjsing .ssl_new = dtls1_new, 170a48e0dedSjsing .ssl_clear = dtls1_clear, 171a48e0dedSjsing .ssl_free = dtls1_free, 172a48e0dedSjsing .ssl_accept = ssl_undefined_function, 173a48e0dedSjsing .ssl_connect = ssl3_connect, 174a48e0dedSjsing .ssl_shutdown = ssl3_shutdown, 175a48e0dedSjsing .ssl_renegotiate = ssl3_renegotiate, 176a48e0dedSjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 177a48e0dedSjsing .ssl_pending = ssl3_pending, 178a48e0dedSjsing .ssl_read_bytes = dtls1_read_bytes, 179a48e0dedSjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 1806ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 181a48e0dedSjsing }; 182a48e0dedSjsing 1839158af98Sjsing const SSL_METHOD * 1849fef1c44Sjsing DTLSv1_client_method(void) 1859fef1c44Sjsing { 186d1294899Stb return &DTLSv1_client_method_data; 1879fef1c44Sjsing } 18871e04849Sbeck LSSL_ALIAS(DTLSv1_client_method); 1899fef1c44Sjsing 1909fef1c44Sjsing const SSL_METHOD * 1919158af98Sjsing DTLSv1_method(void) 1929158af98Sjsing { 1939158af98Sjsing return &DTLSv1_method_data; 1949158af98Sjsing } 19571e04849Sbeck LSSL_ALIAS(DTLSv1_method); 1969158af98Sjsing 19771023d34Sjsing const SSL_METHOD * 1989fef1c44Sjsing DTLSv1_server_method(void) 1999fef1c44Sjsing { 2009fef1c44Sjsing return &DTLSv1_method_data; 2019fef1c44Sjsing } 20271e04849Sbeck LSSL_ALIAS(DTLSv1_server_method); 2039fef1c44Sjsing 2049fef1c44Sjsing const SSL_METHOD * 205a48e0dedSjsing DTLSv1_2_client_method(void) 206a48e0dedSjsing { 207a48e0dedSjsing return &DTLSv1_2_client_method_data; 208a48e0dedSjsing } 20971e04849Sbeck LSSL_ALIAS(DTLSv1_2_client_method); 210a48e0dedSjsing 211a48e0dedSjsing const SSL_METHOD * 212a48e0dedSjsing DTLSv1_2_method(void) 213a48e0dedSjsing { 214a48e0dedSjsing return &DTLSv1_2_method_data; 215a48e0dedSjsing } 21671e04849Sbeck LSSL_ALIAS(DTLSv1_2_method); 217a48e0dedSjsing 218a48e0dedSjsing const SSL_METHOD * 219a48e0dedSjsing DTLSv1_2_server_method(void) 220a48e0dedSjsing { 221a48e0dedSjsing return &DTLSv1_2_method_data; 222a48e0dedSjsing } 22371e04849Sbeck LSSL_ALIAS(DTLSv1_2_server_method); 224a48e0dedSjsing 225a48e0dedSjsing const SSL_METHOD * 2269fef1c44Sjsing DTLS_client_method(void) 2279fef1c44Sjsing { 228a48e0dedSjsing return &DTLS_client_method_data; 2299fef1c44Sjsing } 23071e04849Sbeck LSSL_ALIAS(DTLS_client_method); 2319fef1c44Sjsing 2329fef1c44Sjsing const SSL_METHOD * 23371023d34Sjsing DTLS_method(void) 23471023d34Sjsing { 235a48e0dedSjsing return &DTLS_method_data; 23671023d34Sjsing } 23771e04849Sbeck LSSL_ALIAS(DTLS_method); 23871023d34Sjsing 2399158af98Sjsing const SSL_METHOD * 24071023d34Sjsing DTLS_server_method(void) 24171023d34Sjsing { 242a48e0dedSjsing return &DTLS_method_data; 2439158af98Sjsing } 24471e04849Sbeck LSSL_ALIAS(DTLS_server_method); 2459158af98Sjsing 2466ba40c14Sjsing static const SSL_METHOD TLS_method_data = { 247354e02d3Sjsing .dtls = 0, 248d1294899Stb .server = 1, 24994149d15Sjsing .version = TLS1_3_VERSION, 250970acf87Sjsing .min_tls_version = TLS1_VERSION, 251970acf87Sjsing .max_tls_version = TLS1_3_VERSION, 25294149d15Sjsing .ssl_new = tls1_new, 25394149d15Sjsing .ssl_clear = tls1_clear, 25494149d15Sjsing .ssl_free = tls1_free, 25594149d15Sjsing .ssl_accept = tls13_legacy_accept, 25694149d15Sjsing .ssl_connect = tls13_legacy_connect, 25794149d15Sjsing .ssl_shutdown = tls13_legacy_shutdown, 25894149d15Sjsing .ssl_renegotiate = ssl_undefined_function, 25994149d15Sjsing .ssl_renegotiate_check = ssl_ok, 26094149d15Sjsing .ssl_pending = tls13_legacy_pending, 26194149d15Sjsing .ssl_read_bytes = tls13_legacy_read_bytes, 26294149d15Sjsing .ssl_write_bytes = tls13_legacy_write_bytes, 2636ba40c14Sjsing .enc_flags = TLSV1_3_ENC_FLAGS, 26494149d15Sjsing }; 26594149d15Sjsing 2666ba40c14Sjsing static const SSL_METHOD TLS_legacy_method_data = { 267354e02d3Sjsing .dtls = 0, 268d1294899Stb .server = 1, 2699158af98Sjsing .version = TLS1_2_VERSION, 270970acf87Sjsing .min_tls_version = TLS1_VERSION, 271970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 2729158af98Sjsing .ssl_new = tls1_new, 2739158af98Sjsing .ssl_clear = tls1_clear, 2749158af98Sjsing .ssl_free = tls1_free, 2759158af98Sjsing .ssl_accept = ssl3_accept, 2769158af98Sjsing .ssl_connect = ssl3_connect, 2771a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 2789158af98Sjsing .ssl_renegotiate = ssl_undefined_function, 2799158af98Sjsing .ssl_renegotiate_check = ssl_ok, 2808dc90bbaSjsing .ssl_pending = ssl3_pending, 2819158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 2829158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 2836ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 2849158af98Sjsing }; 2859158af98Sjsing 2866ba40c14Sjsing static const SSL_METHOD TLS_client_method_data = { 287d1294899Stb .dtls = 0, 288d1294899Stb .server = 0, 289d1294899Stb .version = TLS1_3_VERSION, 290970acf87Sjsing .min_tls_version = TLS1_VERSION, 291970acf87Sjsing .max_tls_version = TLS1_3_VERSION, 292d1294899Stb .ssl_new = tls1_new, 293d1294899Stb .ssl_clear = tls1_clear, 294d1294899Stb .ssl_free = tls1_free, 295d1294899Stb .ssl_accept = tls13_legacy_accept, 296d1294899Stb .ssl_connect = tls13_legacy_connect, 297d1294899Stb .ssl_shutdown = tls13_legacy_shutdown, 298d1294899Stb .ssl_renegotiate = ssl_undefined_function, 299d1294899Stb .ssl_renegotiate_check = ssl_ok, 300d1294899Stb .ssl_pending = tls13_legacy_pending, 301d1294899Stb .ssl_read_bytes = tls13_legacy_read_bytes, 302d1294899Stb .ssl_write_bytes = tls13_legacy_write_bytes, 3036ba40c14Sjsing .enc_flags = TLSV1_3_ENC_FLAGS, 304d1294899Stb }; 305d1294899Stb 3066ba40c14Sjsing static const SSL_METHOD TLSv1_method_data = { 307354e02d3Sjsing .dtls = 0, 308d1294899Stb .server = 1, 3099158af98Sjsing .version = TLS1_VERSION, 310970acf87Sjsing .min_tls_version = TLS1_VERSION, 311970acf87Sjsing .max_tls_version = TLS1_VERSION, 3129158af98Sjsing .ssl_new = tls1_new, 3139158af98Sjsing .ssl_clear = tls1_clear, 3149158af98Sjsing .ssl_free = tls1_free, 3159158af98Sjsing .ssl_accept = ssl3_accept, 3169158af98Sjsing .ssl_connect = ssl3_connect, 3171a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 3189158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 3199158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3208dc90bbaSjsing .ssl_pending = ssl3_pending, 3219158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 3229158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 323d1294899Stb .enc_flags = TLSV1_ENC_FLAGS, 324d1294899Stb }; 325d1294899Stb 326d1294899Stb static const SSL_METHOD TLSv1_client_method_data = { 3276ba40c14Sjsing .dtls = 0, 3286ba40c14Sjsing .server = 0, 3296ba40c14Sjsing .version = TLS1_VERSION, 3306ba40c14Sjsing .min_tls_version = TLS1_VERSION, 3316ba40c14Sjsing .max_tls_version = TLS1_VERSION, 3326ba40c14Sjsing .ssl_new = tls1_new, 3336ba40c14Sjsing .ssl_clear = tls1_clear, 3346ba40c14Sjsing .ssl_free = tls1_free, 3356ba40c14Sjsing .ssl_accept = ssl_undefined_function, 3366ba40c14Sjsing .ssl_connect = ssl3_connect, 3376ba40c14Sjsing .ssl_shutdown = ssl3_shutdown, 3386ba40c14Sjsing .ssl_renegotiate = ssl3_renegotiate, 3396ba40c14Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3406ba40c14Sjsing .ssl_pending = ssl3_pending, 3416ba40c14Sjsing .ssl_read_bytes = ssl3_read_bytes, 3426ba40c14Sjsing .ssl_write_bytes = ssl3_write_bytes, 3436ba40c14Sjsing .enc_flags = TLSV1_ENC_FLAGS, 344d1294899Stb }; 345d1294899Stb 3466ba40c14Sjsing static const SSL_METHOD TLSv1_1_method_data = { 347354e02d3Sjsing .dtls = 0, 348d1294899Stb .server = 1, 3499158af98Sjsing .version = TLS1_1_VERSION, 350970acf87Sjsing .min_tls_version = TLS1_1_VERSION, 351970acf87Sjsing .max_tls_version = TLS1_1_VERSION, 3529158af98Sjsing .ssl_new = tls1_new, 3539158af98Sjsing .ssl_clear = tls1_clear, 3549158af98Sjsing .ssl_free = tls1_free, 3559158af98Sjsing .ssl_accept = ssl3_accept, 3569158af98Sjsing .ssl_connect = ssl3_connect, 3571a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 3589158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 3599158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3608dc90bbaSjsing .ssl_pending = ssl3_pending, 3619158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 3629158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 363d1294899Stb .enc_flags = TLSV1_1_ENC_FLAGS, 364d1294899Stb }; 365d1294899Stb 366d1294899Stb static const SSL_METHOD TLSv1_1_client_method_data = { 3676ba40c14Sjsing .dtls = 0, 3686ba40c14Sjsing .server = 0, 3696ba40c14Sjsing .version = TLS1_1_VERSION, 3706ba40c14Sjsing .min_tls_version = TLS1_1_VERSION, 3716ba40c14Sjsing .max_tls_version = TLS1_1_VERSION, 3726ba40c14Sjsing .ssl_new = tls1_new, 3736ba40c14Sjsing .ssl_clear = tls1_clear, 3746ba40c14Sjsing .ssl_free = tls1_free, 3756ba40c14Sjsing .ssl_accept = ssl_undefined_function, 3766ba40c14Sjsing .ssl_connect = ssl3_connect, 3776ba40c14Sjsing .ssl_shutdown = ssl3_shutdown, 3786ba40c14Sjsing .ssl_renegotiate = ssl3_renegotiate, 3796ba40c14Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3806ba40c14Sjsing .ssl_pending = ssl3_pending, 3816ba40c14Sjsing .ssl_read_bytes = ssl3_read_bytes, 3826ba40c14Sjsing .ssl_write_bytes = ssl3_write_bytes, 3836ba40c14Sjsing .enc_flags = TLSV1_1_ENC_FLAGS, 384d1294899Stb }; 385d1294899Stb 3866ba40c14Sjsing static const SSL_METHOD TLSv1_2_method_data = { 387354e02d3Sjsing .dtls = 0, 388d1294899Stb .server = 1, 3899158af98Sjsing .version = TLS1_2_VERSION, 390970acf87Sjsing .min_tls_version = TLS1_2_VERSION, 391970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 3929158af98Sjsing .ssl_new = tls1_new, 3939158af98Sjsing .ssl_clear = tls1_clear, 3949158af98Sjsing .ssl_free = tls1_free, 3959158af98Sjsing .ssl_accept = ssl3_accept, 3969158af98Sjsing .ssl_connect = ssl3_connect, 3971a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 3989158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 3999158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 4008dc90bbaSjsing .ssl_pending = ssl3_pending, 4019158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 4029158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 4036ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 4049158af98Sjsing }; 4059158af98Sjsing 4066ba40c14Sjsing static const SSL_METHOD TLSv1_2_client_method_data = { 407d1294899Stb .dtls = 0, 408d1294899Stb .server = 0, 409d1294899Stb .version = TLS1_2_VERSION, 410970acf87Sjsing .min_tls_version = TLS1_2_VERSION, 411970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 412d1294899Stb .ssl_new = tls1_new, 413d1294899Stb .ssl_clear = tls1_clear, 414d1294899Stb .ssl_free = tls1_free, 415d1294899Stb .ssl_accept = ssl_undefined_function, 416d1294899Stb .ssl_connect = ssl3_connect, 417d1294899Stb .ssl_shutdown = ssl3_shutdown, 418d1294899Stb .ssl_renegotiate = ssl3_renegotiate, 419d1294899Stb .ssl_renegotiate_check = ssl3_renegotiate_check, 420d1294899Stb .ssl_pending = ssl3_pending, 421d1294899Stb .ssl_read_bytes = ssl3_read_bytes, 422d1294899Stb .ssl_write_bytes = ssl3_write_bytes, 4236ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 424d1294899Stb }; 425d1294899Stb 4269158af98Sjsing const SSL_METHOD * 4279fef1c44Sjsing TLS_client_method(void) 4289158af98Sjsing { 429d1294899Stb return (&TLS_client_method_data); 4309158af98Sjsing } 43171e04849Sbeck LSSL_ALIAS(TLS_client_method); 4329158af98Sjsing 4339158af98Sjsing const SSL_METHOD * 4349158af98Sjsing TLS_method(void) 4359158af98Sjsing { 43694149d15Sjsing return (&TLS_method_data); 43794149d15Sjsing } 43871e04849Sbeck LSSL_ALIAS(TLS_method); 43994149d15Sjsing 44094149d15Sjsing const SSL_METHOD * 4419fef1c44Sjsing TLS_server_method(void) 4429fef1c44Sjsing { 4439fef1c44Sjsing return TLS_method(); 4449fef1c44Sjsing } 44571e04849Sbeck LSSL_ALIAS(TLS_server_method); 4469fef1c44Sjsing 4479fef1c44Sjsing const SSL_METHOD * 44894149d15Sjsing tls_legacy_method(void) 44994149d15Sjsing { 45094149d15Sjsing return (&TLS_legacy_method_data); 4519158af98Sjsing } 4529158af98Sjsing 4539158af98Sjsing const SSL_METHOD * 4549fef1c44Sjsing SSLv23_client_method(void) 4559fef1c44Sjsing { 456d1294899Stb return TLS_client_method(); 4579fef1c44Sjsing } 45871e04849Sbeck LSSL_ALIAS(SSLv23_client_method); 4599fef1c44Sjsing 4609fef1c44Sjsing const SSL_METHOD * 4619fef1c44Sjsing SSLv23_method(void) 4629fef1c44Sjsing { 4639fef1c44Sjsing return TLS_method(); 4649fef1c44Sjsing } 46571e04849Sbeck LSSL_ALIAS(SSLv23_method); 4669fef1c44Sjsing 4679fef1c44Sjsing const SSL_METHOD * 4689fef1c44Sjsing SSLv23_server_method(void) 4699fef1c44Sjsing { 4709fef1c44Sjsing return TLS_method(); 4719fef1c44Sjsing } 47271e04849Sbeck LSSL_ALIAS(SSLv23_server_method); 4739fef1c44Sjsing 4749fef1c44Sjsing const SSL_METHOD * 4759fef1c44Sjsing TLSv1_client_method(void) 4769fef1c44Sjsing { 477d1294899Stb return (&TLSv1_client_method_data); 4789fef1c44Sjsing } 47971e04849Sbeck LSSL_ALIAS(TLSv1_client_method); 4809fef1c44Sjsing 4819fef1c44Sjsing const SSL_METHOD * 4829158af98Sjsing TLSv1_method(void) 4839158af98Sjsing { 4849158af98Sjsing return (&TLSv1_method_data); 4859158af98Sjsing } 48671e04849Sbeck LSSL_ALIAS(TLSv1_method); 4879158af98Sjsing 4889158af98Sjsing const SSL_METHOD * 4899fef1c44Sjsing TLSv1_server_method(void) 4909fef1c44Sjsing { 4919fef1c44Sjsing return (&TLSv1_method_data); 4929fef1c44Sjsing } 49371e04849Sbeck LSSL_ALIAS(TLSv1_server_method); 4949fef1c44Sjsing 4959fef1c44Sjsing const SSL_METHOD * 4969fef1c44Sjsing TLSv1_1_client_method(void) 4979fef1c44Sjsing { 498d1294899Stb return (&TLSv1_1_client_method_data); 4999fef1c44Sjsing } 50071e04849Sbeck LSSL_ALIAS(TLSv1_1_client_method); 5019fef1c44Sjsing 5029fef1c44Sjsing const SSL_METHOD * 5039158af98Sjsing TLSv1_1_method(void) 5049158af98Sjsing { 5059158af98Sjsing return (&TLSv1_1_method_data); 5069158af98Sjsing } 50771e04849Sbeck LSSL_ALIAS(TLSv1_1_method); 5089158af98Sjsing 5099158af98Sjsing const SSL_METHOD * 5109fef1c44Sjsing TLSv1_1_server_method(void) 5119fef1c44Sjsing { 5129fef1c44Sjsing return (&TLSv1_1_method_data); 5139fef1c44Sjsing } 51471e04849Sbeck LSSL_ALIAS(TLSv1_1_server_method); 5159fef1c44Sjsing 5169fef1c44Sjsing const SSL_METHOD * 5179fef1c44Sjsing TLSv1_2_client_method(void) 5189fef1c44Sjsing { 519d1294899Stb return (&TLSv1_2_client_method_data); 5209fef1c44Sjsing } 52171e04849Sbeck LSSL_ALIAS(TLSv1_2_client_method); 5229fef1c44Sjsing 5239fef1c44Sjsing const SSL_METHOD * 5249158af98Sjsing TLSv1_2_method(void) 5259158af98Sjsing { 5269158af98Sjsing return (&TLSv1_2_method_data); 5279158af98Sjsing } 52871e04849Sbeck LSSL_ALIAS(TLSv1_2_method); 5299158af98Sjsing 5309158af98Sjsing const SSL_METHOD * 5319158af98Sjsing TLSv1_2_server_method(void) 5329158af98Sjsing { 5339fef1c44Sjsing return (&TLSv1_2_method_data); 5349158af98Sjsing } 53571e04849Sbeck LSSL_ALIAS(TLSv1_2_server_method); 536bfc125deSjsing 537bfc125deSjsing const SSL_METHOD * 5389fef1c44Sjsing ssl_get_method(uint16_t version) 539bfc125deSjsing { 540bfc125deSjsing if (version == TLS1_3_VERSION) 5419fef1c44Sjsing return (TLS_method()); 542bfc125deSjsing if (version == TLS1_2_VERSION) 5439fef1c44Sjsing return (TLSv1_2_method()); 544bfc125deSjsing if (version == TLS1_1_VERSION) 5459fef1c44Sjsing return (TLSv1_1_method()); 546bfc125deSjsing if (version == TLS1_VERSION) 5479fef1c44Sjsing return (TLSv1_method()); 548bfc125deSjsing if (version == DTLS1_VERSION) 5499fef1c44Sjsing return (DTLSv1_method()); 550a48e0dedSjsing if (version == DTLS1_2_VERSION) 551a48e0dedSjsing return (DTLSv1_2_method()); 552bfc125deSjsing 553bfc125deSjsing return (NULL); 554bfc125deSjsing } 555