xref: /openbsd-src/lib/libssl/ssl_methods.c (revision ae0a25824ab36826911195649772780808244ba2)
1*ae0a2582Sjsing /* $OpenBSD: ssl_methods.c,v 1.32 2024/07/23 14:40:54 jsing Exp $ */
29158af98Sjsing /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
39158af98Sjsing  * All rights reserved.
49158af98Sjsing  *
59158af98Sjsing  * This package is an SSL implementation written
69158af98Sjsing  * by Eric Young (eay@cryptsoft.com).
79158af98Sjsing  * The implementation was written so as to conform with Netscapes SSL.
89158af98Sjsing  *
99158af98Sjsing  * This library is free for commercial and non-commercial use as long as
109158af98Sjsing  * the following conditions are aheared to.  The following conditions
119158af98Sjsing  * apply to all code found in this distribution, be it the RC4, RSA,
129158af98Sjsing  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
139158af98Sjsing  * included with this distribution is covered by the same copyright terms
149158af98Sjsing  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
159158af98Sjsing  *
169158af98Sjsing  * Copyright remains Eric Young's, and as such any Copyright notices in
179158af98Sjsing  * the code are not to be removed.
189158af98Sjsing  * If this package is used in a product, Eric Young should be given attribution
199158af98Sjsing  * as the author of the parts of the library used.
209158af98Sjsing  * This can be in the form of a textual message at program startup or
219158af98Sjsing  * in documentation (online or textual) provided with the package.
229158af98Sjsing  *
239158af98Sjsing  * Redistribution and use in source and binary forms, with or without
249158af98Sjsing  * modification, are permitted provided that the following conditions
259158af98Sjsing  * are met:
269158af98Sjsing  * 1. Redistributions of source code must retain the copyright
279158af98Sjsing  *    notice, this list of conditions and the following disclaimer.
289158af98Sjsing  * 2. Redistributions in binary form must reproduce the above copyright
299158af98Sjsing  *    notice, this list of conditions and the following disclaimer in the
309158af98Sjsing  *    documentation and/or other materials provided with the distribution.
319158af98Sjsing  * 3. All advertising materials mentioning features or use of this software
329158af98Sjsing  *    must display the following acknowledgement:
339158af98Sjsing  *    "This product includes cryptographic software written by
349158af98Sjsing  *     Eric Young (eay@cryptsoft.com)"
359158af98Sjsing  *    The word 'cryptographic' can be left out if the rouines from the library
369158af98Sjsing  *    being used are not cryptographic related :-).
379158af98Sjsing  * 4. If you include any Windows specific code (or a derivative thereof) from
389158af98Sjsing  *    the apps directory (application code) you must include an acknowledgement:
399158af98Sjsing  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
409158af98Sjsing  *
419158af98Sjsing  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
429158af98Sjsing  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
439158af98Sjsing  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
449158af98Sjsing  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
459158af98Sjsing  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
469158af98Sjsing  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
479158af98Sjsing  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
489158af98Sjsing  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
499158af98Sjsing  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
509158af98Sjsing  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
519158af98Sjsing  * SUCH DAMAGE.
529158af98Sjsing  *
539158af98Sjsing  * The licence and distribution terms for any publically available version or
549158af98Sjsing  * derivative of this code cannot be changed.  i.e. this code cannot simply be
559158af98Sjsing  * copied and put under another distribution licence
569158af98Sjsing  * [including the GNU Public Licence.]
579158af98Sjsing  */
589158af98Sjsing 
59c9675a23Stb #include "dtls_local.h"
60c9675a23Stb #include "ssl_local.h"
61efee3f2fSjsing #include "tls13_internal.h"
629158af98Sjsing 
636ba40c14Sjsing static const SSL_METHOD DTLS_method_data = {
64a48e0dedSjsing 	.dtls = 1,
65a48e0dedSjsing 	.server = 1,
66a48e0dedSjsing 	.version = DTLS1_2_VERSION,
67970acf87Sjsing 	.min_tls_version = TLS1_1_VERSION,
68970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
69a48e0dedSjsing 	.ssl_new = dtls1_new,
70a48e0dedSjsing 	.ssl_clear = dtls1_clear,
71a48e0dedSjsing 	.ssl_free = dtls1_free,
72a48e0dedSjsing 	.ssl_accept = ssl3_accept,
73a48e0dedSjsing 	.ssl_connect = ssl3_connect,
74a48e0dedSjsing 	.ssl_shutdown = ssl3_shutdown,
75a48e0dedSjsing 	.ssl_renegotiate = ssl3_renegotiate,
76a48e0dedSjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
77a48e0dedSjsing 	.ssl_pending = ssl3_pending,
78a48e0dedSjsing 	.ssl_read_bytes = dtls1_read_bytes,
79a48e0dedSjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
80a48e0dedSjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
81a48e0dedSjsing };
82a48e0dedSjsing 
83a48e0dedSjsing static const SSL_METHOD DTLS_client_method_data = {
846ba40c14Sjsing 	.dtls = 1,
856ba40c14Sjsing 	.server = 0,
866ba40c14Sjsing 	.version = DTLS1_2_VERSION,
876ba40c14Sjsing 	.min_tls_version = TLS1_1_VERSION,
886ba40c14Sjsing 	.max_tls_version = TLS1_2_VERSION,
896ba40c14Sjsing 	.ssl_new = dtls1_new,
906ba40c14Sjsing 	.ssl_clear = dtls1_clear,
916ba40c14Sjsing 	.ssl_free = dtls1_free,
926ba40c14Sjsing 	.ssl_accept = ssl_undefined_function,
936ba40c14Sjsing 	.ssl_connect = ssl3_connect,
946ba40c14Sjsing 	.ssl_shutdown = ssl3_shutdown,
956ba40c14Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
966ba40c14Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
976ba40c14Sjsing 	.ssl_pending = ssl3_pending,
986ba40c14Sjsing 	.ssl_read_bytes = dtls1_read_bytes,
996ba40c14Sjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
1006ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
101a48e0dedSjsing };
102a48e0dedSjsing 
1036ba40c14Sjsing static const SSL_METHOD DTLSv1_method_data = {
104354e02d3Sjsing 	.dtls = 1,
105d1294899Stb 	.server = 1,
1069158af98Sjsing 	.version = DTLS1_VERSION,
107970acf87Sjsing 	.min_tls_version = TLS1_1_VERSION,
108970acf87Sjsing 	.max_tls_version = TLS1_1_VERSION,
1099158af98Sjsing 	.ssl_new = dtls1_new,
1109158af98Sjsing 	.ssl_clear = dtls1_clear,
1119158af98Sjsing 	.ssl_free = dtls1_free,
1129158af98Sjsing 	.ssl_accept = ssl3_accept,
1139158af98Sjsing 	.ssl_connect = ssl3_connect,
1141a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
1159158af98Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
1169158af98Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
1178dc90bbaSjsing 	.ssl_pending = ssl3_pending,
1189158af98Sjsing 	.ssl_read_bytes = dtls1_read_bytes,
1199158af98Sjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
120d1294899Stb 	.enc_flags = TLSV1_1_ENC_FLAGS,
121d1294899Stb };
122d1294899Stb 
123d1294899Stb static const SSL_METHOD DTLSv1_client_method_data = {
1246ba40c14Sjsing 	.dtls = 1,
1256ba40c14Sjsing 	.server = 0,
1266ba40c14Sjsing 	.version = DTLS1_VERSION,
1276ba40c14Sjsing 	.min_tls_version = TLS1_1_VERSION,
1286ba40c14Sjsing 	.max_tls_version = TLS1_1_VERSION,
1296ba40c14Sjsing 	.ssl_new = dtls1_new,
1306ba40c14Sjsing 	.ssl_clear = dtls1_clear,
1316ba40c14Sjsing 	.ssl_free = dtls1_free,
1326ba40c14Sjsing 	.ssl_accept = ssl_undefined_function,
1336ba40c14Sjsing 	.ssl_connect = ssl3_connect,
1346ba40c14Sjsing 	.ssl_shutdown = ssl3_shutdown,
1356ba40c14Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
1366ba40c14Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
1376ba40c14Sjsing 	.ssl_pending = ssl3_pending,
1386ba40c14Sjsing 	.ssl_read_bytes = dtls1_read_bytes,
1396ba40c14Sjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
1406ba40c14Sjsing 	.enc_flags = TLSV1_1_ENC_FLAGS,
141d1294899Stb };
142d1294899Stb 
1436ba40c14Sjsing static const SSL_METHOD DTLSv1_2_method_data = {
144a48e0dedSjsing 	.dtls = 1,
145a48e0dedSjsing 	.server = 1,
146a48e0dedSjsing 	.version = DTLS1_2_VERSION,
147970acf87Sjsing 	.min_tls_version = TLS1_2_VERSION,
148970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
149a48e0dedSjsing 	.ssl_new = dtls1_new,
150a48e0dedSjsing 	.ssl_clear = dtls1_clear,
151a48e0dedSjsing 	.ssl_free = dtls1_free,
152a48e0dedSjsing 	.ssl_accept = ssl3_accept,
153a48e0dedSjsing 	.ssl_connect = ssl3_connect,
154a48e0dedSjsing 	.ssl_shutdown = ssl3_shutdown,
155a48e0dedSjsing 	.ssl_renegotiate = ssl3_renegotiate,
156a48e0dedSjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
157a48e0dedSjsing 	.ssl_pending = ssl3_pending,
158a48e0dedSjsing 	.ssl_read_bytes = dtls1_read_bytes,
159a48e0dedSjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
1606ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
161a48e0dedSjsing };
162a48e0dedSjsing 
1636ba40c14Sjsing static const SSL_METHOD DTLSv1_2_client_method_data = {
164a48e0dedSjsing 	.dtls = 1,
165a48e0dedSjsing 	.server = 0,
166a48e0dedSjsing 	.version = DTLS1_2_VERSION,
167970acf87Sjsing 	.min_tls_version = TLS1_2_VERSION,
168970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
169a48e0dedSjsing 	.ssl_new = dtls1_new,
170a48e0dedSjsing 	.ssl_clear = dtls1_clear,
171a48e0dedSjsing 	.ssl_free = dtls1_free,
172a48e0dedSjsing 	.ssl_accept = ssl_undefined_function,
173a48e0dedSjsing 	.ssl_connect = ssl3_connect,
174a48e0dedSjsing 	.ssl_shutdown = ssl3_shutdown,
175a48e0dedSjsing 	.ssl_renegotiate = ssl3_renegotiate,
176a48e0dedSjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
177a48e0dedSjsing 	.ssl_pending = ssl3_pending,
178a48e0dedSjsing 	.ssl_read_bytes = dtls1_read_bytes,
179a48e0dedSjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
1806ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
181a48e0dedSjsing };
182a48e0dedSjsing 
1839158af98Sjsing const SSL_METHOD *
1849fef1c44Sjsing DTLSv1_client_method(void)
1859fef1c44Sjsing {
186d1294899Stb 	return &DTLSv1_client_method_data;
1879fef1c44Sjsing }
18871e04849Sbeck LSSL_ALIAS(DTLSv1_client_method);
1899fef1c44Sjsing 
1909fef1c44Sjsing const SSL_METHOD *
1919158af98Sjsing DTLSv1_method(void)
1929158af98Sjsing {
1939158af98Sjsing 	return &DTLSv1_method_data;
1949158af98Sjsing }
19571e04849Sbeck LSSL_ALIAS(DTLSv1_method);
1969158af98Sjsing 
19771023d34Sjsing const SSL_METHOD *
1989fef1c44Sjsing DTLSv1_server_method(void)
1999fef1c44Sjsing {
2009fef1c44Sjsing 	return &DTLSv1_method_data;
2019fef1c44Sjsing }
20271e04849Sbeck LSSL_ALIAS(DTLSv1_server_method);
2039fef1c44Sjsing 
2049fef1c44Sjsing const SSL_METHOD *
205a48e0dedSjsing DTLSv1_2_client_method(void)
206a48e0dedSjsing {
207a48e0dedSjsing 	return &DTLSv1_2_client_method_data;
208a48e0dedSjsing }
20971e04849Sbeck LSSL_ALIAS(DTLSv1_2_client_method);
210a48e0dedSjsing 
211a48e0dedSjsing const SSL_METHOD *
212a48e0dedSjsing DTLSv1_2_method(void)
213a48e0dedSjsing {
214a48e0dedSjsing 	return &DTLSv1_2_method_data;
215a48e0dedSjsing }
21671e04849Sbeck LSSL_ALIAS(DTLSv1_2_method);
217a48e0dedSjsing 
218a48e0dedSjsing const SSL_METHOD *
219a48e0dedSjsing DTLSv1_2_server_method(void)
220a48e0dedSjsing {
221a48e0dedSjsing 	return &DTLSv1_2_method_data;
222a48e0dedSjsing }
22371e04849Sbeck LSSL_ALIAS(DTLSv1_2_server_method);
224a48e0dedSjsing 
225a48e0dedSjsing const SSL_METHOD *
2269fef1c44Sjsing DTLS_client_method(void)
2279fef1c44Sjsing {
228a48e0dedSjsing 	return &DTLS_client_method_data;
2299fef1c44Sjsing }
23071e04849Sbeck LSSL_ALIAS(DTLS_client_method);
2319fef1c44Sjsing 
2329fef1c44Sjsing const SSL_METHOD *
23371023d34Sjsing DTLS_method(void)
23471023d34Sjsing {
235a48e0dedSjsing 	return &DTLS_method_data;
23671023d34Sjsing }
23771e04849Sbeck LSSL_ALIAS(DTLS_method);
23871023d34Sjsing 
2399158af98Sjsing const SSL_METHOD *
24071023d34Sjsing DTLS_server_method(void)
24171023d34Sjsing {
242a48e0dedSjsing 	return &DTLS_method_data;
2439158af98Sjsing }
24471e04849Sbeck LSSL_ALIAS(DTLS_server_method);
2459158af98Sjsing 
2466ba40c14Sjsing static const SSL_METHOD TLS_method_data = {
247354e02d3Sjsing 	.dtls = 0,
248d1294899Stb 	.server = 1,
24994149d15Sjsing 	.version = TLS1_3_VERSION,
250970acf87Sjsing 	.min_tls_version = TLS1_VERSION,
251970acf87Sjsing 	.max_tls_version = TLS1_3_VERSION,
25294149d15Sjsing 	.ssl_new = tls1_new,
25394149d15Sjsing 	.ssl_clear = tls1_clear,
25494149d15Sjsing 	.ssl_free = tls1_free,
25594149d15Sjsing 	.ssl_accept = tls13_legacy_accept,
25694149d15Sjsing 	.ssl_connect = tls13_legacy_connect,
25794149d15Sjsing 	.ssl_shutdown = tls13_legacy_shutdown,
25894149d15Sjsing 	.ssl_renegotiate = ssl_undefined_function,
25994149d15Sjsing 	.ssl_renegotiate_check = ssl_ok,
26094149d15Sjsing 	.ssl_pending = tls13_legacy_pending,
26194149d15Sjsing 	.ssl_read_bytes = tls13_legacy_read_bytes,
26294149d15Sjsing 	.ssl_write_bytes = tls13_legacy_write_bytes,
2636ba40c14Sjsing 	.enc_flags = TLSV1_3_ENC_FLAGS,
26494149d15Sjsing };
26594149d15Sjsing 
2666ba40c14Sjsing static const SSL_METHOD TLS_legacy_method_data = {
267354e02d3Sjsing 	.dtls = 0,
268d1294899Stb 	.server = 1,
2699158af98Sjsing 	.version = TLS1_2_VERSION,
270970acf87Sjsing 	.min_tls_version = TLS1_VERSION,
271970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
2729158af98Sjsing 	.ssl_new = tls1_new,
2739158af98Sjsing 	.ssl_clear = tls1_clear,
2749158af98Sjsing 	.ssl_free = tls1_free,
2759158af98Sjsing 	.ssl_accept = ssl3_accept,
2769158af98Sjsing 	.ssl_connect = ssl3_connect,
2771a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
2789158af98Sjsing 	.ssl_renegotiate = ssl_undefined_function,
2799158af98Sjsing 	.ssl_renegotiate_check = ssl_ok,
2808dc90bbaSjsing 	.ssl_pending = ssl3_pending,
2819158af98Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
2829158af98Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
2836ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
2849158af98Sjsing };
2859158af98Sjsing 
2866ba40c14Sjsing static const SSL_METHOD TLS_client_method_data = {
287d1294899Stb 	.dtls = 0,
288d1294899Stb 	.server = 0,
289d1294899Stb 	.version = TLS1_3_VERSION,
290970acf87Sjsing 	.min_tls_version = TLS1_VERSION,
291970acf87Sjsing 	.max_tls_version = TLS1_3_VERSION,
292d1294899Stb 	.ssl_new = tls1_new,
293d1294899Stb 	.ssl_clear = tls1_clear,
294d1294899Stb 	.ssl_free = tls1_free,
295d1294899Stb 	.ssl_accept = tls13_legacy_accept,
296d1294899Stb 	.ssl_connect = tls13_legacy_connect,
297d1294899Stb 	.ssl_shutdown = tls13_legacy_shutdown,
298d1294899Stb 	.ssl_renegotiate = ssl_undefined_function,
299d1294899Stb 	.ssl_renegotiate_check = ssl_ok,
300d1294899Stb 	.ssl_pending = tls13_legacy_pending,
301d1294899Stb 	.ssl_read_bytes = tls13_legacy_read_bytes,
302d1294899Stb 	.ssl_write_bytes = tls13_legacy_write_bytes,
3036ba40c14Sjsing 	.enc_flags = TLSV1_3_ENC_FLAGS,
304d1294899Stb };
305d1294899Stb 
3066ba40c14Sjsing static const SSL_METHOD TLSv1_method_data = {
307354e02d3Sjsing 	.dtls = 0,
308d1294899Stb 	.server = 1,
3099158af98Sjsing 	.version = TLS1_VERSION,
310970acf87Sjsing 	.min_tls_version = TLS1_VERSION,
311970acf87Sjsing 	.max_tls_version = TLS1_VERSION,
3129158af98Sjsing 	.ssl_new = tls1_new,
3139158af98Sjsing 	.ssl_clear = tls1_clear,
3149158af98Sjsing 	.ssl_free = tls1_free,
3159158af98Sjsing 	.ssl_accept = ssl3_accept,
3169158af98Sjsing 	.ssl_connect = ssl3_connect,
3171a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
3189158af98Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
3199158af98Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
3208dc90bbaSjsing 	.ssl_pending = ssl3_pending,
3219158af98Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
3229158af98Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
323d1294899Stb 	.enc_flags = TLSV1_ENC_FLAGS,
324d1294899Stb };
325d1294899Stb 
326d1294899Stb static const SSL_METHOD TLSv1_client_method_data = {
3276ba40c14Sjsing 	.dtls = 0,
3286ba40c14Sjsing 	.server = 0,
3296ba40c14Sjsing 	.version = TLS1_VERSION,
3306ba40c14Sjsing 	.min_tls_version = TLS1_VERSION,
3316ba40c14Sjsing 	.max_tls_version = TLS1_VERSION,
3326ba40c14Sjsing 	.ssl_new = tls1_new,
3336ba40c14Sjsing 	.ssl_clear = tls1_clear,
3346ba40c14Sjsing 	.ssl_free = tls1_free,
3356ba40c14Sjsing 	.ssl_accept = ssl_undefined_function,
3366ba40c14Sjsing 	.ssl_connect = ssl3_connect,
3376ba40c14Sjsing 	.ssl_shutdown = ssl3_shutdown,
3386ba40c14Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
3396ba40c14Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
3406ba40c14Sjsing 	.ssl_pending = ssl3_pending,
3416ba40c14Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
3426ba40c14Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
3436ba40c14Sjsing 	.enc_flags = TLSV1_ENC_FLAGS,
344d1294899Stb };
345d1294899Stb 
3466ba40c14Sjsing static const SSL_METHOD TLSv1_1_method_data = {
347354e02d3Sjsing 	.dtls = 0,
348d1294899Stb 	.server = 1,
3499158af98Sjsing 	.version = TLS1_1_VERSION,
350970acf87Sjsing 	.min_tls_version = TLS1_1_VERSION,
351970acf87Sjsing 	.max_tls_version = TLS1_1_VERSION,
3529158af98Sjsing 	.ssl_new = tls1_new,
3539158af98Sjsing 	.ssl_clear = tls1_clear,
3549158af98Sjsing 	.ssl_free = tls1_free,
3559158af98Sjsing 	.ssl_accept = ssl3_accept,
3569158af98Sjsing 	.ssl_connect = ssl3_connect,
3571a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
3589158af98Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
3599158af98Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
3608dc90bbaSjsing 	.ssl_pending = ssl3_pending,
3619158af98Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
3629158af98Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
363d1294899Stb 	.enc_flags = TLSV1_1_ENC_FLAGS,
364d1294899Stb };
365d1294899Stb 
366d1294899Stb static const SSL_METHOD TLSv1_1_client_method_data = {
3676ba40c14Sjsing 	.dtls = 0,
3686ba40c14Sjsing 	.server = 0,
3696ba40c14Sjsing 	.version = TLS1_1_VERSION,
3706ba40c14Sjsing 	.min_tls_version = TLS1_1_VERSION,
3716ba40c14Sjsing 	.max_tls_version = TLS1_1_VERSION,
3726ba40c14Sjsing 	.ssl_new = tls1_new,
3736ba40c14Sjsing 	.ssl_clear = tls1_clear,
3746ba40c14Sjsing 	.ssl_free = tls1_free,
3756ba40c14Sjsing 	.ssl_accept = ssl_undefined_function,
3766ba40c14Sjsing 	.ssl_connect = ssl3_connect,
3776ba40c14Sjsing 	.ssl_shutdown = ssl3_shutdown,
3786ba40c14Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
3796ba40c14Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
3806ba40c14Sjsing 	.ssl_pending = ssl3_pending,
3816ba40c14Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
3826ba40c14Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
3836ba40c14Sjsing 	.enc_flags = TLSV1_1_ENC_FLAGS,
384d1294899Stb };
385d1294899Stb 
3866ba40c14Sjsing static const SSL_METHOD TLSv1_2_method_data = {
387354e02d3Sjsing 	.dtls = 0,
388d1294899Stb 	.server = 1,
3899158af98Sjsing 	.version = TLS1_2_VERSION,
390970acf87Sjsing 	.min_tls_version = TLS1_2_VERSION,
391970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
3929158af98Sjsing 	.ssl_new = tls1_new,
3939158af98Sjsing 	.ssl_clear = tls1_clear,
3949158af98Sjsing 	.ssl_free = tls1_free,
3959158af98Sjsing 	.ssl_accept = ssl3_accept,
3969158af98Sjsing 	.ssl_connect = ssl3_connect,
3971a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
3989158af98Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
3999158af98Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
4008dc90bbaSjsing 	.ssl_pending = ssl3_pending,
4019158af98Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
4029158af98Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
4036ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
4049158af98Sjsing };
4059158af98Sjsing 
4066ba40c14Sjsing static const SSL_METHOD TLSv1_2_client_method_data = {
407d1294899Stb 	.dtls = 0,
408d1294899Stb 	.server = 0,
409d1294899Stb 	.version = TLS1_2_VERSION,
410970acf87Sjsing 	.min_tls_version = TLS1_2_VERSION,
411970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
412d1294899Stb 	.ssl_new = tls1_new,
413d1294899Stb 	.ssl_clear = tls1_clear,
414d1294899Stb 	.ssl_free = tls1_free,
415d1294899Stb 	.ssl_accept = ssl_undefined_function,
416d1294899Stb 	.ssl_connect = ssl3_connect,
417d1294899Stb 	.ssl_shutdown = ssl3_shutdown,
418d1294899Stb 	.ssl_renegotiate = ssl3_renegotiate,
419d1294899Stb 	.ssl_renegotiate_check = ssl3_renegotiate_check,
420d1294899Stb 	.ssl_pending = ssl3_pending,
421d1294899Stb 	.ssl_read_bytes = ssl3_read_bytes,
422d1294899Stb 	.ssl_write_bytes = ssl3_write_bytes,
4236ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
424d1294899Stb };
425d1294899Stb 
4269158af98Sjsing const SSL_METHOD *
4279fef1c44Sjsing TLS_client_method(void)
4289158af98Sjsing {
429d1294899Stb 	return (&TLS_client_method_data);
4309158af98Sjsing }
43171e04849Sbeck LSSL_ALIAS(TLS_client_method);
4329158af98Sjsing 
4339158af98Sjsing const SSL_METHOD *
4349158af98Sjsing TLS_method(void)
4359158af98Sjsing {
43694149d15Sjsing 	return (&TLS_method_data);
43794149d15Sjsing }
43871e04849Sbeck LSSL_ALIAS(TLS_method);
43994149d15Sjsing 
44094149d15Sjsing const SSL_METHOD *
4419fef1c44Sjsing TLS_server_method(void)
4429fef1c44Sjsing {
4439fef1c44Sjsing 	return TLS_method();
4449fef1c44Sjsing }
44571e04849Sbeck LSSL_ALIAS(TLS_server_method);
4469fef1c44Sjsing 
4479fef1c44Sjsing const SSL_METHOD *
44894149d15Sjsing tls_legacy_method(void)
44994149d15Sjsing {
45094149d15Sjsing 	return (&TLS_legacy_method_data);
4519158af98Sjsing }
4529158af98Sjsing 
4539158af98Sjsing const SSL_METHOD *
4549fef1c44Sjsing SSLv23_client_method(void)
4559fef1c44Sjsing {
456d1294899Stb 	return TLS_client_method();
4579fef1c44Sjsing }
45871e04849Sbeck LSSL_ALIAS(SSLv23_client_method);
4599fef1c44Sjsing 
4609fef1c44Sjsing const SSL_METHOD *
4619fef1c44Sjsing SSLv23_method(void)
4629fef1c44Sjsing {
4639fef1c44Sjsing 	return TLS_method();
4649fef1c44Sjsing }
46571e04849Sbeck LSSL_ALIAS(SSLv23_method);
4669fef1c44Sjsing 
4679fef1c44Sjsing const SSL_METHOD *
4689fef1c44Sjsing SSLv23_server_method(void)
4699fef1c44Sjsing {
4709fef1c44Sjsing 	return TLS_method();
4719fef1c44Sjsing }
47271e04849Sbeck LSSL_ALIAS(SSLv23_server_method);
4739fef1c44Sjsing 
4749fef1c44Sjsing const SSL_METHOD *
4759fef1c44Sjsing TLSv1_client_method(void)
4769fef1c44Sjsing {
477d1294899Stb 	return (&TLSv1_client_method_data);
4789fef1c44Sjsing }
47971e04849Sbeck LSSL_ALIAS(TLSv1_client_method);
4809fef1c44Sjsing 
4819fef1c44Sjsing const SSL_METHOD *
4829158af98Sjsing TLSv1_method(void)
4839158af98Sjsing {
4849158af98Sjsing 	return (&TLSv1_method_data);
4859158af98Sjsing }
48671e04849Sbeck LSSL_ALIAS(TLSv1_method);
4879158af98Sjsing 
4889158af98Sjsing const SSL_METHOD *
4899fef1c44Sjsing TLSv1_server_method(void)
4909fef1c44Sjsing {
4919fef1c44Sjsing 	return (&TLSv1_method_data);
4929fef1c44Sjsing }
49371e04849Sbeck LSSL_ALIAS(TLSv1_server_method);
4949fef1c44Sjsing 
4959fef1c44Sjsing const SSL_METHOD *
4969fef1c44Sjsing TLSv1_1_client_method(void)
4979fef1c44Sjsing {
498d1294899Stb 	return (&TLSv1_1_client_method_data);
4999fef1c44Sjsing }
50071e04849Sbeck LSSL_ALIAS(TLSv1_1_client_method);
5019fef1c44Sjsing 
5029fef1c44Sjsing const SSL_METHOD *
5039158af98Sjsing TLSv1_1_method(void)
5049158af98Sjsing {
5059158af98Sjsing 	return (&TLSv1_1_method_data);
5069158af98Sjsing }
50771e04849Sbeck LSSL_ALIAS(TLSv1_1_method);
5089158af98Sjsing 
5099158af98Sjsing const SSL_METHOD *
5109fef1c44Sjsing TLSv1_1_server_method(void)
5119fef1c44Sjsing {
5129fef1c44Sjsing 	return (&TLSv1_1_method_data);
5139fef1c44Sjsing }
51471e04849Sbeck LSSL_ALIAS(TLSv1_1_server_method);
5159fef1c44Sjsing 
5169fef1c44Sjsing const SSL_METHOD *
5179fef1c44Sjsing TLSv1_2_client_method(void)
5189fef1c44Sjsing {
519d1294899Stb 	return (&TLSv1_2_client_method_data);
5209fef1c44Sjsing }
52171e04849Sbeck LSSL_ALIAS(TLSv1_2_client_method);
5229fef1c44Sjsing 
5239fef1c44Sjsing const SSL_METHOD *
5249158af98Sjsing TLSv1_2_method(void)
5259158af98Sjsing {
5269158af98Sjsing 	return (&TLSv1_2_method_data);
5279158af98Sjsing }
52871e04849Sbeck LSSL_ALIAS(TLSv1_2_method);
5299158af98Sjsing 
5309158af98Sjsing const SSL_METHOD *
5319158af98Sjsing TLSv1_2_server_method(void)
5329158af98Sjsing {
5339fef1c44Sjsing 	return (&TLSv1_2_method_data);
5349158af98Sjsing }
53571e04849Sbeck LSSL_ALIAS(TLSv1_2_server_method);
536bfc125deSjsing 
537bfc125deSjsing const SSL_METHOD *
5389fef1c44Sjsing ssl_get_method(uint16_t version)
539bfc125deSjsing {
540bfc125deSjsing 	if (version == TLS1_3_VERSION)
5419fef1c44Sjsing 		return (TLS_method());
542bfc125deSjsing 	if (version == TLS1_2_VERSION)
5439fef1c44Sjsing 		return (TLSv1_2_method());
544bfc125deSjsing 	if (version == TLS1_1_VERSION)
5459fef1c44Sjsing 		return (TLSv1_1_method());
546bfc125deSjsing 	if (version == TLS1_VERSION)
5479fef1c44Sjsing 		return (TLSv1_method());
548bfc125deSjsing 	if (version == DTLS1_VERSION)
5499fef1c44Sjsing 		return (DTLSv1_method());
550a48e0dedSjsing 	if (version == DTLS1_2_VERSION)
551a48e0dedSjsing 		return (DTLSv1_2_method());
552bfc125deSjsing 
553bfc125deSjsing 	return (NULL);
554bfc125deSjsing }
555