xref: /openbsd/lib/libssl/ssl_methods.c (revision 71e04849)
1*71e04849Sbeck /* $OpenBSD: ssl_methods.c,v 1.31 2023/07/08 16:40:13 beck Exp $ */
29158af98Sjsing /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
39158af98Sjsing  * All rights reserved.
49158af98Sjsing  *
59158af98Sjsing  * This package is an SSL implementation written
69158af98Sjsing  * by Eric Young (eay@cryptsoft.com).
79158af98Sjsing  * The implementation was written so as to conform with Netscapes SSL.
89158af98Sjsing  *
99158af98Sjsing  * This library is free for commercial and non-commercial use as long as
109158af98Sjsing  * the following conditions are aheared to.  The following conditions
119158af98Sjsing  * apply to all code found in this distribution, be it the RC4, RSA,
129158af98Sjsing  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
139158af98Sjsing  * included with this distribution is covered by the same copyright terms
149158af98Sjsing  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
159158af98Sjsing  *
169158af98Sjsing  * Copyright remains Eric Young's, and as such any Copyright notices in
179158af98Sjsing  * the code are not to be removed.
189158af98Sjsing  * If this package is used in a product, Eric Young should be given attribution
199158af98Sjsing  * as the author of the parts of the library used.
209158af98Sjsing  * This can be in the form of a textual message at program startup or
219158af98Sjsing  * in documentation (online or textual) provided with the package.
229158af98Sjsing  *
239158af98Sjsing  * Redistribution and use in source and binary forms, with or without
249158af98Sjsing  * modification, are permitted provided that the following conditions
259158af98Sjsing  * are met:
269158af98Sjsing  * 1. Redistributions of source code must retain the copyright
279158af98Sjsing  *    notice, this list of conditions and the following disclaimer.
289158af98Sjsing  * 2. Redistributions in binary form must reproduce the above copyright
299158af98Sjsing  *    notice, this list of conditions and the following disclaimer in the
309158af98Sjsing  *    documentation and/or other materials provided with the distribution.
319158af98Sjsing  * 3. All advertising materials mentioning features or use of this software
329158af98Sjsing  *    must display the following acknowledgement:
339158af98Sjsing  *    "This product includes cryptographic software written by
349158af98Sjsing  *     Eric Young (eay@cryptsoft.com)"
359158af98Sjsing  *    The word 'cryptographic' can be left out if the rouines from the library
369158af98Sjsing  *    being used are not cryptographic related :-).
379158af98Sjsing  * 4. If you include any Windows specific code (or a derivative thereof) from
389158af98Sjsing  *    the apps directory (application code) you must include an acknowledgement:
399158af98Sjsing  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
409158af98Sjsing  *
419158af98Sjsing  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
429158af98Sjsing  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
439158af98Sjsing  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
449158af98Sjsing  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
459158af98Sjsing  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
469158af98Sjsing  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
479158af98Sjsing  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
489158af98Sjsing  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
499158af98Sjsing  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
509158af98Sjsing  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
519158af98Sjsing  * SUCH DAMAGE.
529158af98Sjsing  *
539158af98Sjsing  * The licence and distribution terms for any publically available version or
549158af98Sjsing  * derivative of this code cannot be changed.  i.e. this code cannot simply be
559158af98Sjsing  * copied and put under another distribution licence
569158af98Sjsing  * [including the GNU Public Licence.]
579158af98Sjsing  */
589158af98Sjsing 
59c9675a23Stb #include "dtls_local.h"
60c9675a23Stb #include "ssl_local.h"
61efee3f2fSjsing #include "tls13_internal.h"
629158af98Sjsing 
636ba40c14Sjsing static const SSL_METHOD DTLS_method_data = {
64a48e0dedSjsing 	.dtls = 1,
65a48e0dedSjsing 	.server = 1,
66a48e0dedSjsing 	.version = DTLS1_2_VERSION,
67970acf87Sjsing 	.min_tls_version = TLS1_1_VERSION,
68970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
69a48e0dedSjsing 	.ssl_new = dtls1_new,
70a48e0dedSjsing 	.ssl_clear = dtls1_clear,
71a48e0dedSjsing 	.ssl_free = dtls1_free,
72a48e0dedSjsing 	.ssl_accept = ssl3_accept,
73a48e0dedSjsing 	.ssl_connect = ssl3_connect,
74a48e0dedSjsing 	.ssl_shutdown = ssl3_shutdown,
75a48e0dedSjsing 	.ssl_renegotiate = ssl3_renegotiate,
76a48e0dedSjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
77a48e0dedSjsing 	.ssl_pending = ssl3_pending,
78a48e0dedSjsing 	.ssl_read_bytes = dtls1_read_bytes,
79a48e0dedSjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
80a48e0dedSjsing 	.get_cipher = dtls1_get_cipher,
81a48e0dedSjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
82a48e0dedSjsing };
83a48e0dedSjsing 
84a48e0dedSjsing static const SSL_METHOD DTLS_client_method_data = {
856ba40c14Sjsing 	.dtls = 1,
866ba40c14Sjsing 	.server = 0,
876ba40c14Sjsing 	.version = DTLS1_2_VERSION,
886ba40c14Sjsing 	.min_tls_version = TLS1_1_VERSION,
896ba40c14Sjsing 	.max_tls_version = TLS1_2_VERSION,
906ba40c14Sjsing 	.ssl_new = dtls1_new,
916ba40c14Sjsing 	.ssl_clear = dtls1_clear,
926ba40c14Sjsing 	.ssl_free = dtls1_free,
936ba40c14Sjsing 	.ssl_accept = ssl_undefined_function,
946ba40c14Sjsing 	.ssl_connect = ssl3_connect,
956ba40c14Sjsing 	.ssl_shutdown = ssl3_shutdown,
966ba40c14Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
976ba40c14Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
986ba40c14Sjsing 	.ssl_pending = ssl3_pending,
996ba40c14Sjsing 	.ssl_read_bytes = dtls1_read_bytes,
1006ba40c14Sjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
101a48e0dedSjsing 	.get_cipher = dtls1_get_cipher,
1026ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
103a48e0dedSjsing };
104a48e0dedSjsing 
1056ba40c14Sjsing static const SSL_METHOD DTLSv1_method_data = {
106354e02d3Sjsing 	.dtls = 1,
107d1294899Stb 	.server = 1,
1089158af98Sjsing 	.version = DTLS1_VERSION,
109970acf87Sjsing 	.min_tls_version = TLS1_1_VERSION,
110970acf87Sjsing 	.max_tls_version = TLS1_1_VERSION,
1119158af98Sjsing 	.ssl_new = dtls1_new,
1129158af98Sjsing 	.ssl_clear = dtls1_clear,
1139158af98Sjsing 	.ssl_free = dtls1_free,
1149158af98Sjsing 	.ssl_accept = ssl3_accept,
1159158af98Sjsing 	.ssl_connect = ssl3_connect,
1161a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
1179158af98Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
1189158af98Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
1198dc90bbaSjsing 	.ssl_pending = ssl3_pending,
1209158af98Sjsing 	.ssl_read_bytes = dtls1_read_bytes,
1219158af98Sjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
1229158af98Sjsing 	.get_cipher = dtls1_get_cipher,
123d1294899Stb 	.enc_flags = TLSV1_1_ENC_FLAGS,
124d1294899Stb };
125d1294899Stb 
126d1294899Stb static const SSL_METHOD DTLSv1_client_method_data = {
1276ba40c14Sjsing 	.dtls = 1,
1286ba40c14Sjsing 	.server = 0,
1296ba40c14Sjsing 	.version = DTLS1_VERSION,
1306ba40c14Sjsing 	.min_tls_version = TLS1_1_VERSION,
1316ba40c14Sjsing 	.max_tls_version = TLS1_1_VERSION,
1326ba40c14Sjsing 	.ssl_new = dtls1_new,
1336ba40c14Sjsing 	.ssl_clear = dtls1_clear,
1346ba40c14Sjsing 	.ssl_free = dtls1_free,
1356ba40c14Sjsing 	.ssl_accept = ssl_undefined_function,
1366ba40c14Sjsing 	.ssl_connect = ssl3_connect,
1376ba40c14Sjsing 	.ssl_shutdown = ssl3_shutdown,
1386ba40c14Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
1396ba40c14Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
1406ba40c14Sjsing 	.ssl_pending = ssl3_pending,
1416ba40c14Sjsing 	.ssl_read_bytes = dtls1_read_bytes,
1426ba40c14Sjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
143d1294899Stb 	.get_cipher = dtls1_get_cipher,
1446ba40c14Sjsing 	.enc_flags = TLSV1_1_ENC_FLAGS,
145d1294899Stb };
146d1294899Stb 
1476ba40c14Sjsing static const SSL_METHOD DTLSv1_2_method_data = {
148a48e0dedSjsing 	.dtls = 1,
149a48e0dedSjsing 	.server = 1,
150a48e0dedSjsing 	.version = DTLS1_2_VERSION,
151970acf87Sjsing 	.min_tls_version = TLS1_2_VERSION,
152970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
153a48e0dedSjsing 	.ssl_new = dtls1_new,
154a48e0dedSjsing 	.ssl_clear = dtls1_clear,
155a48e0dedSjsing 	.ssl_free = dtls1_free,
156a48e0dedSjsing 	.ssl_accept = ssl3_accept,
157a48e0dedSjsing 	.ssl_connect = ssl3_connect,
158a48e0dedSjsing 	.ssl_shutdown = ssl3_shutdown,
159a48e0dedSjsing 	.ssl_renegotiate = ssl3_renegotiate,
160a48e0dedSjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
161a48e0dedSjsing 	.ssl_pending = ssl3_pending,
162a48e0dedSjsing 	.ssl_read_bytes = dtls1_read_bytes,
163a48e0dedSjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
164a48e0dedSjsing 	.get_cipher = dtls1_get_cipher,
1656ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
166a48e0dedSjsing };
167a48e0dedSjsing 
1686ba40c14Sjsing static const SSL_METHOD DTLSv1_2_client_method_data = {
169a48e0dedSjsing 	.dtls = 1,
170a48e0dedSjsing 	.server = 0,
171a48e0dedSjsing 	.version = DTLS1_2_VERSION,
172970acf87Sjsing 	.min_tls_version = TLS1_2_VERSION,
173970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
174a48e0dedSjsing 	.ssl_new = dtls1_new,
175a48e0dedSjsing 	.ssl_clear = dtls1_clear,
176a48e0dedSjsing 	.ssl_free = dtls1_free,
177a48e0dedSjsing 	.ssl_accept = ssl_undefined_function,
178a48e0dedSjsing 	.ssl_connect = ssl3_connect,
179a48e0dedSjsing 	.ssl_shutdown = ssl3_shutdown,
180a48e0dedSjsing 	.ssl_renegotiate = ssl3_renegotiate,
181a48e0dedSjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
182a48e0dedSjsing 	.ssl_pending = ssl3_pending,
183a48e0dedSjsing 	.ssl_read_bytes = dtls1_read_bytes,
184a48e0dedSjsing 	.ssl_write_bytes = dtls1_write_app_data_bytes,
185a48e0dedSjsing 	.get_cipher = dtls1_get_cipher,
1866ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
187a48e0dedSjsing };
188a48e0dedSjsing 
1899158af98Sjsing const SSL_METHOD *
DTLSv1_client_method(void)1909fef1c44Sjsing DTLSv1_client_method(void)
1919fef1c44Sjsing {
192d1294899Stb 	return &DTLSv1_client_method_data;
1939fef1c44Sjsing }
194*71e04849Sbeck LSSL_ALIAS(DTLSv1_client_method);
1959fef1c44Sjsing 
1969fef1c44Sjsing const SSL_METHOD *
DTLSv1_method(void)1979158af98Sjsing DTLSv1_method(void)
1989158af98Sjsing {
1999158af98Sjsing 	return &DTLSv1_method_data;
2009158af98Sjsing }
201*71e04849Sbeck LSSL_ALIAS(DTLSv1_method);
2029158af98Sjsing 
20371023d34Sjsing const SSL_METHOD *
DTLSv1_server_method(void)2049fef1c44Sjsing DTLSv1_server_method(void)
2059fef1c44Sjsing {
2069fef1c44Sjsing 	return &DTLSv1_method_data;
2079fef1c44Sjsing }
208*71e04849Sbeck LSSL_ALIAS(DTLSv1_server_method);
2099fef1c44Sjsing 
2109fef1c44Sjsing const SSL_METHOD *
DTLSv1_2_client_method(void)211a48e0dedSjsing DTLSv1_2_client_method(void)
212a48e0dedSjsing {
213a48e0dedSjsing 	return &DTLSv1_2_client_method_data;
214a48e0dedSjsing }
215*71e04849Sbeck LSSL_ALIAS(DTLSv1_2_client_method);
216a48e0dedSjsing 
217a48e0dedSjsing const SSL_METHOD *
DTLSv1_2_method(void)218a48e0dedSjsing DTLSv1_2_method(void)
219a48e0dedSjsing {
220a48e0dedSjsing 	return &DTLSv1_2_method_data;
221a48e0dedSjsing }
222*71e04849Sbeck LSSL_ALIAS(DTLSv1_2_method);
223a48e0dedSjsing 
224a48e0dedSjsing const SSL_METHOD *
DTLSv1_2_server_method(void)225a48e0dedSjsing DTLSv1_2_server_method(void)
226a48e0dedSjsing {
227a48e0dedSjsing 	return &DTLSv1_2_method_data;
228a48e0dedSjsing }
229*71e04849Sbeck LSSL_ALIAS(DTLSv1_2_server_method);
230a48e0dedSjsing 
231a48e0dedSjsing const SSL_METHOD *
DTLS_client_method(void)2329fef1c44Sjsing DTLS_client_method(void)
2339fef1c44Sjsing {
234a48e0dedSjsing 	return &DTLS_client_method_data;
2359fef1c44Sjsing }
236*71e04849Sbeck LSSL_ALIAS(DTLS_client_method);
2379fef1c44Sjsing 
2389fef1c44Sjsing const SSL_METHOD *
DTLS_method(void)23971023d34Sjsing DTLS_method(void)
24071023d34Sjsing {
241a48e0dedSjsing 	return &DTLS_method_data;
24271023d34Sjsing }
243*71e04849Sbeck LSSL_ALIAS(DTLS_method);
24471023d34Sjsing 
2459158af98Sjsing const SSL_METHOD *
DTLS_server_method(void)24671023d34Sjsing DTLS_server_method(void)
24771023d34Sjsing {
248a48e0dedSjsing 	return &DTLS_method_data;
2499158af98Sjsing }
250*71e04849Sbeck LSSL_ALIAS(DTLS_server_method);
2519158af98Sjsing 
2526ba40c14Sjsing static const SSL_METHOD TLS_method_data = {
253354e02d3Sjsing 	.dtls = 0,
254d1294899Stb 	.server = 1,
25594149d15Sjsing 	.version = TLS1_3_VERSION,
256970acf87Sjsing 	.min_tls_version = TLS1_VERSION,
257970acf87Sjsing 	.max_tls_version = TLS1_3_VERSION,
25894149d15Sjsing 	.ssl_new = tls1_new,
25994149d15Sjsing 	.ssl_clear = tls1_clear,
26094149d15Sjsing 	.ssl_free = tls1_free,
26194149d15Sjsing 	.ssl_accept = tls13_legacy_accept,
26294149d15Sjsing 	.ssl_connect = tls13_legacy_connect,
26394149d15Sjsing 	.ssl_shutdown = tls13_legacy_shutdown,
26494149d15Sjsing 	.ssl_renegotiate = ssl_undefined_function,
26594149d15Sjsing 	.ssl_renegotiate_check = ssl_ok,
26694149d15Sjsing 	.ssl_pending = tls13_legacy_pending,
26794149d15Sjsing 	.ssl_read_bytes = tls13_legacy_read_bytes,
26894149d15Sjsing 	.ssl_write_bytes = tls13_legacy_write_bytes,
26994149d15Sjsing 	.get_cipher = ssl3_get_cipher,
2706ba40c14Sjsing 	.enc_flags = TLSV1_3_ENC_FLAGS,
27194149d15Sjsing };
27294149d15Sjsing 
2736ba40c14Sjsing static const SSL_METHOD TLS_legacy_method_data = {
274354e02d3Sjsing 	.dtls = 0,
275d1294899Stb 	.server = 1,
2769158af98Sjsing 	.version = TLS1_2_VERSION,
277970acf87Sjsing 	.min_tls_version = TLS1_VERSION,
278970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
2799158af98Sjsing 	.ssl_new = tls1_new,
2809158af98Sjsing 	.ssl_clear = tls1_clear,
2819158af98Sjsing 	.ssl_free = tls1_free,
2829158af98Sjsing 	.ssl_accept = ssl3_accept,
2839158af98Sjsing 	.ssl_connect = ssl3_connect,
2841a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
2859158af98Sjsing 	.ssl_renegotiate = ssl_undefined_function,
2869158af98Sjsing 	.ssl_renegotiate_check = ssl_ok,
2878dc90bbaSjsing 	.ssl_pending = ssl3_pending,
2889158af98Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
2899158af98Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
2909158af98Sjsing 	.get_cipher = ssl3_get_cipher,
2916ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
2929158af98Sjsing };
2939158af98Sjsing 
2946ba40c14Sjsing static const SSL_METHOD TLS_client_method_data = {
295d1294899Stb 	.dtls = 0,
296d1294899Stb 	.server = 0,
297d1294899Stb 	.version = TLS1_3_VERSION,
298970acf87Sjsing 	.min_tls_version = TLS1_VERSION,
299970acf87Sjsing 	.max_tls_version = TLS1_3_VERSION,
300d1294899Stb 	.ssl_new = tls1_new,
301d1294899Stb 	.ssl_clear = tls1_clear,
302d1294899Stb 	.ssl_free = tls1_free,
303d1294899Stb 	.ssl_accept = tls13_legacy_accept,
304d1294899Stb 	.ssl_connect = tls13_legacy_connect,
305d1294899Stb 	.ssl_shutdown = tls13_legacy_shutdown,
306d1294899Stb 	.ssl_renegotiate = ssl_undefined_function,
307d1294899Stb 	.ssl_renegotiate_check = ssl_ok,
308d1294899Stb 	.ssl_pending = tls13_legacy_pending,
309d1294899Stb 	.ssl_read_bytes = tls13_legacy_read_bytes,
310d1294899Stb 	.ssl_write_bytes = tls13_legacy_write_bytes,
311d1294899Stb 	.get_cipher = ssl3_get_cipher,
3126ba40c14Sjsing 	.enc_flags = TLSV1_3_ENC_FLAGS,
313d1294899Stb };
314d1294899Stb 
3156ba40c14Sjsing static const SSL_METHOD TLSv1_method_data = {
316354e02d3Sjsing 	.dtls = 0,
317d1294899Stb 	.server = 1,
3189158af98Sjsing 	.version = TLS1_VERSION,
319970acf87Sjsing 	.min_tls_version = TLS1_VERSION,
320970acf87Sjsing 	.max_tls_version = TLS1_VERSION,
3219158af98Sjsing 	.ssl_new = tls1_new,
3229158af98Sjsing 	.ssl_clear = tls1_clear,
3239158af98Sjsing 	.ssl_free = tls1_free,
3249158af98Sjsing 	.ssl_accept = ssl3_accept,
3259158af98Sjsing 	.ssl_connect = ssl3_connect,
3261a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
3279158af98Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
3289158af98Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
3298dc90bbaSjsing 	.ssl_pending = ssl3_pending,
3309158af98Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
3319158af98Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
3329158af98Sjsing 	.get_cipher = ssl3_get_cipher,
333d1294899Stb 	.enc_flags = TLSV1_ENC_FLAGS,
334d1294899Stb };
335d1294899Stb 
336d1294899Stb static const SSL_METHOD TLSv1_client_method_data = {
3376ba40c14Sjsing 	.dtls = 0,
3386ba40c14Sjsing 	.server = 0,
3396ba40c14Sjsing 	.version = TLS1_VERSION,
3406ba40c14Sjsing 	.min_tls_version = TLS1_VERSION,
3416ba40c14Sjsing 	.max_tls_version = TLS1_VERSION,
3426ba40c14Sjsing 	.ssl_new = tls1_new,
3436ba40c14Sjsing 	.ssl_clear = tls1_clear,
3446ba40c14Sjsing 	.ssl_free = tls1_free,
3456ba40c14Sjsing 	.ssl_accept = ssl_undefined_function,
3466ba40c14Sjsing 	.ssl_connect = ssl3_connect,
3476ba40c14Sjsing 	.ssl_shutdown = ssl3_shutdown,
3486ba40c14Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
3496ba40c14Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
3506ba40c14Sjsing 	.ssl_pending = ssl3_pending,
3516ba40c14Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
3526ba40c14Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
353d1294899Stb 	.get_cipher = ssl3_get_cipher,
3546ba40c14Sjsing 	.enc_flags = TLSV1_ENC_FLAGS,
355d1294899Stb };
356d1294899Stb 
3576ba40c14Sjsing static const SSL_METHOD TLSv1_1_method_data = {
358354e02d3Sjsing 	.dtls = 0,
359d1294899Stb 	.server = 1,
3609158af98Sjsing 	.version = TLS1_1_VERSION,
361970acf87Sjsing 	.min_tls_version = TLS1_1_VERSION,
362970acf87Sjsing 	.max_tls_version = TLS1_1_VERSION,
3639158af98Sjsing 	.ssl_new = tls1_new,
3649158af98Sjsing 	.ssl_clear = tls1_clear,
3659158af98Sjsing 	.ssl_free = tls1_free,
3669158af98Sjsing 	.ssl_accept = ssl3_accept,
3679158af98Sjsing 	.ssl_connect = ssl3_connect,
3681a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
3699158af98Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
3709158af98Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
3718dc90bbaSjsing 	.ssl_pending = ssl3_pending,
3729158af98Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
3739158af98Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
3749158af98Sjsing 	.get_cipher = ssl3_get_cipher,
375d1294899Stb 	.enc_flags = TLSV1_1_ENC_FLAGS,
376d1294899Stb };
377d1294899Stb 
378d1294899Stb static const SSL_METHOD TLSv1_1_client_method_data = {
3796ba40c14Sjsing 	.dtls = 0,
3806ba40c14Sjsing 	.server = 0,
3816ba40c14Sjsing 	.version = TLS1_1_VERSION,
3826ba40c14Sjsing 	.min_tls_version = TLS1_1_VERSION,
3836ba40c14Sjsing 	.max_tls_version = TLS1_1_VERSION,
3846ba40c14Sjsing 	.ssl_new = tls1_new,
3856ba40c14Sjsing 	.ssl_clear = tls1_clear,
3866ba40c14Sjsing 	.ssl_free = tls1_free,
3876ba40c14Sjsing 	.ssl_accept = ssl_undefined_function,
3886ba40c14Sjsing 	.ssl_connect = ssl3_connect,
3896ba40c14Sjsing 	.ssl_shutdown = ssl3_shutdown,
3906ba40c14Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
3916ba40c14Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
3926ba40c14Sjsing 	.ssl_pending = ssl3_pending,
3936ba40c14Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
3946ba40c14Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
395d1294899Stb 	.get_cipher = ssl3_get_cipher,
3966ba40c14Sjsing 	.enc_flags = TLSV1_1_ENC_FLAGS,
397d1294899Stb };
398d1294899Stb 
3996ba40c14Sjsing static const SSL_METHOD TLSv1_2_method_data = {
400354e02d3Sjsing 	.dtls = 0,
401d1294899Stb 	.server = 1,
4029158af98Sjsing 	.version = TLS1_2_VERSION,
403970acf87Sjsing 	.min_tls_version = TLS1_2_VERSION,
404970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
4059158af98Sjsing 	.ssl_new = tls1_new,
4069158af98Sjsing 	.ssl_clear = tls1_clear,
4079158af98Sjsing 	.ssl_free = tls1_free,
4089158af98Sjsing 	.ssl_accept = ssl3_accept,
4099158af98Sjsing 	.ssl_connect = ssl3_connect,
4101a6e1177Sjsing 	.ssl_shutdown = ssl3_shutdown,
4119158af98Sjsing 	.ssl_renegotiate = ssl3_renegotiate,
4129158af98Sjsing 	.ssl_renegotiate_check = ssl3_renegotiate_check,
4138dc90bbaSjsing 	.ssl_pending = ssl3_pending,
4149158af98Sjsing 	.ssl_read_bytes = ssl3_read_bytes,
4159158af98Sjsing 	.ssl_write_bytes = ssl3_write_bytes,
4169158af98Sjsing 	.get_cipher = ssl3_get_cipher,
4176ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
4189158af98Sjsing };
4199158af98Sjsing 
4206ba40c14Sjsing static const SSL_METHOD TLSv1_2_client_method_data = {
421d1294899Stb 	.dtls = 0,
422d1294899Stb 	.server = 0,
423d1294899Stb 	.version = TLS1_2_VERSION,
424970acf87Sjsing 	.min_tls_version = TLS1_2_VERSION,
425970acf87Sjsing 	.max_tls_version = TLS1_2_VERSION,
426d1294899Stb 	.ssl_new = tls1_new,
427d1294899Stb 	.ssl_clear = tls1_clear,
428d1294899Stb 	.ssl_free = tls1_free,
429d1294899Stb 	.ssl_accept = ssl_undefined_function,
430d1294899Stb 	.ssl_connect = ssl3_connect,
431d1294899Stb 	.ssl_shutdown = ssl3_shutdown,
432d1294899Stb 	.ssl_renegotiate = ssl3_renegotiate,
433d1294899Stb 	.ssl_renegotiate_check = ssl3_renegotiate_check,
434d1294899Stb 	.ssl_pending = ssl3_pending,
435d1294899Stb 	.ssl_read_bytes = ssl3_read_bytes,
436d1294899Stb 	.ssl_write_bytes = ssl3_write_bytes,
437d1294899Stb 	.get_cipher = ssl3_get_cipher,
4386ba40c14Sjsing 	.enc_flags = TLSV1_2_ENC_FLAGS,
439d1294899Stb };
440d1294899Stb 
4419158af98Sjsing const SSL_METHOD *
TLS_client_method(void)4429fef1c44Sjsing TLS_client_method(void)
4439158af98Sjsing {
444d1294899Stb 	return (&TLS_client_method_data);
4459158af98Sjsing }
446*71e04849Sbeck LSSL_ALIAS(TLS_client_method);
4479158af98Sjsing 
4489158af98Sjsing const SSL_METHOD *
TLS_method(void)4499158af98Sjsing TLS_method(void)
4509158af98Sjsing {
45194149d15Sjsing 	return (&TLS_method_data);
45294149d15Sjsing }
453*71e04849Sbeck LSSL_ALIAS(TLS_method);
45494149d15Sjsing 
45594149d15Sjsing const SSL_METHOD *
TLS_server_method(void)4569fef1c44Sjsing TLS_server_method(void)
4579fef1c44Sjsing {
4589fef1c44Sjsing 	return TLS_method();
4599fef1c44Sjsing }
460*71e04849Sbeck LSSL_ALIAS(TLS_server_method);
4619fef1c44Sjsing 
4629fef1c44Sjsing const SSL_METHOD *
tls_legacy_method(void)46394149d15Sjsing tls_legacy_method(void)
46494149d15Sjsing {
46594149d15Sjsing 	return (&TLS_legacy_method_data);
4669158af98Sjsing }
4679158af98Sjsing 
4689158af98Sjsing const SSL_METHOD *
SSLv23_client_method(void)4699fef1c44Sjsing SSLv23_client_method(void)
4709fef1c44Sjsing {
471d1294899Stb 	return TLS_client_method();
4729fef1c44Sjsing }
473*71e04849Sbeck LSSL_ALIAS(SSLv23_client_method);
4749fef1c44Sjsing 
4759fef1c44Sjsing const SSL_METHOD *
SSLv23_method(void)4769fef1c44Sjsing SSLv23_method(void)
4779fef1c44Sjsing {
4789fef1c44Sjsing 	return TLS_method();
4799fef1c44Sjsing }
480*71e04849Sbeck LSSL_ALIAS(SSLv23_method);
4819fef1c44Sjsing 
4829fef1c44Sjsing const SSL_METHOD *
SSLv23_server_method(void)4839fef1c44Sjsing SSLv23_server_method(void)
4849fef1c44Sjsing {
4859fef1c44Sjsing 	return TLS_method();
4869fef1c44Sjsing }
487*71e04849Sbeck LSSL_ALIAS(SSLv23_server_method);
4889fef1c44Sjsing 
4899fef1c44Sjsing const SSL_METHOD *
TLSv1_client_method(void)4909fef1c44Sjsing TLSv1_client_method(void)
4919fef1c44Sjsing {
492d1294899Stb 	return (&TLSv1_client_method_data);
4939fef1c44Sjsing }
494*71e04849Sbeck LSSL_ALIAS(TLSv1_client_method);
4959fef1c44Sjsing 
4969fef1c44Sjsing const SSL_METHOD *
TLSv1_method(void)4979158af98Sjsing TLSv1_method(void)
4989158af98Sjsing {
4999158af98Sjsing 	return (&TLSv1_method_data);
5009158af98Sjsing }
501*71e04849Sbeck LSSL_ALIAS(TLSv1_method);
5029158af98Sjsing 
5039158af98Sjsing const SSL_METHOD *
TLSv1_server_method(void)5049fef1c44Sjsing TLSv1_server_method(void)
5059fef1c44Sjsing {
5069fef1c44Sjsing 	return (&TLSv1_method_data);
5079fef1c44Sjsing }
508*71e04849Sbeck LSSL_ALIAS(TLSv1_server_method);
5099fef1c44Sjsing 
5109fef1c44Sjsing const SSL_METHOD *
TLSv1_1_client_method(void)5119fef1c44Sjsing TLSv1_1_client_method(void)
5129fef1c44Sjsing {
513d1294899Stb 	return (&TLSv1_1_client_method_data);
5149fef1c44Sjsing }
515*71e04849Sbeck LSSL_ALIAS(TLSv1_1_client_method);
5169fef1c44Sjsing 
5179fef1c44Sjsing const SSL_METHOD *
TLSv1_1_method(void)5189158af98Sjsing TLSv1_1_method(void)
5199158af98Sjsing {
5209158af98Sjsing 	return (&TLSv1_1_method_data);
5219158af98Sjsing }
522*71e04849Sbeck LSSL_ALIAS(TLSv1_1_method);
5239158af98Sjsing 
5249158af98Sjsing const SSL_METHOD *
TLSv1_1_server_method(void)5259fef1c44Sjsing TLSv1_1_server_method(void)
5269fef1c44Sjsing {
5279fef1c44Sjsing 	return (&TLSv1_1_method_data);
5289fef1c44Sjsing }
529*71e04849Sbeck LSSL_ALIAS(TLSv1_1_server_method);
5309fef1c44Sjsing 
5319fef1c44Sjsing const SSL_METHOD *
TLSv1_2_client_method(void)5329fef1c44Sjsing TLSv1_2_client_method(void)
5339fef1c44Sjsing {
534d1294899Stb 	return (&TLSv1_2_client_method_data);
5359fef1c44Sjsing }
536*71e04849Sbeck LSSL_ALIAS(TLSv1_2_client_method);
5379fef1c44Sjsing 
5389fef1c44Sjsing const SSL_METHOD *
TLSv1_2_method(void)5399158af98Sjsing TLSv1_2_method(void)
5409158af98Sjsing {
5419158af98Sjsing 	return (&TLSv1_2_method_data);
5429158af98Sjsing }
543*71e04849Sbeck LSSL_ALIAS(TLSv1_2_method);
5449158af98Sjsing 
5459158af98Sjsing const SSL_METHOD *
TLSv1_2_server_method(void)5469158af98Sjsing TLSv1_2_server_method(void)
5479158af98Sjsing {
5489fef1c44Sjsing 	return (&TLSv1_2_method_data);
5499158af98Sjsing }
550*71e04849Sbeck LSSL_ALIAS(TLSv1_2_server_method);
551bfc125deSjsing 
552bfc125deSjsing const SSL_METHOD *
ssl_get_method(uint16_t version)5539fef1c44Sjsing ssl_get_method(uint16_t version)
554bfc125deSjsing {
555bfc125deSjsing 	if (version == TLS1_3_VERSION)
5569fef1c44Sjsing 		return (TLS_method());
557bfc125deSjsing 	if (version == TLS1_2_VERSION)
5589fef1c44Sjsing 		return (TLSv1_2_method());
559bfc125deSjsing 	if (version == TLS1_1_VERSION)
5609fef1c44Sjsing 		return (TLSv1_1_method());
561bfc125deSjsing 	if (version == TLS1_VERSION)
5629fef1c44Sjsing 		return (TLSv1_method());
563bfc125deSjsing 	if (version == DTLS1_VERSION)
5649fef1c44Sjsing 		return (DTLSv1_method());
565a48e0dedSjsing 	if (version == DTLS1_2_VERSION)
566a48e0dedSjsing 		return (DTLSv1_2_method());
567bfc125deSjsing 
568bfc125deSjsing 	return (NULL);
569bfc125deSjsing }
570