1*71e04849Sbeck /* $OpenBSD: ssl_methods.c,v 1.31 2023/07/08 16:40:13 beck 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 .get_cipher = dtls1_get_cipher, 81a48e0dedSjsing .enc_flags = TLSV1_2_ENC_FLAGS, 82a48e0dedSjsing }; 83a48e0dedSjsing 84a48e0dedSjsing static const SSL_METHOD DTLS_client_method_data = { 856ba40c14Sjsing .dtls = 1, 866ba40c14Sjsing .server = 0, 876ba40c14Sjsing .version = DTLS1_2_VERSION, 886ba40c14Sjsing .min_tls_version = TLS1_1_VERSION, 896ba40c14Sjsing .max_tls_version = TLS1_2_VERSION, 906ba40c14Sjsing .ssl_new = dtls1_new, 916ba40c14Sjsing .ssl_clear = dtls1_clear, 926ba40c14Sjsing .ssl_free = dtls1_free, 936ba40c14Sjsing .ssl_accept = ssl_undefined_function, 946ba40c14Sjsing .ssl_connect = ssl3_connect, 956ba40c14Sjsing .ssl_shutdown = ssl3_shutdown, 966ba40c14Sjsing .ssl_renegotiate = ssl3_renegotiate, 976ba40c14Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 986ba40c14Sjsing .ssl_pending = ssl3_pending, 996ba40c14Sjsing .ssl_read_bytes = dtls1_read_bytes, 1006ba40c14Sjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 101a48e0dedSjsing .get_cipher = dtls1_get_cipher, 1026ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 103a48e0dedSjsing }; 104a48e0dedSjsing 1056ba40c14Sjsing static const SSL_METHOD DTLSv1_method_data = { 106354e02d3Sjsing .dtls = 1, 107d1294899Stb .server = 1, 1089158af98Sjsing .version = DTLS1_VERSION, 109970acf87Sjsing .min_tls_version = TLS1_1_VERSION, 110970acf87Sjsing .max_tls_version = TLS1_1_VERSION, 1119158af98Sjsing .ssl_new = dtls1_new, 1129158af98Sjsing .ssl_clear = dtls1_clear, 1139158af98Sjsing .ssl_free = dtls1_free, 1149158af98Sjsing .ssl_accept = ssl3_accept, 1159158af98Sjsing .ssl_connect = ssl3_connect, 1161a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 1179158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 1189158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 1198dc90bbaSjsing .ssl_pending = ssl3_pending, 1209158af98Sjsing .ssl_read_bytes = dtls1_read_bytes, 1219158af98Sjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 1229158af98Sjsing .get_cipher = dtls1_get_cipher, 123d1294899Stb .enc_flags = TLSV1_1_ENC_FLAGS, 124d1294899Stb }; 125d1294899Stb 126d1294899Stb static const SSL_METHOD DTLSv1_client_method_data = { 1276ba40c14Sjsing .dtls = 1, 1286ba40c14Sjsing .server = 0, 1296ba40c14Sjsing .version = DTLS1_VERSION, 1306ba40c14Sjsing .min_tls_version = TLS1_1_VERSION, 1316ba40c14Sjsing .max_tls_version = TLS1_1_VERSION, 1326ba40c14Sjsing .ssl_new = dtls1_new, 1336ba40c14Sjsing .ssl_clear = dtls1_clear, 1346ba40c14Sjsing .ssl_free = dtls1_free, 1356ba40c14Sjsing .ssl_accept = ssl_undefined_function, 1366ba40c14Sjsing .ssl_connect = ssl3_connect, 1376ba40c14Sjsing .ssl_shutdown = ssl3_shutdown, 1386ba40c14Sjsing .ssl_renegotiate = ssl3_renegotiate, 1396ba40c14Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 1406ba40c14Sjsing .ssl_pending = ssl3_pending, 1416ba40c14Sjsing .ssl_read_bytes = dtls1_read_bytes, 1426ba40c14Sjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 143d1294899Stb .get_cipher = dtls1_get_cipher, 1446ba40c14Sjsing .enc_flags = TLSV1_1_ENC_FLAGS, 145d1294899Stb }; 146d1294899Stb 1476ba40c14Sjsing static const SSL_METHOD DTLSv1_2_method_data = { 148a48e0dedSjsing .dtls = 1, 149a48e0dedSjsing .server = 1, 150a48e0dedSjsing .version = DTLS1_2_VERSION, 151970acf87Sjsing .min_tls_version = TLS1_2_VERSION, 152970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 153a48e0dedSjsing .ssl_new = dtls1_new, 154a48e0dedSjsing .ssl_clear = dtls1_clear, 155a48e0dedSjsing .ssl_free = dtls1_free, 156a48e0dedSjsing .ssl_accept = ssl3_accept, 157a48e0dedSjsing .ssl_connect = ssl3_connect, 158a48e0dedSjsing .ssl_shutdown = ssl3_shutdown, 159a48e0dedSjsing .ssl_renegotiate = ssl3_renegotiate, 160a48e0dedSjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 161a48e0dedSjsing .ssl_pending = ssl3_pending, 162a48e0dedSjsing .ssl_read_bytes = dtls1_read_bytes, 163a48e0dedSjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 164a48e0dedSjsing .get_cipher = dtls1_get_cipher, 1656ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 166a48e0dedSjsing }; 167a48e0dedSjsing 1686ba40c14Sjsing static const SSL_METHOD DTLSv1_2_client_method_data = { 169a48e0dedSjsing .dtls = 1, 170a48e0dedSjsing .server = 0, 171a48e0dedSjsing .version = DTLS1_2_VERSION, 172970acf87Sjsing .min_tls_version = TLS1_2_VERSION, 173970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 174a48e0dedSjsing .ssl_new = dtls1_new, 175a48e0dedSjsing .ssl_clear = dtls1_clear, 176a48e0dedSjsing .ssl_free = dtls1_free, 177a48e0dedSjsing .ssl_accept = ssl_undefined_function, 178a48e0dedSjsing .ssl_connect = ssl3_connect, 179a48e0dedSjsing .ssl_shutdown = ssl3_shutdown, 180a48e0dedSjsing .ssl_renegotiate = ssl3_renegotiate, 181a48e0dedSjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 182a48e0dedSjsing .ssl_pending = ssl3_pending, 183a48e0dedSjsing .ssl_read_bytes = dtls1_read_bytes, 184a48e0dedSjsing .ssl_write_bytes = dtls1_write_app_data_bytes, 185a48e0dedSjsing .get_cipher = dtls1_get_cipher, 1866ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 187a48e0dedSjsing }; 188a48e0dedSjsing 1899158af98Sjsing const SSL_METHOD * 1909fef1c44Sjsing DTLSv1_client_method(void) 1919fef1c44Sjsing { 192d1294899Stb return &DTLSv1_client_method_data; 1939fef1c44Sjsing } 194*71e04849Sbeck LSSL_ALIAS(DTLSv1_client_method); 1959fef1c44Sjsing 1969fef1c44Sjsing const SSL_METHOD * 1979158af98Sjsing DTLSv1_method(void) 1989158af98Sjsing { 1999158af98Sjsing return &DTLSv1_method_data; 2009158af98Sjsing } 201*71e04849Sbeck LSSL_ALIAS(DTLSv1_method); 2029158af98Sjsing 20371023d34Sjsing const SSL_METHOD * 2049fef1c44Sjsing DTLSv1_server_method(void) 2059fef1c44Sjsing { 2069fef1c44Sjsing return &DTLSv1_method_data; 2079fef1c44Sjsing } 208*71e04849Sbeck LSSL_ALIAS(DTLSv1_server_method); 2099fef1c44Sjsing 2109fef1c44Sjsing const SSL_METHOD * 211a48e0dedSjsing DTLSv1_2_client_method(void) 212a48e0dedSjsing { 213a48e0dedSjsing return &DTLSv1_2_client_method_data; 214a48e0dedSjsing } 215*71e04849Sbeck LSSL_ALIAS(DTLSv1_2_client_method); 216a48e0dedSjsing 217a48e0dedSjsing const SSL_METHOD * 218a48e0dedSjsing DTLSv1_2_method(void) 219a48e0dedSjsing { 220a48e0dedSjsing return &DTLSv1_2_method_data; 221a48e0dedSjsing } 222*71e04849Sbeck LSSL_ALIAS(DTLSv1_2_method); 223a48e0dedSjsing 224a48e0dedSjsing const SSL_METHOD * 225a48e0dedSjsing DTLSv1_2_server_method(void) 226a48e0dedSjsing { 227a48e0dedSjsing return &DTLSv1_2_method_data; 228a48e0dedSjsing } 229*71e04849Sbeck LSSL_ALIAS(DTLSv1_2_server_method); 230a48e0dedSjsing 231a48e0dedSjsing const SSL_METHOD * 2329fef1c44Sjsing DTLS_client_method(void) 2339fef1c44Sjsing { 234a48e0dedSjsing return &DTLS_client_method_data; 2359fef1c44Sjsing } 236*71e04849Sbeck LSSL_ALIAS(DTLS_client_method); 2379fef1c44Sjsing 2389fef1c44Sjsing const SSL_METHOD * 23971023d34Sjsing DTLS_method(void) 24071023d34Sjsing { 241a48e0dedSjsing return &DTLS_method_data; 24271023d34Sjsing } 243*71e04849Sbeck LSSL_ALIAS(DTLS_method); 24471023d34Sjsing 2459158af98Sjsing const SSL_METHOD * 24671023d34Sjsing DTLS_server_method(void) 24771023d34Sjsing { 248a48e0dedSjsing return &DTLS_method_data; 2499158af98Sjsing } 250*71e04849Sbeck LSSL_ALIAS(DTLS_server_method); 2519158af98Sjsing 2526ba40c14Sjsing static const SSL_METHOD TLS_method_data = { 253354e02d3Sjsing .dtls = 0, 254d1294899Stb .server = 1, 25594149d15Sjsing .version = TLS1_3_VERSION, 256970acf87Sjsing .min_tls_version = TLS1_VERSION, 257970acf87Sjsing .max_tls_version = TLS1_3_VERSION, 25894149d15Sjsing .ssl_new = tls1_new, 25994149d15Sjsing .ssl_clear = tls1_clear, 26094149d15Sjsing .ssl_free = tls1_free, 26194149d15Sjsing .ssl_accept = tls13_legacy_accept, 26294149d15Sjsing .ssl_connect = tls13_legacy_connect, 26394149d15Sjsing .ssl_shutdown = tls13_legacy_shutdown, 26494149d15Sjsing .ssl_renegotiate = ssl_undefined_function, 26594149d15Sjsing .ssl_renegotiate_check = ssl_ok, 26694149d15Sjsing .ssl_pending = tls13_legacy_pending, 26794149d15Sjsing .ssl_read_bytes = tls13_legacy_read_bytes, 26894149d15Sjsing .ssl_write_bytes = tls13_legacy_write_bytes, 26994149d15Sjsing .get_cipher = ssl3_get_cipher, 2706ba40c14Sjsing .enc_flags = TLSV1_3_ENC_FLAGS, 27194149d15Sjsing }; 27294149d15Sjsing 2736ba40c14Sjsing static const SSL_METHOD TLS_legacy_method_data = { 274354e02d3Sjsing .dtls = 0, 275d1294899Stb .server = 1, 2769158af98Sjsing .version = TLS1_2_VERSION, 277970acf87Sjsing .min_tls_version = TLS1_VERSION, 278970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 2799158af98Sjsing .ssl_new = tls1_new, 2809158af98Sjsing .ssl_clear = tls1_clear, 2819158af98Sjsing .ssl_free = tls1_free, 2829158af98Sjsing .ssl_accept = ssl3_accept, 2839158af98Sjsing .ssl_connect = ssl3_connect, 2841a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 2859158af98Sjsing .ssl_renegotiate = ssl_undefined_function, 2869158af98Sjsing .ssl_renegotiate_check = ssl_ok, 2878dc90bbaSjsing .ssl_pending = ssl3_pending, 2889158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 2899158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 2909158af98Sjsing .get_cipher = ssl3_get_cipher, 2916ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 2929158af98Sjsing }; 2939158af98Sjsing 2946ba40c14Sjsing static const SSL_METHOD TLS_client_method_data = { 295d1294899Stb .dtls = 0, 296d1294899Stb .server = 0, 297d1294899Stb .version = TLS1_3_VERSION, 298970acf87Sjsing .min_tls_version = TLS1_VERSION, 299970acf87Sjsing .max_tls_version = TLS1_3_VERSION, 300d1294899Stb .ssl_new = tls1_new, 301d1294899Stb .ssl_clear = tls1_clear, 302d1294899Stb .ssl_free = tls1_free, 303d1294899Stb .ssl_accept = tls13_legacy_accept, 304d1294899Stb .ssl_connect = tls13_legacy_connect, 305d1294899Stb .ssl_shutdown = tls13_legacy_shutdown, 306d1294899Stb .ssl_renegotiate = ssl_undefined_function, 307d1294899Stb .ssl_renegotiate_check = ssl_ok, 308d1294899Stb .ssl_pending = tls13_legacy_pending, 309d1294899Stb .ssl_read_bytes = tls13_legacy_read_bytes, 310d1294899Stb .ssl_write_bytes = tls13_legacy_write_bytes, 311d1294899Stb .get_cipher = ssl3_get_cipher, 3126ba40c14Sjsing .enc_flags = TLSV1_3_ENC_FLAGS, 313d1294899Stb }; 314d1294899Stb 3156ba40c14Sjsing static const SSL_METHOD TLSv1_method_data = { 316354e02d3Sjsing .dtls = 0, 317d1294899Stb .server = 1, 3189158af98Sjsing .version = TLS1_VERSION, 319970acf87Sjsing .min_tls_version = TLS1_VERSION, 320970acf87Sjsing .max_tls_version = TLS1_VERSION, 3219158af98Sjsing .ssl_new = tls1_new, 3229158af98Sjsing .ssl_clear = tls1_clear, 3239158af98Sjsing .ssl_free = tls1_free, 3249158af98Sjsing .ssl_accept = ssl3_accept, 3259158af98Sjsing .ssl_connect = ssl3_connect, 3261a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 3279158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 3289158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3298dc90bbaSjsing .ssl_pending = ssl3_pending, 3309158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 3319158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 3329158af98Sjsing .get_cipher = ssl3_get_cipher, 333d1294899Stb .enc_flags = TLSV1_ENC_FLAGS, 334d1294899Stb }; 335d1294899Stb 336d1294899Stb static const SSL_METHOD TLSv1_client_method_data = { 3376ba40c14Sjsing .dtls = 0, 3386ba40c14Sjsing .server = 0, 3396ba40c14Sjsing .version = TLS1_VERSION, 3406ba40c14Sjsing .min_tls_version = TLS1_VERSION, 3416ba40c14Sjsing .max_tls_version = TLS1_VERSION, 3426ba40c14Sjsing .ssl_new = tls1_new, 3436ba40c14Sjsing .ssl_clear = tls1_clear, 3446ba40c14Sjsing .ssl_free = tls1_free, 3456ba40c14Sjsing .ssl_accept = ssl_undefined_function, 3466ba40c14Sjsing .ssl_connect = ssl3_connect, 3476ba40c14Sjsing .ssl_shutdown = ssl3_shutdown, 3486ba40c14Sjsing .ssl_renegotiate = ssl3_renegotiate, 3496ba40c14Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3506ba40c14Sjsing .ssl_pending = ssl3_pending, 3516ba40c14Sjsing .ssl_read_bytes = ssl3_read_bytes, 3526ba40c14Sjsing .ssl_write_bytes = ssl3_write_bytes, 353d1294899Stb .get_cipher = ssl3_get_cipher, 3546ba40c14Sjsing .enc_flags = TLSV1_ENC_FLAGS, 355d1294899Stb }; 356d1294899Stb 3576ba40c14Sjsing static const SSL_METHOD TLSv1_1_method_data = { 358354e02d3Sjsing .dtls = 0, 359d1294899Stb .server = 1, 3609158af98Sjsing .version = TLS1_1_VERSION, 361970acf87Sjsing .min_tls_version = TLS1_1_VERSION, 362970acf87Sjsing .max_tls_version = TLS1_1_VERSION, 3639158af98Sjsing .ssl_new = tls1_new, 3649158af98Sjsing .ssl_clear = tls1_clear, 3659158af98Sjsing .ssl_free = tls1_free, 3669158af98Sjsing .ssl_accept = ssl3_accept, 3679158af98Sjsing .ssl_connect = ssl3_connect, 3681a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 3699158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 3709158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3718dc90bbaSjsing .ssl_pending = ssl3_pending, 3729158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 3739158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 3749158af98Sjsing .get_cipher = ssl3_get_cipher, 375d1294899Stb .enc_flags = TLSV1_1_ENC_FLAGS, 376d1294899Stb }; 377d1294899Stb 378d1294899Stb static const SSL_METHOD TLSv1_1_client_method_data = { 3796ba40c14Sjsing .dtls = 0, 3806ba40c14Sjsing .server = 0, 3816ba40c14Sjsing .version = TLS1_1_VERSION, 3826ba40c14Sjsing .min_tls_version = TLS1_1_VERSION, 3836ba40c14Sjsing .max_tls_version = TLS1_1_VERSION, 3846ba40c14Sjsing .ssl_new = tls1_new, 3856ba40c14Sjsing .ssl_clear = tls1_clear, 3866ba40c14Sjsing .ssl_free = tls1_free, 3876ba40c14Sjsing .ssl_accept = ssl_undefined_function, 3886ba40c14Sjsing .ssl_connect = ssl3_connect, 3896ba40c14Sjsing .ssl_shutdown = ssl3_shutdown, 3906ba40c14Sjsing .ssl_renegotiate = ssl3_renegotiate, 3916ba40c14Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 3926ba40c14Sjsing .ssl_pending = ssl3_pending, 3936ba40c14Sjsing .ssl_read_bytes = ssl3_read_bytes, 3946ba40c14Sjsing .ssl_write_bytes = ssl3_write_bytes, 395d1294899Stb .get_cipher = ssl3_get_cipher, 3966ba40c14Sjsing .enc_flags = TLSV1_1_ENC_FLAGS, 397d1294899Stb }; 398d1294899Stb 3996ba40c14Sjsing static const SSL_METHOD TLSv1_2_method_data = { 400354e02d3Sjsing .dtls = 0, 401d1294899Stb .server = 1, 4029158af98Sjsing .version = TLS1_2_VERSION, 403970acf87Sjsing .min_tls_version = TLS1_2_VERSION, 404970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 4059158af98Sjsing .ssl_new = tls1_new, 4069158af98Sjsing .ssl_clear = tls1_clear, 4079158af98Sjsing .ssl_free = tls1_free, 4089158af98Sjsing .ssl_accept = ssl3_accept, 4099158af98Sjsing .ssl_connect = ssl3_connect, 4101a6e1177Sjsing .ssl_shutdown = ssl3_shutdown, 4119158af98Sjsing .ssl_renegotiate = ssl3_renegotiate, 4129158af98Sjsing .ssl_renegotiate_check = ssl3_renegotiate_check, 4138dc90bbaSjsing .ssl_pending = ssl3_pending, 4149158af98Sjsing .ssl_read_bytes = ssl3_read_bytes, 4159158af98Sjsing .ssl_write_bytes = ssl3_write_bytes, 4169158af98Sjsing .get_cipher = ssl3_get_cipher, 4176ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 4189158af98Sjsing }; 4199158af98Sjsing 4206ba40c14Sjsing static const SSL_METHOD TLSv1_2_client_method_data = { 421d1294899Stb .dtls = 0, 422d1294899Stb .server = 0, 423d1294899Stb .version = TLS1_2_VERSION, 424970acf87Sjsing .min_tls_version = TLS1_2_VERSION, 425970acf87Sjsing .max_tls_version = TLS1_2_VERSION, 426d1294899Stb .ssl_new = tls1_new, 427d1294899Stb .ssl_clear = tls1_clear, 428d1294899Stb .ssl_free = tls1_free, 429d1294899Stb .ssl_accept = ssl_undefined_function, 430d1294899Stb .ssl_connect = ssl3_connect, 431d1294899Stb .ssl_shutdown = ssl3_shutdown, 432d1294899Stb .ssl_renegotiate = ssl3_renegotiate, 433d1294899Stb .ssl_renegotiate_check = ssl3_renegotiate_check, 434d1294899Stb .ssl_pending = ssl3_pending, 435d1294899Stb .ssl_read_bytes = ssl3_read_bytes, 436d1294899Stb .ssl_write_bytes = ssl3_write_bytes, 437d1294899Stb .get_cipher = ssl3_get_cipher, 4386ba40c14Sjsing .enc_flags = TLSV1_2_ENC_FLAGS, 439d1294899Stb }; 440d1294899Stb 4419158af98Sjsing const SSL_METHOD * 4429fef1c44Sjsing TLS_client_method(void) 4439158af98Sjsing { 444d1294899Stb return (&TLS_client_method_data); 4459158af98Sjsing } 446*71e04849Sbeck LSSL_ALIAS(TLS_client_method); 4479158af98Sjsing 4489158af98Sjsing const SSL_METHOD * 4499158af98Sjsing TLS_method(void) 4509158af98Sjsing { 45194149d15Sjsing return (&TLS_method_data); 45294149d15Sjsing } 453*71e04849Sbeck LSSL_ALIAS(TLS_method); 45494149d15Sjsing 45594149d15Sjsing const SSL_METHOD * 4569fef1c44Sjsing TLS_server_method(void) 4579fef1c44Sjsing { 4589fef1c44Sjsing return TLS_method(); 4599fef1c44Sjsing } 460*71e04849Sbeck LSSL_ALIAS(TLS_server_method); 4619fef1c44Sjsing 4629fef1c44Sjsing const SSL_METHOD * 46394149d15Sjsing tls_legacy_method(void) 46494149d15Sjsing { 46594149d15Sjsing return (&TLS_legacy_method_data); 4669158af98Sjsing } 4679158af98Sjsing 4689158af98Sjsing const SSL_METHOD * 4699fef1c44Sjsing SSLv23_client_method(void) 4709fef1c44Sjsing { 471d1294899Stb return TLS_client_method(); 4729fef1c44Sjsing } 473*71e04849Sbeck LSSL_ALIAS(SSLv23_client_method); 4749fef1c44Sjsing 4759fef1c44Sjsing const SSL_METHOD * 4769fef1c44Sjsing SSLv23_method(void) 4779fef1c44Sjsing { 4789fef1c44Sjsing return TLS_method(); 4799fef1c44Sjsing } 480*71e04849Sbeck LSSL_ALIAS(SSLv23_method); 4819fef1c44Sjsing 4829fef1c44Sjsing const SSL_METHOD * 4839fef1c44Sjsing SSLv23_server_method(void) 4849fef1c44Sjsing { 4859fef1c44Sjsing return TLS_method(); 4869fef1c44Sjsing } 487*71e04849Sbeck LSSL_ALIAS(SSLv23_server_method); 4889fef1c44Sjsing 4899fef1c44Sjsing const SSL_METHOD * 4909fef1c44Sjsing TLSv1_client_method(void) 4919fef1c44Sjsing { 492d1294899Stb return (&TLSv1_client_method_data); 4939fef1c44Sjsing } 494*71e04849Sbeck LSSL_ALIAS(TLSv1_client_method); 4959fef1c44Sjsing 4969fef1c44Sjsing const SSL_METHOD * 4979158af98Sjsing TLSv1_method(void) 4989158af98Sjsing { 4999158af98Sjsing return (&TLSv1_method_data); 5009158af98Sjsing } 501*71e04849Sbeck LSSL_ALIAS(TLSv1_method); 5029158af98Sjsing 5039158af98Sjsing const SSL_METHOD * 5049fef1c44Sjsing TLSv1_server_method(void) 5059fef1c44Sjsing { 5069fef1c44Sjsing return (&TLSv1_method_data); 5079fef1c44Sjsing } 508*71e04849Sbeck LSSL_ALIAS(TLSv1_server_method); 5099fef1c44Sjsing 5109fef1c44Sjsing const SSL_METHOD * 5119fef1c44Sjsing TLSv1_1_client_method(void) 5129fef1c44Sjsing { 513d1294899Stb return (&TLSv1_1_client_method_data); 5149fef1c44Sjsing } 515*71e04849Sbeck LSSL_ALIAS(TLSv1_1_client_method); 5169fef1c44Sjsing 5179fef1c44Sjsing const SSL_METHOD * 5189158af98Sjsing TLSv1_1_method(void) 5199158af98Sjsing { 5209158af98Sjsing return (&TLSv1_1_method_data); 5219158af98Sjsing } 522*71e04849Sbeck LSSL_ALIAS(TLSv1_1_method); 5239158af98Sjsing 5249158af98Sjsing const SSL_METHOD * 5259fef1c44Sjsing TLSv1_1_server_method(void) 5269fef1c44Sjsing { 5279fef1c44Sjsing return (&TLSv1_1_method_data); 5289fef1c44Sjsing } 529*71e04849Sbeck LSSL_ALIAS(TLSv1_1_server_method); 5309fef1c44Sjsing 5319fef1c44Sjsing const SSL_METHOD * 5329fef1c44Sjsing TLSv1_2_client_method(void) 5339fef1c44Sjsing { 534d1294899Stb return (&TLSv1_2_client_method_data); 5359fef1c44Sjsing } 536*71e04849Sbeck LSSL_ALIAS(TLSv1_2_client_method); 5379fef1c44Sjsing 5389fef1c44Sjsing const SSL_METHOD * 5399158af98Sjsing TLSv1_2_method(void) 5409158af98Sjsing { 5419158af98Sjsing return (&TLSv1_2_method_data); 5429158af98Sjsing } 543*71e04849Sbeck LSSL_ALIAS(TLSv1_2_method); 5449158af98Sjsing 5459158af98Sjsing const SSL_METHOD * 5469158af98Sjsing TLSv1_2_server_method(void) 5479158af98Sjsing { 5489fef1c44Sjsing return (&TLSv1_2_method_data); 5499158af98Sjsing } 550*71e04849Sbeck LSSL_ALIAS(TLSv1_2_server_method); 551bfc125deSjsing 552bfc125deSjsing const SSL_METHOD * 5539fef1c44Sjsing ssl_get_method(uint16_t version) 554bfc125deSjsing { 555bfc125deSjsing if (version == TLS1_3_VERSION) 5569fef1c44Sjsing return (TLS_method()); 557bfc125deSjsing if (version == TLS1_2_VERSION) 5589fef1c44Sjsing return (TLSv1_2_method()); 559bfc125deSjsing if (version == TLS1_1_VERSION) 5609fef1c44Sjsing return (TLSv1_1_method()); 561bfc125deSjsing if (version == TLS1_VERSION) 5629fef1c44Sjsing return (TLSv1_method()); 563bfc125deSjsing if (version == DTLS1_VERSION) 5649fef1c44Sjsing return (DTLSv1_method()); 565a48e0dedSjsing if (version == DTLS1_2_VERSION) 566a48e0dedSjsing return (DTLSv1_2_method()); 567bfc125deSjsing 568bfc125deSjsing return (NULL); 569bfc125deSjsing } 570