xref: /dragonfly/crypto/libressl/ssl/ssl_methods.c (revision de0e0e4d)
1*de0e0e4dSAntonio Huete Jimenez /* $OpenBSD: ssl_methods.c,v 1.28 2021/07/26 03:17:38 jsing Exp $ */
272c33676SMaxim Ag /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
372c33676SMaxim Ag  * All rights reserved.
472c33676SMaxim Ag  *
572c33676SMaxim Ag  * This package is an SSL implementation written
672c33676SMaxim Ag  * by Eric Young (eay@cryptsoft.com).
772c33676SMaxim Ag  * The implementation was written so as to conform with Netscapes SSL.
872c33676SMaxim Ag  *
972c33676SMaxim Ag  * This library is free for commercial and non-commercial use as long as
1072c33676SMaxim Ag  * the following conditions are aheared to.  The following conditions
1172c33676SMaxim Ag  * apply to all code found in this distribution, be it the RC4, RSA,
1272c33676SMaxim Ag  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
1372c33676SMaxim Ag  * included with this distribution is covered by the same copyright terms
1472c33676SMaxim Ag  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
1572c33676SMaxim Ag  *
1672c33676SMaxim Ag  * Copyright remains Eric Young's, and as such any Copyright notices in
1772c33676SMaxim Ag  * the code are not to be removed.
1872c33676SMaxim Ag  * If this package is used in a product, Eric Young should be given attribution
1972c33676SMaxim Ag  * as the author of the parts of the library used.
2072c33676SMaxim Ag  * This can be in the form of a textual message at program startup or
2172c33676SMaxim Ag  * in documentation (online or textual) provided with the package.
2272c33676SMaxim Ag  *
2372c33676SMaxim Ag  * Redistribution and use in source and binary forms, with or without
2472c33676SMaxim Ag  * modification, are permitted provided that the following conditions
2572c33676SMaxim Ag  * are met:
2672c33676SMaxim Ag  * 1. Redistributions of source code must retain the copyright
2772c33676SMaxim Ag  *    notice, this list of conditions and the following disclaimer.
2872c33676SMaxim Ag  * 2. Redistributions in binary form must reproduce the above copyright
2972c33676SMaxim Ag  *    notice, this list of conditions and the following disclaimer in the
3072c33676SMaxim Ag  *    documentation and/or other materials provided with the distribution.
3172c33676SMaxim Ag  * 3. All advertising materials mentioning features or use of this software
3272c33676SMaxim Ag  *    must display the following acknowledgement:
3372c33676SMaxim Ag  *    "This product includes cryptographic software written by
3472c33676SMaxim Ag  *     Eric Young (eay@cryptsoft.com)"
3572c33676SMaxim Ag  *    The word 'cryptographic' can be left out if the rouines from the library
3672c33676SMaxim Ag  *    being used are not cryptographic related :-).
3772c33676SMaxim Ag  * 4. If you include any Windows specific code (or a derivative thereof) from
3872c33676SMaxim Ag  *    the apps directory (application code) you must include an acknowledgement:
3972c33676SMaxim Ag  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
4072c33676SMaxim Ag  *
4172c33676SMaxim Ag  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
4272c33676SMaxim Ag  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4372c33676SMaxim Ag  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4472c33676SMaxim Ag  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
4572c33676SMaxim Ag  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
4672c33676SMaxim Ag  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
4772c33676SMaxim Ag  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4872c33676SMaxim Ag  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
4972c33676SMaxim Ag  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
5072c33676SMaxim Ag  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
5172c33676SMaxim Ag  * SUCH DAMAGE.
5272c33676SMaxim Ag  *
5372c33676SMaxim Ag  * The licence and distribution terms for any publically available version or
5472c33676SMaxim Ag  * derivative of this code cannot be changed.  i.e. this code cannot simply be
5572c33676SMaxim Ag  * copied and put under another distribution licence
5672c33676SMaxim Ag  * [including the GNU Public Licence.]
5772c33676SMaxim Ag  */
5872c33676SMaxim Ag 
59*de0e0e4dSAntonio Huete Jimenez #include "dtls_locl.h"
6072c33676SMaxim Ag #include "ssl_locl.h"
6172c33676SMaxim Ag #include "tls13_internal.h"
6272c33676SMaxim Ag 
63*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD DTLS_method_data = {
64*de0e0e4dSAntonio Huete Jimenez 	.dtls = 1,
65*de0e0e4dSAntonio Huete Jimenez 	.server = 1,
66*de0e0e4dSAntonio Huete Jimenez 	.version = DTLS1_2_VERSION,
67*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_1_VERSION,
68*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_2_VERSION,
69*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = dtls1_new,
70*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = dtls1_clear,
71*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = dtls1_free,
72*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = ssl3_accept,
73*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = ssl3_connect,
74*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = ssl3_shutdown,
75*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl3_renegotiate,
76*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl3_renegotiate_check,
77*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = ssl3_pending,
78*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = dtls1_read_bytes,
79*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = dtls1_write_app_data_bytes,
80*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = dtls1_get_cipher,
81*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_2_ENC_FLAGS,
82*de0e0e4dSAntonio Huete Jimenez };
83*de0e0e4dSAntonio Huete Jimenez 
84*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD DTLS_client_method_data = {
85*de0e0e4dSAntonio Huete Jimenez 	.dtls = 1,
86*de0e0e4dSAntonio Huete Jimenez 	.server = 0,
87*de0e0e4dSAntonio Huete Jimenez 	.version = DTLS1_2_VERSION,
88*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_1_VERSION,
89*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_2_VERSION,
9072c33676SMaxim Ag 	.ssl_new = dtls1_new,
9172c33676SMaxim Ag 	.ssl_clear = dtls1_clear,
9272c33676SMaxim Ag 	.ssl_free = dtls1_free,
9372c33676SMaxim Ag 	.ssl_accept = ssl_undefined_function,
9472c33676SMaxim Ag 	.ssl_connect = ssl3_connect,
95cca6fc52SDaniel Fojt 	.ssl_shutdown = ssl3_shutdown,
9672c33676SMaxim Ag 	.ssl_renegotiate = ssl3_renegotiate,
9772c33676SMaxim Ag 	.ssl_renegotiate_check = ssl3_renegotiate_check,
98cca6fc52SDaniel Fojt 	.ssl_pending = ssl3_pending,
9972c33676SMaxim Ag 	.ssl_read_bytes = dtls1_read_bytes,
10072c33676SMaxim Ag 	.ssl_write_bytes = dtls1_write_app_data_bytes,
101*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = dtls1_get_cipher,
102*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_2_ENC_FLAGS,
103*de0e0e4dSAntonio Huete Jimenez };
104*de0e0e4dSAntonio Huete Jimenez 
105*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD DTLSv1_method_data = {
106*de0e0e4dSAntonio Huete Jimenez 	.dtls = 1,
107*de0e0e4dSAntonio Huete Jimenez 	.server = 1,
108*de0e0e4dSAntonio Huete Jimenez 	.version = DTLS1_VERSION,
109*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_1_VERSION,
110*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_1_VERSION,
111*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = dtls1_new,
112*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = dtls1_clear,
113*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = dtls1_free,
114*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = ssl3_accept,
115*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = ssl3_connect,
116*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = ssl3_shutdown,
117*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl3_renegotiate,
118*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl3_renegotiate_check,
119*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = ssl3_pending,
120*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = dtls1_read_bytes,
121*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = dtls1_write_app_data_bytes,
122*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = dtls1_get_cipher,
123*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_1_ENC_FLAGS,
12472c33676SMaxim Ag };
12572c33676SMaxim Ag 
12672c33676SMaxim Ag static const SSL_METHOD DTLSv1_client_method_data = {
127*de0e0e4dSAntonio Huete Jimenez 	.dtls = 1,
128*de0e0e4dSAntonio Huete Jimenez 	.server = 0,
129*de0e0e4dSAntonio Huete Jimenez 	.version = DTLS1_VERSION,
130*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_1_VERSION,
131*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_1_VERSION,
132*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = dtls1_new,
133*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = dtls1_clear,
134*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = dtls1_free,
135*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = ssl_undefined_function,
136*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = ssl3_connect,
137*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = ssl3_shutdown,
138*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl3_renegotiate,
139*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl3_renegotiate_check,
140*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = ssl3_pending,
141*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = dtls1_read_bytes,
142*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = dtls1_write_app_data_bytes,
14372c33676SMaxim Ag 	.get_cipher = dtls1_get_cipher,
144*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_1_ENC_FLAGS,
145*de0e0e4dSAntonio Huete Jimenez };
146*de0e0e4dSAntonio Huete Jimenez 
147*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD DTLSv1_2_method_data = {
148*de0e0e4dSAntonio Huete Jimenez 	.dtls = 1,
149*de0e0e4dSAntonio Huete Jimenez 	.server = 1,
150*de0e0e4dSAntonio Huete Jimenez 	.version = DTLS1_2_VERSION,
151*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_2_VERSION,
152*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_2_VERSION,
153*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = dtls1_new,
154*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = dtls1_clear,
155*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = dtls1_free,
156*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = ssl3_accept,
157*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = ssl3_connect,
158*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = ssl3_shutdown,
159*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl3_renegotiate,
160*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl3_renegotiate_check,
161*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = ssl3_pending,
162*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = dtls1_read_bytes,
163*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = dtls1_write_app_data_bytes,
164*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = dtls1_get_cipher,
165*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_2_ENC_FLAGS,
166*de0e0e4dSAntonio Huete Jimenez };
167*de0e0e4dSAntonio Huete Jimenez 
168*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD DTLSv1_2_client_method_data = {
169*de0e0e4dSAntonio Huete Jimenez 	.dtls = 1,
170*de0e0e4dSAntonio Huete Jimenez 	.server = 0,
171*de0e0e4dSAntonio Huete Jimenez 	.version = DTLS1_2_VERSION,
172*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_2_VERSION,
173*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_2_VERSION,
174*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = dtls1_new,
175*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = dtls1_clear,
176*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = dtls1_free,
177*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = ssl_undefined_function,
178*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = ssl3_connect,
179*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = ssl3_shutdown,
180*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl3_renegotiate,
181*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl3_renegotiate_check,
182*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = ssl3_pending,
183*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = dtls1_read_bytes,
184*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = dtls1_write_app_data_bytes,
185*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = dtls1_get_cipher,
186*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_2_ENC_FLAGS,
18772c33676SMaxim Ag };
18872c33676SMaxim Ag 
18972c33676SMaxim Ag const SSL_METHOD *
DTLSv1_client_method(void)19072c33676SMaxim Ag DTLSv1_client_method(void)
19172c33676SMaxim Ag {
19272c33676SMaxim Ag 	return &DTLSv1_client_method_data;
19372c33676SMaxim Ag }
19472c33676SMaxim Ag 
19572c33676SMaxim Ag const SSL_METHOD *
DTLSv1_method(void)19672c33676SMaxim Ag DTLSv1_method(void)
19772c33676SMaxim Ag {
19872c33676SMaxim Ag 	return &DTLSv1_method_data;
19972c33676SMaxim Ag }
20072c33676SMaxim Ag 
20172c33676SMaxim Ag const SSL_METHOD *
DTLSv1_server_method(void)20272c33676SMaxim Ag DTLSv1_server_method(void)
20372c33676SMaxim Ag {
204*de0e0e4dSAntonio Huete Jimenez 	return &DTLSv1_method_data;
205*de0e0e4dSAntonio Huete Jimenez }
206*de0e0e4dSAntonio Huete Jimenez 
207*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
DTLSv1_2_client_method(void)208*de0e0e4dSAntonio Huete Jimenez DTLSv1_2_client_method(void)
209*de0e0e4dSAntonio Huete Jimenez {
210*de0e0e4dSAntonio Huete Jimenez 	return &DTLSv1_2_client_method_data;
211*de0e0e4dSAntonio Huete Jimenez }
212*de0e0e4dSAntonio Huete Jimenez 
213*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
DTLSv1_2_method(void)214*de0e0e4dSAntonio Huete Jimenez DTLSv1_2_method(void)
215*de0e0e4dSAntonio Huete Jimenez {
216*de0e0e4dSAntonio Huete Jimenez 	return &DTLSv1_2_method_data;
217*de0e0e4dSAntonio Huete Jimenez }
218*de0e0e4dSAntonio Huete Jimenez 
219*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
DTLSv1_2_server_method(void)220*de0e0e4dSAntonio Huete Jimenez DTLSv1_2_server_method(void)
221*de0e0e4dSAntonio Huete Jimenez {
222*de0e0e4dSAntonio Huete Jimenez 	return &DTLSv1_2_method_data;
223*de0e0e4dSAntonio Huete Jimenez }
224*de0e0e4dSAntonio Huete Jimenez 
225*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
DTLS_client_method(void)226*de0e0e4dSAntonio Huete Jimenez DTLS_client_method(void)
227*de0e0e4dSAntonio Huete Jimenez {
228*de0e0e4dSAntonio Huete Jimenez 	return &DTLS_client_method_data;
229*de0e0e4dSAntonio Huete Jimenez }
230*de0e0e4dSAntonio Huete Jimenez 
231*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
DTLS_method(void)232*de0e0e4dSAntonio Huete Jimenez DTLS_method(void)
233*de0e0e4dSAntonio Huete Jimenez {
234*de0e0e4dSAntonio Huete Jimenez 	return &DTLS_method_data;
23572c33676SMaxim Ag }
23672c33676SMaxim Ag 
23772c33676SMaxim Ag const SSL_METHOD *
DTLS_server_method(void)23872c33676SMaxim Ag DTLS_server_method(void)
23972c33676SMaxim Ag {
240*de0e0e4dSAntonio Huete Jimenez 	return &DTLS_method_data;
24172c33676SMaxim Ag }
24272c33676SMaxim Ag 
2438edacedfSDaniel Fojt #if defined(LIBRESSL_HAS_TLS1_3_CLIENT) && defined(LIBRESSL_HAS_TLS1_3_SERVER)
244*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD TLS_method_data = {
245*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
246*de0e0e4dSAntonio Huete Jimenez 	.server = 1,
2478edacedfSDaniel Fojt 	.version = TLS1_3_VERSION,
248*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_VERSION,
249*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_3_VERSION,
25072c33676SMaxim Ag 	.ssl_new = tls1_new,
25172c33676SMaxim Ag 	.ssl_clear = tls1_clear,
25272c33676SMaxim Ag 	.ssl_free = tls1_free,
2538edacedfSDaniel Fojt 	.ssl_accept = tls13_legacy_accept,
2548edacedfSDaniel Fojt 	.ssl_connect = tls13_legacy_connect,
2558edacedfSDaniel Fojt 	.ssl_shutdown = tls13_legacy_shutdown,
25672c33676SMaxim Ag 	.ssl_renegotiate = ssl_undefined_function,
25772c33676SMaxim Ag 	.ssl_renegotiate_check = ssl_ok,
2588edacedfSDaniel Fojt 	.ssl_pending = tls13_legacy_pending,
2598edacedfSDaniel Fojt 	.ssl_read_bytes = tls13_legacy_read_bytes,
2608edacedfSDaniel Fojt 	.ssl_write_bytes = tls13_legacy_write_bytes,
26172c33676SMaxim Ag 	.get_cipher = ssl3_get_cipher,
262*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_3_ENC_FLAGS,
26372c33676SMaxim Ag };
2648edacedfSDaniel Fojt #endif
2658edacedfSDaniel Fojt 
266*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD TLS_legacy_method_data = {
267*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
268*de0e0e4dSAntonio Huete Jimenez 	.server = 1,
2698edacedfSDaniel Fojt 	.version = TLS1_2_VERSION,
270*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_VERSION,
271*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_2_VERSION,
2728edacedfSDaniel Fojt 	.ssl_new = tls1_new,
2738edacedfSDaniel Fojt 	.ssl_clear = tls1_clear,
2748edacedfSDaniel Fojt 	.ssl_free = tls1_free,
2758edacedfSDaniel Fojt 	.ssl_accept = ssl3_accept,
2768edacedfSDaniel Fojt 	.ssl_connect = ssl3_connect,
2778edacedfSDaniel Fojt 	.ssl_shutdown = ssl3_shutdown,
2788edacedfSDaniel Fojt 	.ssl_renegotiate = ssl_undefined_function,
2798edacedfSDaniel Fojt 	.ssl_renegotiate_check = ssl_ok,
2808edacedfSDaniel Fojt 	.ssl_pending = ssl3_pending,
2818edacedfSDaniel Fojt 	.ssl_read_bytes = ssl3_read_bytes,
2828edacedfSDaniel Fojt 	.ssl_write_bytes = ssl3_write_bytes,
2838edacedfSDaniel Fojt 	.get_cipher = ssl3_get_cipher,
284*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_2_ENC_FLAGS,
2858edacedfSDaniel Fojt };
28672c33676SMaxim Ag 
287*de0e0e4dSAntonio Huete Jimenez #if defined(LIBRESSL_HAS_TLS1_3_CLIENT)
288*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD TLS_client_method_data = {
289*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
290*de0e0e4dSAntonio Huete Jimenez 	.server = 0,
291*de0e0e4dSAntonio Huete Jimenez 	.version = TLS1_3_VERSION,
292*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_VERSION,
293*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_3_VERSION,
294*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = tls1_new,
295*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = tls1_clear,
296*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = tls1_free,
297*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = tls13_legacy_accept,
298*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = tls13_legacy_connect,
299*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = tls13_legacy_shutdown,
300*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl_undefined_function,
301*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl_ok,
302*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = tls13_legacy_pending,
303*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = tls13_legacy_read_bytes,
304*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = tls13_legacy_write_bytes,
305*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = ssl3_get_cipher,
306*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_3_ENC_FLAGS,
307*de0e0e4dSAntonio Huete Jimenez };
308*de0e0e4dSAntonio Huete Jimenez 
309*de0e0e4dSAntonio Huete Jimenez #else
310*de0e0e4dSAntonio Huete Jimenez 
311*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD TLS_legacy_client_method_data = {
312*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
313*de0e0e4dSAntonio Huete Jimenez 	.server = 0,
314*de0e0e4dSAntonio Huete Jimenez 	.version = TLS1_2_VERSION,
315*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_VERSION,
316*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_2_VERSION,
31772c33676SMaxim Ag 	.ssl_new = tls1_new,
31872c33676SMaxim Ag 	.ssl_clear = tls1_clear,
31972c33676SMaxim Ag 	.ssl_free = tls1_free,
32072c33676SMaxim Ag 	.ssl_accept = ssl3_accept,
32172c33676SMaxim Ag 	.ssl_connect = ssl3_connect,
322cca6fc52SDaniel Fojt 	.ssl_shutdown = ssl3_shutdown,
323*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl_undefined_function,
324*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl_ok,
325cca6fc52SDaniel Fojt 	.ssl_pending = ssl3_pending,
32672c33676SMaxim Ag 	.ssl_read_bytes = ssl3_read_bytes,
32772c33676SMaxim Ag 	.ssl_write_bytes = ssl3_write_bytes,
328*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = ssl3_get_cipher,
329*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_2_ENC_FLAGS,
33072c33676SMaxim Ag };
331*de0e0e4dSAntonio Huete Jimenez #endif
33272c33676SMaxim Ag 
33372c33676SMaxim Ag static const SSL_METHOD TLSv1_method_data = {
334*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
335*de0e0e4dSAntonio Huete Jimenez 	.server = 1,
336*de0e0e4dSAntonio Huete Jimenez 	.version = TLS1_VERSION,
337*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_VERSION,
338*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_VERSION,
33972c33676SMaxim Ag 	.ssl_new = tls1_new,
34072c33676SMaxim Ag 	.ssl_clear = tls1_clear,
34172c33676SMaxim Ag 	.ssl_free = tls1_free,
34272c33676SMaxim Ag 	.ssl_accept = ssl3_accept,
34372c33676SMaxim Ag 	.ssl_connect = ssl3_connect,
344cca6fc52SDaniel Fojt 	.ssl_shutdown = ssl3_shutdown,
34572c33676SMaxim Ag 	.ssl_renegotiate = ssl3_renegotiate,
34672c33676SMaxim Ag 	.ssl_renegotiate_check = ssl3_renegotiate_check,
347cca6fc52SDaniel Fojt 	.ssl_pending = ssl3_pending,
34872c33676SMaxim Ag 	.ssl_read_bytes = ssl3_read_bytes,
34972c33676SMaxim Ag 	.ssl_write_bytes = ssl3_write_bytes,
350*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = ssl3_get_cipher,
351*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_ENC_FLAGS,
352*de0e0e4dSAntonio Huete Jimenez };
353*de0e0e4dSAntonio Huete Jimenez 
354*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD TLSv1_client_method_data = {
355*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
356*de0e0e4dSAntonio Huete Jimenez 	.server = 0,
357*de0e0e4dSAntonio Huete Jimenez 	.version = TLS1_VERSION,
358*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_VERSION,
359*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_VERSION,
360*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = tls1_new,
361*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = tls1_clear,
362*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = tls1_free,
363*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = ssl_undefined_function,
364*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = ssl3_connect,
365*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = ssl3_shutdown,
366*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl3_renegotiate,
367*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl3_renegotiate_check,
368*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = ssl3_pending,
369*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = ssl3_read_bytes,
370*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = ssl3_write_bytes,
371*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = ssl3_get_cipher,
372*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_ENC_FLAGS,
37372c33676SMaxim Ag };
37472c33676SMaxim Ag 
37572c33676SMaxim Ag static const SSL_METHOD TLSv1_1_method_data = {
376*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
377*de0e0e4dSAntonio Huete Jimenez 	.server = 1,
378*de0e0e4dSAntonio Huete Jimenez 	.version = TLS1_1_VERSION,
379*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_1_VERSION,
380*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_1_VERSION,
38172c33676SMaxim Ag 	.ssl_new = tls1_new,
38272c33676SMaxim Ag 	.ssl_clear = tls1_clear,
38372c33676SMaxim Ag 	.ssl_free = tls1_free,
38472c33676SMaxim Ag 	.ssl_accept = ssl3_accept,
38572c33676SMaxim Ag 	.ssl_connect = ssl3_connect,
386cca6fc52SDaniel Fojt 	.ssl_shutdown = ssl3_shutdown,
38772c33676SMaxim Ag 	.ssl_renegotiate = ssl3_renegotiate,
38872c33676SMaxim Ag 	.ssl_renegotiate_check = ssl3_renegotiate_check,
389cca6fc52SDaniel Fojt 	.ssl_pending = ssl3_pending,
39072c33676SMaxim Ag 	.ssl_read_bytes = ssl3_read_bytes,
39172c33676SMaxim Ag 	.ssl_write_bytes = ssl3_write_bytes,
392*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = ssl3_get_cipher,
393*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_1_ENC_FLAGS,
394*de0e0e4dSAntonio Huete Jimenez };
395*de0e0e4dSAntonio Huete Jimenez 
396*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD TLSv1_1_client_method_data = {
397*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
398*de0e0e4dSAntonio Huete Jimenez 	.server = 0,
399*de0e0e4dSAntonio Huete Jimenez 	.version = TLS1_1_VERSION,
400*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_1_VERSION,
401*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_1_VERSION,
402*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = tls1_new,
403*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = tls1_clear,
404*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = tls1_free,
405*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = ssl_undefined_function,
406*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = ssl3_connect,
407*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = ssl3_shutdown,
408*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl3_renegotiate,
409*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl3_renegotiate_check,
410*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = ssl3_pending,
411*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = ssl3_read_bytes,
412*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = ssl3_write_bytes,
413*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = ssl3_get_cipher,
414*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_1_ENC_FLAGS,
41572c33676SMaxim Ag };
41672c33676SMaxim Ag 
41772c33676SMaxim Ag static const SSL_METHOD TLSv1_2_method_data = {
418*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
419*de0e0e4dSAntonio Huete Jimenez 	.server = 1,
420*de0e0e4dSAntonio Huete Jimenez 	.version = TLS1_2_VERSION,
421*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_2_VERSION,
422*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_2_VERSION,
423*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = tls1_new,
424*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = tls1_clear,
425*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = tls1_free,
426*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = ssl3_accept,
427*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = ssl3_connect,
428*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = ssl3_shutdown,
429*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl3_renegotiate,
430*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl3_renegotiate_check,
431*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = ssl3_pending,
432*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = ssl3_read_bytes,
433*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = ssl3_write_bytes,
43472c33676SMaxim Ag 	.get_cipher = ssl3_get_cipher,
435*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_2_ENC_FLAGS,
436*de0e0e4dSAntonio Huete Jimenez };
437*de0e0e4dSAntonio Huete Jimenez 
438*de0e0e4dSAntonio Huete Jimenez static const SSL_METHOD TLSv1_2_client_method_data = {
439*de0e0e4dSAntonio Huete Jimenez 	.dtls = 0,
440*de0e0e4dSAntonio Huete Jimenez 	.server = 0,
441*de0e0e4dSAntonio Huete Jimenez 	.version = TLS1_2_VERSION,
442*de0e0e4dSAntonio Huete Jimenez 	.min_tls_version = TLS1_2_VERSION,
443*de0e0e4dSAntonio Huete Jimenez 	.max_tls_version = TLS1_2_VERSION,
444*de0e0e4dSAntonio Huete Jimenez 	.ssl_new = tls1_new,
445*de0e0e4dSAntonio Huete Jimenez 	.ssl_clear = tls1_clear,
446*de0e0e4dSAntonio Huete Jimenez 	.ssl_free = tls1_free,
447*de0e0e4dSAntonio Huete Jimenez 	.ssl_accept = ssl_undefined_function,
448*de0e0e4dSAntonio Huete Jimenez 	.ssl_connect = ssl3_connect,
449*de0e0e4dSAntonio Huete Jimenez 	.ssl_shutdown = ssl3_shutdown,
450*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate = ssl3_renegotiate,
451*de0e0e4dSAntonio Huete Jimenez 	.ssl_renegotiate_check = ssl3_renegotiate_check,
452*de0e0e4dSAntonio Huete Jimenez 	.ssl_pending = ssl3_pending,
453*de0e0e4dSAntonio Huete Jimenez 	.ssl_read_bytes = ssl3_read_bytes,
454*de0e0e4dSAntonio Huete Jimenez 	.ssl_write_bytes = ssl3_write_bytes,
455*de0e0e4dSAntonio Huete Jimenez 	.get_cipher = ssl3_get_cipher,
456*de0e0e4dSAntonio Huete Jimenez 	.enc_flags = TLSV1_2_ENC_FLAGS,
45772c33676SMaxim Ag };
45872c33676SMaxim Ag 
45972c33676SMaxim Ag const SSL_METHOD *
TLS_client_method(void)460*de0e0e4dSAntonio Huete Jimenez TLS_client_method(void)
46172c33676SMaxim Ag {
462*de0e0e4dSAntonio Huete Jimenez #if defined(LIBRESSL_HAS_TLS1_3_CLIENT)
463*de0e0e4dSAntonio Huete Jimenez 	return (&TLS_client_method_data);
464*de0e0e4dSAntonio Huete Jimenez #else
465*de0e0e4dSAntonio Huete Jimenez 	return (&TLS_legacy_client_method_data);
466*de0e0e4dSAntonio Huete Jimenez #endif
46772c33676SMaxim Ag }
46872c33676SMaxim Ag 
46972c33676SMaxim Ag const SSL_METHOD *
TLS_method(void)47072c33676SMaxim Ag TLS_method(void)
47172c33676SMaxim Ag {
4728edacedfSDaniel Fojt #if defined(LIBRESSL_HAS_TLS1_3_CLIENT) && defined(LIBRESSL_HAS_TLS1_3_SERVER)
4738edacedfSDaniel Fojt 	return (&TLS_method_data);
4748edacedfSDaniel Fojt #else
4758edacedfSDaniel Fojt 	return tls_legacy_method();
4768edacedfSDaniel Fojt #endif
4778edacedfSDaniel Fojt }
4788edacedfSDaniel Fojt 
4798edacedfSDaniel Fojt const SSL_METHOD *
TLS_server_method(void)480*de0e0e4dSAntonio Huete Jimenez TLS_server_method(void)
481*de0e0e4dSAntonio Huete Jimenez {
482*de0e0e4dSAntonio Huete Jimenez 	return TLS_method();
483*de0e0e4dSAntonio Huete Jimenez }
484*de0e0e4dSAntonio Huete Jimenez 
485*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
tls_legacy_method(void)4868edacedfSDaniel Fojt tls_legacy_method(void)
4878edacedfSDaniel Fojt {
4888edacedfSDaniel Fojt 	return (&TLS_legacy_method_data);
48972c33676SMaxim Ag }
49072c33676SMaxim Ag 
49172c33676SMaxim Ag const SSL_METHOD *
SSLv23_client_method(void)492*de0e0e4dSAntonio Huete Jimenez SSLv23_client_method(void)
493*de0e0e4dSAntonio Huete Jimenez {
494*de0e0e4dSAntonio Huete Jimenez 	return TLS_client_method();
495*de0e0e4dSAntonio Huete Jimenez }
496*de0e0e4dSAntonio Huete Jimenez 
497*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
SSLv23_method(void)498*de0e0e4dSAntonio Huete Jimenez SSLv23_method(void)
499*de0e0e4dSAntonio Huete Jimenez {
500*de0e0e4dSAntonio Huete Jimenez 	return TLS_method();
501*de0e0e4dSAntonio Huete Jimenez }
502*de0e0e4dSAntonio Huete Jimenez 
503*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
SSLv23_server_method(void)504*de0e0e4dSAntonio Huete Jimenez SSLv23_server_method(void)
505*de0e0e4dSAntonio Huete Jimenez {
506*de0e0e4dSAntonio Huete Jimenez 	return TLS_method();
507*de0e0e4dSAntonio Huete Jimenez }
508*de0e0e4dSAntonio Huete Jimenez 
509*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
TLSv1_client_method(void)510*de0e0e4dSAntonio Huete Jimenez TLSv1_client_method(void)
511*de0e0e4dSAntonio Huete Jimenez {
512*de0e0e4dSAntonio Huete Jimenez 	return (&TLSv1_client_method_data);
513*de0e0e4dSAntonio Huete Jimenez }
514*de0e0e4dSAntonio Huete Jimenez 
515*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
TLSv1_method(void)51672c33676SMaxim Ag TLSv1_method(void)
51772c33676SMaxim Ag {
51872c33676SMaxim Ag 	return (&TLSv1_method_data);
51972c33676SMaxim Ag }
52072c33676SMaxim Ag 
52172c33676SMaxim Ag const SSL_METHOD *
TLSv1_server_method(void)522*de0e0e4dSAntonio Huete Jimenez TLSv1_server_method(void)
523*de0e0e4dSAntonio Huete Jimenez {
524*de0e0e4dSAntonio Huete Jimenez 	return (&TLSv1_method_data);
525*de0e0e4dSAntonio Huete Jimenez }
526*de0e0e4dSAntonio Huete Jimenez 
527*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
TLSv1_1_client_method(void)528*de0e0e4dSAntonio Huete Jimenez TLSv1_1_client_method(void)
529*de0e0e4dSAntonio Huete Jimenez {
530*de0e0e4dSAntonio Huete Jimenez 	return (&TLSv1_1_client_method_data);
531*de0e0e4dSAntonio Huete Jimenez }
532*de0e0e4dSAntonio Huete Jimenez 
533*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
TLSv1_1_method(void)53472c33676SMaxim Ag TLSv1_1_method(void)
53572c33676SMaxim Ag {
53672c33676SMaxim Ag 	return (&TLSv1_1_method_data);
53772c33676SMaxim Ag }
53872c33676SMaxim Ag 
53972c33676SMaxim Ag const SSL_METHOD *
TLSv1_1_server_method(void)540*de0e0e4dSAntonio Huete Jimenez TLSv1_1_server_method(void)
541*de0e0e4dSAntonio Huete Jimenez {
542*de0e0e4dSAntonio Huete Jimenez 	return (&TLSv1_1_method_data);
543*de0e0e4dSAntonio Huete Jimenez }
544*de0e0e4dSAntonio Huete Jimenez 
545*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
TLSv1_2_client_method(void)546*de0e0e4dSAntonio Huete Jimenez TLSv1_2_client_method(void)
547*de0e0e4dSAntonio Huete Jimenez {
548*de0e0e4dSAntonio Huete Jimenez 	return (&TLSv1_2_client_method_data);
549*de0e0e4dSAntonio Huete Jimenez }
550*de0e0e4dSAntonio Huete Jimenez 
551*de0e0e4dSAntonio Huete Jimenez const SSL_METHOD *
TLSv1_2_method(void)55272c33676SMaxim Ag TLSv1_2_method(void)
55372c33676SMaxim Ag {
55472c33676SMaxim Ag 	return (&TLSv1_2_method_data);
55572c33676SMaxim Ag }
55672c33676SMaxim Ag 
55772c33676SMaxim Ag const SSL_METHOD *
TLSv1_2_server_method(void)55872c33676SMaxim Ag TLSv1_2_server_method(void)
55972c33676SMaxim Ag {
560*de0e0e4dSAntonio Huete Jimenez 	return (&TLSv1_2_method_data);
56172c33676SMaxim Ag }
5628edacedfSDaniel Fojt 
5638edacedfSDaniel Fojt const SSL_METHOD *
ssl_get_method(uint16_t version)564*de0e0e4dSAntonio Huete Jimenez ssl_get_method(uint16_t version)
5658edacedfSDaniel Fojt {
5668edacedfSDaniel Fojt 	if (version == TLS1_3_VERSION)
567*de0e0e4dSAntonio Huete Jimenez 		return (TLS_method());
5688edacedfSDaniel Fojt 	if (version == TLS1_2_VERSION)
569*de0e0e4dSAntonio Huete Jimenez 		return (TLSv1_2_method());
5708edacedfSDaniel Fojt 	if (version == TLS1_1_VERSION)
571*de0e0e4dSAntonio Huete Jimenez 		return (TLSv1_1_method());
5728edacedfSDaniel Fojt 	if (version == TLS1_VERSION)
573*de0e0e4dSAntonio Huete Jimenez 		return (TLSv1_method());
5748edacedfSDaniel Fojt 	if (version == DTLS1_VERSION)
575*de0e0e4dSAntonio Huete Jimenez 		return (DTLSv1_method());
576*de0e0e4dSAntonio Huete Jimenez 	if (version == DTLS1_2_VERSION)
577*de0e0e4dSAntonio Huete Jimenez 		return (DTLSv1_2_method());
5788edacedfSDaniel Fojt 
5798edacedfSDaniel Fojt 	return (NULL);
5808edacedfSDaniel Fojt }
581