1*72c33676SMaxim Ag /* $OpenBSD: ssl_methods.c,v 1.4 2019/03/17 17:28:08 jsing Exp $ */ 2*72c33676SMaxim Ag /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3*72c33676SMaxim Ag * All rights reserved. 4*72c33676SMaxim Ag * 5*72c33676SMaxim Ag * This package is an SSL implementation written 6*72c33676SMaxim Ag * by Eric Young (eay@cryptsoft.com). 7*72c33676SMaxim Ag * The implementation was written so as to conform with Netscapes SSL. 8*72c33676SMaxim Ag * 9*72c33676SMaxim Ag * This library is free for commercial and non-commercial use as long as 10*72c33676SMaxim Ag * the following conditions are aheared to. The following conditions 11*72c33676SMaxim Ag * apply to all code found in this distribution, be it the RC4, RSA, 12*72c33676SMaxim Ag * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13*72c33676SMaxim Ag * included with this distribution is covered by the same copyright terms 14*72c33676SMaxim Ag * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15*72c33676SMaxim Ag * 16*72c33676SMaxim Ag * Copyright remains Eric Young's, and as such any Copyright notices in 17*72c33676SMaxim Ag * the code are not to be removed. 18*72c33676SMaxim Ag * If this package is used in a product, Eric Young should be given attribution 19*72c33676SMaxim Ag * as the author of the parts of the library used. 20*72c33676SMaxim Ag * This can be in the form of a textual message at program startup or 21*72c33676SMaxim Ag * in documentation (online or textual) provided with the package. 22*72c33676SMaxim Ag * 23*72c33676SMaxim Ag * Redistribution and use in source and binary forms, with or without 24*72c33676SMaxim Ag * modification, are permitted provided that the following conditions 25*72c33676SMaxim Ag * are met: 26*72c33676SMaxim Ag * 1. Redistributions of source code must retain the copyright 27*72c33676SMaxim Ag * notice, this list of conditions and the following disclaimer. 28*72c33676SMaxim Ag * 2. Redistributions in binary form must reproduce the above copyright 29*72c33676SMaxim Ag * notice, this list of conditions and the following disclaimer in the 30*72c33676SMaxim Ag * documentation and/or other materials provided with the distribution. 31*72c33676SMaxim Ag * 3. All advertising materials mentioning features or use of this software 32*72c33676SMaxim Ag * must display the following acknowledgement: 33*72c33676SMaxim Ag * "This product includes cryptographic software written by 34*72c33676SMaxim Ag * Eric Young (eay@cryptsoft.com)" 35*72c33676SMaxim Ag * The word 'cryptographic' can be left out if the rouines from the library 36*72c33676SMaxim Ag * being used are not cryptographic related :-). 37*72c33676SMaxim Ag * 4. If you include any Windows specific code (or a derivative thereof) from 38*72c33676SMaxim Ag * the apps directory (application code) you must include an acknowledgement: 39*72c33676SMaxim Ag * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40*72c33676SMaxim Ag * 41*72c33676SMaxim Ag * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42*72c33676SMaxim Ag * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43*72c33676SMaxim Ag * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44*72c33676SMaxim Ag * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45*72c33676SMaxim Ag * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46*72c33676SMaxim Ag * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47*72c33676SMaxim Ag * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48*72c33676SMaxim Ag * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49*72c33676SMaxim Ag * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50*72c33676SMaxim Ag * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51*72c33676SMaxim Ag * SUCH DAMAGE. 52*72c33676SMaxim Ag * 53*72c33676SMaxim Ag * The licence and distribution terms for any publically available version or 54*72c33676SMaxim Ag * derivative of this code cannot be changed. i.e. this code cannot simply be 55*72c33676SMaxim Ag * copied and put under another distribution licence 56*72c33676SMaxim Ag * [including the GNU Public Licence.] 57*72c33676SMaxim Ag */ 58*72c33676SMaxim Ag 59*72c33676SMaxim Ag #include "ssl_locl.h" 60*72c33676SMaxim Ag #include "tls13_internal.h" 61*72c33676SMaxim Ag 62*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL DTLSv1_client_method_internal_data = { 63*72c33676SMaxim Ag .version = DTLS1_VERSION, 64*72c33676SMaxim Ag .min_version = DTLS1_VERSION, 65*72c33676SMaxim Ag .max_version = DTLS1_VERSION, 66*72c33676SMaxim Ag .ssl_new = dtls1_new, 67*72c33676SMaxim Ag .ssl_clear = dtls1_clear, 68*72c33676SMaxim Ag .ssl_free = dtls1_free, 69*72c33676SMaxim Ag .ssl_accept = ssl_undefined_function, 70*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 71*72c33676SMaxim Ag .get_ssl_method = dtls1_get_client_method, 72*72c33676SMaxim Ag .get_timeout = dtls1_default_timeout, 73*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 74*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 75*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 76*72c33676SMaxim Ag .ssl_get_message = dtls1_get_message, 77*72c33676SMaxim Ag .ssl_read_bytes = dtls1_read_bytes, 78*72c33676SMaxim Ag .ssl_write_bytes = dtls1_write_app_data_bytes, 79*72c33676SMaxim Ag .ssl3_enc = &DTLSv1_enc_data, 80*72c33676SMaxim Ag }; 81*72c33676SMaxim Ag 82*72c33676SMaxim Ag static const SSL_METHOD DTLSv1_client_method_data = { 83*72c33676SMaxim Ag .ssl_dispatch_alert = dtls1_dispatch_alert, 84*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 85*72c33676SMaxim Ag .get_cipher = dtls1_get_cipher, 86*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 87*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 88*72c33676SMaxim Ag .internal = &DTLSv1_client_method_internal_data, 89*72c33676SMaxim Ag }; 90*72c33676SMaxim Ag 91*72c33676SMaxim Ag const SSL_METHOD * 92*72c33676SMaxim Ag DTLSv1_client_method(void) 93*72c33676SMaxim Ag { 94*72c33676SMaxim Ag return &DTLSv1_client_method_data; 95*72c33676SMaxim Ag } 96*72c33676SMaxim Ag 97*72c33676SMaxim Ag const SSL_METHOD * 98*72c33676SMaxim Ag DTLS_client_method(void) 99*72c33676SMaxim Ag { 100*72c33676SMaxim Ag return DTLSv1_client_method(); 101*72c33676SMaxim Ag } 102*72c33676SMaxim Ag 103*72c33676SMaxim Ag const SSL_METHOD * 104*72c33676SMaxim Ag dtls1_get_client_method(int ver) 105*72c33676SMaxim Ag { 106*72c33676SMaxim Ag if (ver == DTLS1_VERSION) 107*72c33676SMaxim Ag return (DTLSv1_client_method()); 108*72c33676SMaxim Ag return (NULL); 109*72c33676SMaxim Ag } 110*72c33676SMaxim Ag 111*72c33676SMaxim Ag static const SSL_METHOD *dtls1_get_method(int ver); 112*72c33676SMaxim Ag 113*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL DTLSv1_method_internal_data = { 114*72c33676SMaxim Ag .version = DTLS1_VERSION, 115*72c33676SMaxim Ag .min_version = DTLS1_VERSION, 116*72c33676SMaxim Ag .max_version = DTLS1_VERSION, 117*72c33676SMaxim Ag .ssl_new = dtls1_new, 118*72c33676SMaxim Ag .ssl_clear = dtls1_clear, 119*72c33676SMaxim Ag .ssl_free = dtls1_free, 120*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 121*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 122*72c33676SMaxim Ag .get_ssl_method = dtls1_get_method, 123*72c33676SMaxim Ag .get_timeout = dtls1_default_timeout, 124*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 125*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 126*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 127*72c33676SMaxim Ag .ssl_get_message = dtls1_get_message, 128*72c33676SMaxim Ag .ssl_read_bytes = dtls1_read_bytes, 129*72c33676SMaxim Ag .ssl_write_bytes = dtls1_write_app_data_bytes, 130*72c33676SMaxim Ag .ssl3_enc = &DTLSv1_enc_data, 131*72c33676SMaxim Ag }; 132*72c33676SMaxim Ag 133*72c33676SMaxim Ag static const SSL_METHOD DTLSv1_method_data = { 134*72c33676SMaxim Ag .ssl_dispatch_alert = dtls1_dispatch_alert, 135*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 136*72c33676SMaxim Ag .get_cipher = dtls1_get_cipher, 137*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 138*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 139*72c33676SMaxim Ag .internal = &DTLSv1_method_internal_data, 140*72c33676SMaxim Ag }; 141*72c33676SMaxim Ag 142*72c33676SMaxim Ag const SSL_METHOD * 143*72c33676SMaxim Ag DTLSv1_method(void) 144*72c33676SMaxim Ag { 145*72c33676SMaxim Ag return &DTLSv1_method_data; 146*72c33676SMaxim Ag } 147*72c33676SMaxim Ag 148*72c33676SMaxim Ag const SSL_METHOD * 149*72c33676SMaxim Ag DTLS_method(void) 150*72c33676SMaxim Ag { 151*72c33676SMaxim Ag return DTLSv1_method(); 152*72c33676SMaxim Ag } 153*72c33676SMaxim Ag 154*72c33676SMaxim Ag static const SSL_METHOD * 155*72c33676SMaxim Ag dtls1_get_method(int ver) 156*72c33676SMaxim Ag { 157*72c33676SMaxim Ag if (ver == DTLS1_VERSION) 158*72c33676SMaxim Ag return (DTLSv1_method()); 159*72c33676SMaxim Ag return (NULL); 160*72c33676SMaxim Ag } 161*72c33676SMaxim Ag 162*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL DTLSv1_server_method_internal_data = { 163*72c33676SMaxim Ag .version = DTLS1_VERSION, 164*72c33676SMaxim Ag .min_version = DTLS1_VERSION, 165*72c33676SMaxim Ag .max_version = DTLS1_VERSION, 166*72c33676SMaxim Ag .ssl_new = dtls1_new, 167*72c33676SMaxim Ag .ssl_clear = dtls1_clear, 168*72c33676SMaxim Ag .ssl_free = dtls1_free, 169*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 170*72c33676SMaxim Ag .ssl_connect = ssl_undefined_function, 171*72c33676SMaxim Ag .get_ssl_method = dtls1_get_server_method, 172*72c33676SMaxim Ag .get_timeout = dtls1_default_timeout, 173*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 174*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 175*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 176*72c33676SMaxim Ag .ssl_get_message = dtls1_get_message, 177*72c33676SMaxim Ag .ssl_read_bytes = dtls1_read_bytes, 178*72c33676SMaxim Ag .ssl_write_bytes = dtls1_write_app_data_bytes, 179*72c33676SMaxim Ag .ssl3_enc = &DTLSv1_enc_data, 180*72c33676SMaxim Ag }; 181*72c33676SMaxim Ag 182*72c33676SMaxim Ag static const SSL_METHOD DTLSv1_server_method_data = { 183*72c33676SMaxim Ag .ssl_dispatch_alert = dtls1_dispatch_alert, 184*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 185*72c33676SMaxim Ag .get_cipher = dtls1_get_cipher, 186*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 187*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 188*72c33676SMaxim Ag .internal = &DTLSv1_server_method_internal_data, 189*72c33676SMaxim Ag }; 190*72c33676SMaxim Ag 191*72c33676SMaxim Ag const SSL_METHOD * 192*72c33676SMaxim Ag DTLSv1_server_method(void) 193*72c33676SMaxim Ag { 194*72c33676SMaxim Ag return &DTLSv1_server_method_data; 195*72c33676SMaxim Ag } 196*72c33676SMaxim Ag 197*72c33676SMaxim Ag const SSL_METHOD * 198*72c33676SMaxim Ag DTLS_server_method(void) 199*72c33676SMaxim Ag { 200*72c33676SMaxim Ag return DTLSv1_server_method(); 201*72c33676SMaxim Ag } 202*72c33676SMaxim Ag 203*72c33676SMaxim Ag const SSL_METHOD * 204*72c33676SMaxim Ag dtls1_get_server_method(int ver) 205*72c33676SMaxim Ag { 206*72c33676SMaxim Ag if (ver == DTLS1_VERSION) 207*72c33676SMaxim Ag return (DTLSv1_server_method()); 208*72c33676SMaxim Ag return (NULL); 209*72c33676SMaxim Ag } 210*72c33676SMaxim Ag 211*72c33676SMaxim Ag #ifdef LIBRESSL_HAS_TLS1_3 212*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLS_client_method_internal_data = { 213*72c33676SMaxim Ag .version = TLS1_3_VERSION, 214*72c33676SMaxim Ag .min_version = TLS1_VERSION, 215*72c33676SMaxim Ag .max_version = TLS1_3_VERSION, 216*72c33676SMaxim Ag .ssl_new = tls1_new, 217*72c33676SMaxim Ag .ssl_clear = tls1_clear, 218*72c33676SMaxim Ag .ssl_free = tls1_free, 219*72c33676SMaxim Ag .ssl_accept = ssl_undefined_function, 220*72c33676SMaxim Ag .ssl_connect = tls13_legacy_connect, 221*72c33676SMaxim Ag .get_ssl_method = tls1_get_client_method, 222*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 223*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 224*72c33676SMaxim Ag .ssl_renegotiate = ssl_undefined_function, 225*72c33676SMaxim Ag .ssl_renegotiate_check = ssl_ok, 226*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 227*72c33676SMaxim Ag .ssl_read_bytes = tls13_legacy_read_bytes, 228*72c33676SMaxim Ag .ssl_write_bytes = tls13_legacy_write_bytes, 229*72c33676SMaxim Ag .ssl3_enc = &TLSv1_2_enc_data, 230*72c33676SMaxim Ag }; 231*72c33676SMaxim Ag 232*72c33676SMaxim Ag static const SSL_METHOD TLS_client_method_data = { 233*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 234*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 235*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 236*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 237*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 238*72c33676SMaxim Ag .internal = &TLS_client_method_internal_data, 239*72c33676SMaxim Ag }; 240*72c33676SMaxim Ag #endif 241*72c33676SMaxim Ag 242*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLS_legacy_client_method_internal_data = { 243*72c33676SMaxim Ag .version = TLS1_2_VERSION, 244*72c33676SMaxim Ag .min_version = TLS1_VERSION, 245*72c33676SMaxim Ag .max_version = TLS1_2_VERSION, 246*72c33676SMaxim Ag .ssl_new = tls1_new, 247*72c33676SMaxim Ag .ssl_clear = tls1_clear, 248*72c33676SMaxim Ag .ssl_free = tls1_free, 249*72c33676SMaxim Ag .ssl_accept = ssl_undefined_function, 250*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 251*72c33676SMaxim Ag .get_ssl_method = tls1_get_client_method, 252*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 253*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 254*72c33676SMaxim Ag .ssl_renegotiate = ssl_undefined_function, 255*72c33676SMaxim Ag .ssl_renegotiate_check = ssl_ok, 256*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 257*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 258*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 259*72c33676SMaxim Ag .ssl3_enc = &TLSv1_2_enc_data, 260*72c33676SMaxim Ag }; 261*72c33676SMaxim Ag 262*72c33676SMaxim Ag static const SSL_METHOD TLS_legacy_client_method_data = { 263*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 264*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 265*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 266*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 267*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 268*72c33676SMaxim Ag .internal = &TLS_legacy_client_method_internal_data, 269*72c33676SMaxim Ag }; 270*72c33676SMaxim Ag 271*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLSv1_client_method_internal_data = { 272*72c33676SMaxim Ag .version = TLS1_VERSION, 273*72c33676SMaxim Ag .min_version = TLS1_VERSION, 274*72c33676SMaxim Ag .max_version = TLS1_VERSION, 275*72c33676SMaxim Ag .ssl_new = tls1_new, 276*72c33676SMaxim Ag .ssl_clear = tls1_clear, 277*72c33676SMaxim Ag .ssl_free = tls1_free, 278*72c33676SMaxim Ag .ssl_accept = ssl_undefined_function, 279*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 280*72c33676SMaxim Ag .get_ssl_method = tls1_get_client_method, 281*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 282*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 283*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 284*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 285*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 286*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 287*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 288*72c33676SMaxim Ag .ssl3_enc = &TLSv1_enc_data, 289*72c33676SMaxim Ag }; 290*72c33676SMaxim Ag 291*72c33676SMaxim Ag static const SSL_METHOD TLSv1_client_method_data = { 292*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 293*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 294*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 295*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 296*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 297*72c33676SMaxim Ag .internal = &TLSv1_client_method_internal_data, 298*72c33676SMaxim Ag }; 299*72c33676SMaxim Ag 300*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLSv1_1_client_method_internal_data = { 301*72c33676SMaxim Ag .version = TLS1_1_VERSION, 302*72c33676SMaxim Ag .min_version = TLS1_1_VERSION, 303*72c33676SMaxim Ag .max_version = TLS1_1_VERSION, 304*72c33676SMaxim Ag .ssl_new = tls1_new, 305*72c33676SMaxim Ag .ssl_clear = tls1_clear, 306*72c33676SMaxim Ag .ssl_free = tls1_free, 307*72c33676SMaxim Ag .ssl_accept = ssl_undefined_function, 308*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 309*72c33676SMaxim Ag .get_ssl_method = tls1_get_client_method, 310*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 311*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 312*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 313*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 314*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 315*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 316*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 317*72c33676SMaxim Ag .ssl3_enc = &TLSv1_1_enc_data, 318*72c33676SMaxim Ag }; 319*72c33676SMaxim Ag 320*72c33676SMaxim Ag static const SSL_METHOD TLSv1_1_client_method_data = { 321*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 322*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 323*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 324*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 325*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 326*72c33676SMaxim Ag .internal = &TLSv1_1_client_method_internal_data, 327*72c33676SMaxim Ag }; 328*72c33676SMaxim Ag 329*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLSv1_2_client_method_internal_data = { 330*72c33676SMaxim Ag .version = TLS1_2_VERSION, 331*72c33676SMaxim Ag .min_version = TLS1_2_VERSION, 332*72c33676SMaxim Ag .max_version = TLS1_2_VERSION, 333*72c33676SMaxim Ag .ssl_new = tls1_new, 334*72c33676SMaxim Ag .ssl_clear = tls1_clear, 335*72c33676SMaxim Ag .ssl_free = tls1_free, 336*72c33676SMaxim Ag .ssl_accept = ssl_undefined_function, 337*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 338*72c33676SMaxim Ag .get_ssl_method = tls1_get_client_method, 339*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 340*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 341*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 342*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 343*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 344*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 345*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 346*72c33676SMaxim Ag .ssl3_enc = &TLSv1_2_enc_data, 347*72c33676SMaxim Ag }; 348*72c33676SMaxim Ag 349*72c33676SMaxim Ag static const SSL_METHOD TLSv1_2_client_method_data = { 350*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 351*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 352*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 353*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 354*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 355*72c33676SMaxim Ag .internal = &TLSv1_2_client_method_internal_data, 356*72c33676SMaxim Ag }; 357*72c33676SMaxim Ag 358*72c33676SMaxim Ag const SSL_METHOD * 359*72c33676SMaxim Ag tls1_get_client_method(int ver) 360*72c33676SMaxim Ag { 361*72c33676SMaxim Ag if (ver == TLS1_2_VERSION) 362*72c33676SMaxim Ag return (TLSv1_2_client_method()); 363*72c33676SMaxim Ag if (ver == TLS1_1_VERSION) 364*72c33676SMaxim Ag return (TLSv1_1_client_method()); 365*72c33676SMaxim Ag if (ver == TLS1_VERSION) 366*72c33676SMaxim Ag return (TLSv1_client_method()); 367*72c33676SMaxim Ag return (NULL); 368*72c33676SMaxim Ag } 369*72c33676SMaxim Ag 370*72c33676SMaxim Ag const SSL_METHOD * 371*72c33676SMaxim Ag SSLv23_client_method(void) 372*72c33676SMaxim Ag { 373*72c33676SMaxim Ag return (TLS_client_method()); 374*72c33676SMaxim Ag } 375*72c33676SMaxim Ag 376*72c33676SMaxim Ag const SSL_METHOD * 377*72c33676SMaxim Ag TLS_client_method(void) 378*72c33676SMaxim Ag { 379*72c33676SMaxim Ag #ifdef LIBRESSL_HAS_TLS1_3 380*72c33676SMaxim Ag return (&TLS_client_method_data); 381*72c33676SMaxim Ag #else 382*72c33676SMaxim Ag return tls_legacy_client_method(); 383*72c33676SMaxim Ag #endif 384*72c33676SMaxim Ag } 385*72c33676SMaxim Ag 386*72c33676SMaxim Ag const SSL_METHOD * 387*72c33676SMaxim Ag tls_legacy_client_method(void) 388*72c33676SMaxim Ag { 389*72c33676SMaxim Ag return (&TLS_legacy_client_method_data); 390*72c33676SMaxim Ag } 391*72c33676SMaxim Ag 392*72c33676SMaxim Ag const SSL_METHOD * 393*72c33676SMaxim Ag TLSv1_client_method(void) 394*72c33676SMaxim Ag { 395*72c33676SMaxim Ag return (&TLSv1_client_method_data); 396*72c33676SMaxim Ag } 397*72c33676SMaxim Ag 398*72c33676SMaxim Ag const SSL_METHOD * 399*72c33676SMaxim Ag TLSv1_1_client_method(void) 400*72c33676SMaxim Ag { 401*72c33676SMaxim Ag return (&TLSv1_1_client_method_data); 402*72c33676SMaxim Ag } 403*72c33676SMaxim Ag 404*72c33676SMaxim Ag const SSL_METHOD * 405*72c33676SMaxim Ag TLSv1_2_client_method(void) 406*72c33676SMaxim Ag { 407*72c33676SMaxim Ag return (&TLSv1_2_client_method_data); 408*72c33676SMaxim Ag } 409*72c33676SMaxim Ag 410*72c33676SMaxim Ag static const SSL_METHOD *tls1_get_method(int ver); 411*72c33676SMaxim Ag 412*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLS_method_internal_data = { 413*72c33676SMaxim Ag .version = TLS1_2_VERSION, 414*72c33676SMaxim Ag .min_version = TLS1_VERSION, 415*72c33676SMaxim Ag .max_version = TLS1_2_VERSION, 416*72c33676SMaxim Ag .ssl_new = tls1_new, 417*72c33676SMaxim Ag .ssl_clear = tls1_clear, 418*72c33676SMaxim Ag .ssl_free = tls1_free, 419*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 420*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 421*72c33676SMaxim Ag .get_ssl_method = tls1_get_method, 422*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 423*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 424*72c33676SMaxim Ag .ssl_renegotiate = ssl_undefined_function, 425*72c33676SMaxim Ag .ssl_renegotiate_check = ssl_ok, 426*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 427*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 428*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 429*72c33676SMaxim Ag .ssl3_enc = &TLSv1_2_enc_data, 430*72c33676SMaxim Ag }; 431*72c33676SMaxim Ag 432*72c33676SMaxim Ag static const SSL_METHOD TLS_method_data = { 433*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 434*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 435*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 436*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 437*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 438*72c33676SMaxim Ag .internal = &TLS_method_internal_data, 439*72c33676SMaxim Ag }; 440*72c33676SMaxim Ag 441*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLSv1_method_internal_data = { 442*72c33676SMaxim Ag .version = TLS1_VERSION, 443*72c33676SMaxim Ag .min_version = TLS1_VERSION, 444*72c33676SMaxim Ag .max_version = TLS1_VERSION, 445*72c33676SMaxim Ag .ssl_new = tls1_new, 446*72c33676SMaxim Ag .ssl_clear = tls1_clear, 447*72c33676SMaxim Ag .ssl_free = tls1_free, 448*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 449*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 450*72c33676SMaxim Ag .get_ssl_method = tls1_get_method, 451*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 452*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 453*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 454*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 455*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 456*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 457*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 458*72c33676SMaxim Ag .ssl3_enc = &TLSv1_enc_data, 459*72c33676SMaxim Ag }; 460*72c33676SMaxim Ag 461*72c33676SMaxim Ag static const SSL_METHOD TLSv1_method_data = { 462*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 463*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 464*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 465*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 466*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 467*72c33676SMaxim Ag .internal = &TLSv1_method_internal_data, 468*72c33676SMaxim Ag }; 469*72c33676SMaxim Ag 470*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLSv1_1_method_internal_data = { 471*72c33676SMaxim Ag .version = TLS1_1_VERSION, 472*72c33676SMaxim Ag .min_version = TLS1_1_VERSION, 473*72c33676SMaxim Ag .max_version = TLS1_1_VERSION, 474*72c33676SMaxim Ag .ssl_new = tls1_new, 475*72c33676SMaxim Ag .ssl_clear = tls1_clear, 476*72c33676SMaxim Ag .ssl_free = tls1_free, 477*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 478*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 479*72c33676SMaxim Ag .get_ssl_method = tls1_get_method, 480*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 481*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 482*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 483*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 484*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 485*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 486*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 487*72c33676SMaxim Ag .ssl3_enc = &TLSv1_1_enc_data, 488*72c33676SMaxim Ag }; 489*72c33676SMaxim Ag 490*72c33676SMaxim Ag static const SSL_METHOD TLSv1_1_method_data = { 491*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 492*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 493*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 494*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 495*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 496*72c33676SMaxim Ag .internal = &TLSv1_1_method_internal_data, 497*72c33676SMaxim Ag }; 498*72c33676SMaxim Ag 499*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLSv1_2_method_internal_data = { 500*72c33676SMaxim Ag .version = TLS1_2_VERSION, 501*72c33676SMaxim Ag .min_version = TLS1_2_VERSION, 502*72c33676SMaxim Ag .max_version = TLS1_2_VERSION, 503*72c33676SMaxim Ag .ssl_new = tls1_new, 504*72c33676SMaxim Ag .ssl_clear = tls1_clear, 505*72c33676SMaxim Ag .ssl_free = tls1_free, 506*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 507*72c33676SMaxim Ag .ssl_connect = ssl3_connect, 508*72c33676SMaxim Ag .get_ssl_method = tls1_get_method, 509*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 510*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 511*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 512*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 513*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 514*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 515*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 516*72c33676SMaxim Ag .ssl3_enc = &TLSv1_2_enc_data, 517*72c33676SMaxim Ag }; 518*72c33676SMaxim Ag 519*72c33676SMaxim Ag static const SSL_METHOD TLSv1_2_method_data = { 520*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 521*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 522*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 523*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 524*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 525*72c33676SMaxim Ag .internal = &TLSv1_2_method_internal_data, 526*72c33676SMaxim Ag }; 527*72c33676SMaxim Ag 528*72c33676SMaxim Ag static const SSL_METHOD * 529*72c33676SMaxim Ag tls1_get_method(int ver) 530*72c33676SMaxim Ag { 531*72c33676SMaxim Ag if (ver == TLS1_2_VERSION) 532*72c33676SMaxim Ag return (TLSv1_2_method()); 533*72c33676SMaxim Ag if (ver == TLS1_1_VERSION) 534*72c33676SMaxim Ag return (TLSv1_1_method()); 535*72c33676SMaxim Ag if (ver == TLS1_VERSION) 536*72c33676SMaxim Ag return (TLSv1_method()); 537*72c33676SMaxim Ag return (NULL); 538*72c33676SMaxim Ag } 539*72c33676SMaxim Ag 540*72c33676SMaxim Ag const SSL_METHOD * 541*72c33676SMaxim Ag SSLv23_method(void) 542*72c33676SMaxim Ag { 543*72c33676SMaxim Ag return (TLS_method()); 544*72c33676SMaxim Ag } 545*72c33676SMaxim Ag 546*72c33676SMaxim Ag const SSL_METHOD * 547*72c33676SMaxim Ag TLS_method(void) 548*72c33676SMaxim Ag { 549*72c33676SMaxim Ag return &TLS_method_data; 550*72c33676SMaxim Ag } 551*72c33676SMaxim Ag 552*72c33676SMaxim Ag const SSL_METHOD * 553*72c33676SMaxim Ag TLSv1_method(void) 554*72c33676SMaxim Ag { 555*72c33676SMaxim Ag return (&TLSv1_method_data); 556*72c33676SMaxim Ag } 557*72c33676SMaxim Ag 558*72c33676SMaxim Ag const SSL_METHOD * 559*72c33676SMaxim Ag TLSv1_1_method(void) 560*72c33676SMaxim Ag { 561*72c33676SMaxim Ag return (&TLSv1_1_method_data); 562*72c33676SMaxim Ag } 563*72c33676SMaxim Ag 564*72c33676SMaxim Ag const SSL_METHOD * 565*72c33676SMaxim Ag TLSv1_2_method(void) 566*72c33676SMaxim Ag { 567*72c33676SMaxim Ag return (&TLSv1_2_method_data); 568*72c33676SMaxim Ag } 569*72c33676SMaxim Ag 570*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLS_server_method_internal_data = { 571*72c33676SMaxim Ag .version = TLS1_2_VERSION, 572*72c33676SMaxim Ag .min_version = TLS1_VERSION, 573*72c33676SMaxim Ag .max_version = TLS1_2_VERSION, 574*72c33676SMaxim Ag .ssl_new = tls1_new, 575*72c33676SMaxim Ag .ssl_clear = tls1_clear, 576*72c33676SMaxim Ag .ssl_free = tls1_free, 577*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 578*72c33676SMaxim Ag .ssl_connect = ssl_undefined_function, 579*72c33676SMaxim Ag .get_ssl_method = tls1_get_server_method, 580*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 581*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 582*72c33676SMaxim Ag .ssl_renegotiate = ssl_undefined_function, 583*72c33676SMaxim Ag .ssl_renegotiate_check = ssl_ok, 584*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 585*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 586*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 587*72c33676SMaxim Ag .ssl3_enc = &TLSv1_2_enc_data, 588*72c33676SMaxim Ag }; 589*72c33676SMaxim Ag 590*72c33676SMaxim Ag static const SSL_METHOD TLS_server_method_data = { 591*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 592*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 593*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 594*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 595*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 596*72c33676SMaxim Ag .internal = &TLS_server_method_internal_data, 597*72c33676SMaxim Ag }; 598*72c33676SMaxim Ag 599*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLSv1_server_method_internal_data = { 600*72c33676SMaxim Ag .version = TLS1_VERSION, 601*72c33676SMaxim Ag .min_version = TLS1_VERSION, 602*72c33676SMaxim Ag .max_version = TLS1_VERSION, 603*72c33676SMaxim Ag .ssl_new = tls1_new, 604*72c33676SMaxim Ag .ssl_clear = tls1_clear, 605*72c33676SMaxim Ag .ssl_free = tls1_free, 606*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 607*72c33676SMaxim Ag .ssl_connect = ssl_undefined_function, 608*72c33676SMaxim Ag .get_ssl_method = tls1_get_server_method, 609*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 610*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 611*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 612*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 613*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 614*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 615*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 616*72c33676SMaxim Ag .ssl3_enc = &TLSv1_enc_data, 617*72c33676SMaxim Ag }; 618*72c33676SMaxim Ag 619*72c33676SMaxim Ag static const SSL_METHOD TLSv1_server_method_data = { 620*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 621*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 622*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 623*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 624*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 625*72c33676SMaxim Ag .internal = &TLSv1_server_method_internal_data, 626*72c33676SMaxim Ag }; 627*72c33676SMaxim Ag 628*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLSv1_1_server_method_internal_data = { 629*72c33676SMaxim Ag .version = TLS1_1_VERSION, 630*72c33676SMaxim Ag .min_version = TLS1_1_VERSION, 631*72c33676SMaxim Ag .max_version = TLS1_1_VERSION, 632*72c33676SMaxim Ag .ssl_new = tls1_new, 633*72c33676SMaxim Ag .ssl_clear = tls1_clear, 634*72c33676SMaxim Ag .ssl_free = tls1_free, 635*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 636*72c33676SMaxim Ag .ssl_connect = ssl_undefined_function, 637*72c33676SMaxim Ag .get_ssl_method = tls1_get_server_method, 638*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 639*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 640*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 641*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 642*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 643*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 644*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 645*72c33676SMaxim Ag .ssl3_enc = &TLSv1_1_enc_data, 646*72c33676SMaxim Ag }; 647*72c33676SMaxim Ag 648*72c33676SMaxim Ag static const SSL_METHOD TLSv1_1_server_method_data = { 649*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 650*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 651*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 652*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 653*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 654*72c33676SMaxim Ag .internal = &TLSv1_1_server_method_internal_data, 655*72c33676SMaxim Ag }; 656*72c33676SMaxim Ag 657*72c33676SMaxim Ag static const SSL_METHOD_INTERNAL TLSv1_2_server_method_internal_data = { 658*72c33676SMaxim Ag .version = TLS1_2_VERSION, 659*72c33676SMaxim Ag .min_version = TLS1_2_VERSION, 660*72c33676SMaxim Ag .max_version = TLS1_2_VERSION, 661*72c33676SMaxim Ag .ssl_new = tls1_new, 662*72c33676SMaxim Ag .ssl_clear = tls1_clear, 663*72c33676SMaxim Ag .ssl_free = tls1_free, 664*72c33676SMaxim Ag .ssl_accept = ssl3_accept, 665*72c33676SMaxim Ag .ssl_connect = ssl_undefined_function, 666*72c33676SMaxim Ag .get_ssl_method = tls1_get_server_method, 667*72c33676SMaxim Ag .get_timeout = tls1_default_timeout, 668*72c33676SMaxim Ag .ssl_version = ssl_undefined_void_function, 669*72c33676SMaxim Ag .ssl_renegotiate = ssl3_renegotiate, 670*72c33676SMaxim Ag .ssl_renegotiate_check = ssl3_renegotiate_check, 671*72c33676SMaxim Ag .ssl_get_message = ssl3_get_message, 672*72c33676SMaxim Ag .ssl_read_bytes = ssl3_read_bytes, 673*72c33676SMaxim Ag .ssl_write_bytes = ssl3_write_bytes, 674*72c33676SMaxim Ag .ssl3_enc = &TLSv1_2_enc_data, 675*72c33676SMaxim Ag }; 676*72c33676SMaxim Ag 677*72c33676SMaxim Ag static const SSL_METHOD TLSv1_2_server_method_data = { 678*72c33676SMaxim Ag .ssl_dispatch_alert = ssl3_dispatch_alert, 679*72c33676SMaxim Ag .num_ciphers = ssl3_num_ciphers, 680*72c33676SMaxim Ag .get_cipher = ssl3_get_cipher, 681*72c33676SMaxim Ag .get_cipher_by_char = ssl3_get_cipher_by_char, 682*72c33676SMaxim Ag .put_cipher_by_char = ssl3_put_cipher_by_char, 683*72c33676SMaxim Ag .internal = &TLSv1_2_server_method_internal_data, 684*72c33676SMaxim Ag }; 685*72c33676SMaxim Ag 686*72c33676SMaxim Ag const SSL_METHOD * 687*72c33676SMaxim Ag tls1_get_server_method(int ver) 688*72c33676SMaxim Ag { 689*72c33676SMaxim Ag if (ver == TLS1_2_VERSION) 690*72c33676SMaxim Ag return (TLSv1_2_server_method()); 691*72c33676SMaxim Ag if (ver == TLS1_1_VERSION) 692*72c33676SMaxim Ag return (TLSv1_1_server_method()); 693*72c33676SMaxim Ag if (ver == TLS1_VERSION) 694*72c33676SMaxim Ag return (TLSv1_server_method()); 695*72c33676SMaxim Ag return (NULL); 696*72c33676SMaxim Ag } 697*72c33676SMaxim Ag 698*72c33676SMaxim Ag const SSL_METHOD * 699*72c33676SMaxim Ag SSLv23_server_method(void) 700*72c33676SMaxim Ag { 701*72c33676SMaxim Ag return (TLS_server_method()); 702*72c33676SMaxim Ag } 703*72c33676SMaxim Ag 704*72c33676SMaxim Ag const SSL_METHOD * 705*72c33676SMaxim Ag TLS_server_method(void) 706*72c33676SMaxim Ag { 707*72c33676SMaxim Ag return (&TLS_server_method_data); 708*72c33676SMaxim Ag } 709*72c33676SMaxim Ag 710*72c33676SMaxim Ag const SSL_METHOD * 711*72c33676SMaxim Ag TLSv1_server_method(void) 712*72c33676SMaxim Ag { 713*72c33676SMaxim Ag return (&TLSv1_server_method_data); 714*72c33676SMaxim Ag } 715*72c33676SMaxim Ag 716*72c33676SMaxim Ag const SSL_METHOD * 717*72c33676SMaxim Ag TLSv1_1_server_method(void) 718*72c33676SMaxim Ag { 719*72c33676SMaxim Ag return (&TLSv1_1_server_method_data); 720*72c33676SMaxim Ag } 721*72c33676SMaxim Ag 722*72c33676SMaxim Ag const SSL_METHOD * 723*72c33676SMaxim Ag TLSv1_2_server_method(void) 724*72c33676SMaxim Ag { 725*72c33676SMaxim Ag return (&TLSv1_2_server_method_data); 726*72c33676SMaxim Ag } 727