xref: /dflybsd-src/crypto/libressl/ssl/ssl_methods.c (revision 72c3367655e64985522b7a48ddfab613e869dc68)
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