1/*
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (the "License").  You may not use
5 * this file except in compliance with the License.  You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8 */
9
10#include <stdio.h>
11#include <openssl/macros.h>
12#include <openssl/objects.h>
13#include "ssl_local.h"
14
15/*-
16 * TLS/SSLv3 methods
17 */
18
19IMPLEMENT_tls_meth_func(TLS_ANY_VERSION, 0, 0,
20                        TLS_method,
21                        ossl_statem_accept,
22                        ossl_statem_connect, TLSv1_2_enc_data)
23IMPLEMENT_tls_meth_func(TLS1_3_VERSION, 0, SSL_OP_NO_TLSv1_3,
24                        tlsv1_3_method,
25                        ossl_statem_accept,
26                        ossl_statem_connect, TLSv1_3_enc_data)
27#ifndef OPENSSL_NO_TLS1_2_METHOD
28IMPLEMENT_tls_meth_func(TLS1_2_VERSION, 0, SSL_OP_NO_TLSv1_2,
29                        tlsv1_2_method,
30                        ossl_statem_accept,
31                        ossl_statem_connect, TLSv1_2_enc_data)
32#endif
33#ifndef OPENSSL_NO_TLS1_1_METHOD
34IMPLEMENT_tls_meth_func(TLS1_1_VERSION, SSL_METHOD_NO_SUITEB, SSL_OP_NO_TLSv1_1,
35                        tlsv1_1_method,
36                        ossl_statem_accept,
37                        ossl_statem_connect, TLSv1_1_enc_data)
38#endif
39#ifndef OPENSSL_NO_TLS1_METHOD
40IMPLEMENT_tls_meth_func(TLS1_VERSION, SSL_METHOD_NO_SUITEB, SSL_OP_NO_TLSv1,
41                        tlsv1_method,
42                        ossl_statem_accept, ossl_statem_connect, TLSv1_enc_data)
43#endif
44#ifndef OPENSSL_NO_SSL3_METHOD
45IMPLEMENT_ssl3_meth_func(sslv3_method, ossl_statem_accept, ossl_statem_connect)
46#endif
47/*-
48 * TLS/SSLv3 server methods
49 */
50IMPLEMENT_tls_meth_func(TLS_ANY_VERSION, 0, 0,
51                        TLS_server_method,
52                        ossl_statem_accept,
53                        ssl_undefined_function, TLSv1_2_enc_data)
54IMPLEMENT_tls_meth_func(TLS1_3_VERSION, 0, SSL_OP_NO_TLSv1_3,
55                        tlsv1_3_server_method,
56                        ossl_statem_accept,
57                        ssl_undefined_function, TLSv1_3_enc_data)
58#ifndef OPENSSL_NO_TLS1_2_METHOD
59IMPLEMENT_tls_meth_func(TLS1_2_VERSION, 0, SSL_OP_NO_TLSv1_2,
60                        tlsv1_2_server_method,
61                        ossl_statem_accept,
62                        ssl_undefined_function, TLSv1_2_enc_data)
63#endif
64#ifndef OPENSSL_NO_TLS1_1_METHOD
65IMPLEMENT_tls_meth_func(TLS1_1_VERSION, SSL_METHOD_NO_SUITEB, SSL_OP_NO_TLSv1_1,
66                        tlsv1_1_server_method,
67                        ossl_statem_accept,
68                        ssl_undefined_function, TLSv1_1_enc_data)
69#endif
70#ifndef OPENSSL_NO_TLS1_METHOD
71IMPLEMENT_tls_meth_func(TLS1_VERSION, SSL_METHOD_NO_SUITEB, SSL_OP_NO_TLSv1,
72                        tlsv1_server_method,
73                        ossl_statem_accept,
74                        ssl_undefined_function, TLSv1_enc_data)
75#endif
76#ifndef OPENSSL_NO_SSL3_METHOD
77IMPLEMENT_ssl3_meth_func(sslv3_server_method,
78                         ossl_statem_accept, ssl_undefined_function)
79#endif
80/*-
81 * TLS/SSLv3 client methods
82 */
83IMPLEMENT_tls_meth_func(TLS_ANY_VERSION, 0, 0,
84                        TLS_client_method,
85                        ssl_undefined_function,
86                        ossl_statem_connect, TLSv1_2_enc_data)
87IMPLEMENT_tls_meth_func(TLS1_3_VERSION, 0, SSL_OP_NO_TLSv1_3,
88                        tlsv1_3_client_method,
89                        ssl_undefined_function,
90                        ossl_statem_connect, TLSv1_3_enc_data)
91#ifndef OPENSSL_NO_TLS1_2_METHOD
92IMPLEMENT_tls_meth_func(TLS1_2_VERSION, 0, SSL_OP_NO_TLSv1_2,
93                        tlsv1_2_client_method,
94                        ssl_undefined_function,
95                        ossl_statem_connect, TLSv1_2_enc_data)
96#endif
97#ifndef OPENSSL_NO_TLS1_1_METHOD
98IMPLEMENT_tls_meth_func(TLS1_1_VERSION, SSL_METHOD_NO_SUITEB, SSL_OP_NO_TLSv1_1,
99                        tlsv1_1_client_method,
100                        ssl_undefined_function,
101                        ossl_statem_connect, TLSv1_1_enc_data)
102#endif
103#ifndef OPENSSL_NO_TLS1_METHOD
104IMPLEMENT_tls_meth_func(TLS1_VERSION, SSL_METHOD_NO_SUITEB, SSL_OP_NO_TLSv1,
105                        tlsv1_client_method,
106                        ssl_undefined_function,
107                        ossl_statem_connect, TLSv1_enc_data)
108#endif
109#ifndef OPENSSL_NO_SSL3_METHOD
110IMPLEMENT_ssl3_meth_func(sslv3_client_method,
111                         ssl_undefined_function, ossl_statem_connect)
112#endif
113/*-
114 * DTLS methods
115 */
116#ifndef OPENSSL_NO_DTLS1_METHOD
117IMPLEMENT_dtls1_meth_func(DTLS1_VERSION, SSL_METHOD_NO_SUITEB, SSL_OP_NO_DTLSv1,
118                          dtlsv1_method,
119                          ossl_statem_accept,
120                          ossl_statem_connect, DTLSv1_enc_data)
121#endif
122#ifndef OPENSSL_NO_DTLS1_2_METHOD
123IMPLEMENT_dtls1_meth_func(DTLS1_2_VERSION, 0, SSL_OP_NO_DTLSv1_2,
124                          dtlsv1_2_method,
125                          ossl_statem_accept,
126                          ossl_statem_connect, DTLSv1_2_enc_data)
127#endif
128IMPLEMENT_dtls1_meth_func(DTLS_ANY_VERSION, 0, 0,
129                          DTLS_method,
130                          ossl_statem_accept,
131                          ossl_statem_connect, DTLSv1_2_enc_data)
132
133/*-
134 * DTLS server methods
135 */
136#ifndef OPENSSL_NO_DTLS1_METHOD
137IMPLEMENT_dtls1_meth_func(DTLS1_VERSION, SSL_METHOD_NO_SUITEB, SSL_OP_NO_DTLSv1,
138                          dtlsv1_server_method,
139                          ossl_statem_accept,
140                          ssl_undefined_function, DTLSv1_enc_data)
141#endif
142#ifndef OPENSSL_NO_DTLS1_2_METHOD
143IMPLEMENT_dtls1_meth_func(DTLS1_2_VERSION, 0, SSL_OP_NO_DTLSv1_2,
144                          dtlsv1_2_server_method,
145                          ossl_statem_accept,
146                          ssl_undefined_function, DTLSv1_2_enc_data)
147#endif
148IMPLEMENT_dtls1_meth_func(DTLS_ANY_VERSION, 0, 0,
149                          DTLS_server_method,
150                          ossl_statem_accept,
151                          ssl_undefined_function, DTLSv1_2_enc_data)
152
153/*-
154 * DTLS client methods
155 */
156#ifndef OPENSSL_NO_DTLS1_METHOD
157IMPLEMENT_dtls1_meth_func(DTLS1_VERSION, SSL_METHOD_NO_SUITEB, SSL_OP_NO_DTLSv1,
158                          dtlsv1_client_method,
159                          ssl_undefined_function,
160                          ossl_statem_connect, DTLSv1_enc_data)
161IMPLEMENT_dtls1_meth_func(DTLS1_BAD_VER, SSL_METHOD_NO_SUITEB, SSL_OP_NO_DTLSv1,
162                          dtls_bad_ver_client_method,
163                          ssl_undefined_function,
164                          ossl_statem_connect, DTLSv1_enc_data)
165#endif
166#ifndef OPENSSL_NO_DTLS1_2_METHOD
167IMPLEMENT_dtls1_meth_func(DTLS1_2_VERSION, 0, SSL_OP_NO_DTLSv1_2,
168                          dtlsv1_2_client_method,
169                          ssl_undefined_function,
170                          ossl_statem_connect, DTLSv1_2_enc_data)
171#endif
172IMPLEMENT_dtls1_meth_func(DTLS_ANY_VERSION, 0, 0,
173                          DTLS_client_method,
174                          ssl_undefined_function,
175                          ossl_statem_connect, DTLSv1_2_enc_data)
176#ifndef OPENSSL_NO_DEPRECATED_1_1_0
177# ifndef OPENSSL_NO_TLS1_2_METHOD
178const SSL_METHOD *TLSv1_2_method(void)
179{
180    return tlsv1_2_method();
181}
182
183const SSL_METHOD *TLSv1_2_server_method(void)
184{
185    return tlsv1_2_server_method();
186}
187
188const SSL_METHOD *TLSv1_2_client_method(void)
189{
190    return tlsv1_2_client_method();
191}
192# endif
193
194# ifndef OPENSSL_NO_TLS1_1_METHOD
195const SSL_METHOD *TLSv1_1_method(void)
196{
197    return tlsv1_1_method();
198}
199
200const SSL_METHOD *TLSv1_1_server_method(void)
201{
202    return tlsv1_1_server_method();
203}
204
205const SSL_METHOD *TLSv1_1_client_method(void)
206{
207    return tlsv1_1_client_method();
208}
209# endif
210
211# ifndef OPENSSL_NO_TLS1_METHOD
212const SSL_METHOD *TLSv1_method(void)
213{
214    return tlsv1_method();
215}
216
217const SSL_METHOD *TLSv1_server_method(void)
218{
219    return tlsv1_server_method();
220}
221
222const SSL_METHOD *TLSv1_client_method(void)
223{
224    return tlsv1_client_method();
225}
226# endif
227
228# ifndef OPENSSL_NO_SSL3_METHOD
229const SSL_METHOD *SSLv3_method(void)
230{
231    return sslv3_method();
232}
233
234const SSL_METHOD *SSLv3_server_method(void)
235{
236    return sslv3_server_method();
237}
238
239const SSL_METHOD *SSLv3_client_method(void)
240{
241    return sslv3_client_method();
242}
243# endif
244
245# ifndef OPENSSL_NO_DTLS1_2_METHOD
246const SSL_METHOD *DTLSv1_2_method(void)
247{
248    return dtlsv1_2_method();
249}
250
251const SSL_METHOD *DTLSv1_2_server_method(void)
252{
253    return dtlsv1_2_server_method();
254}
255
256const SSL_METHOD *DTLSv1_2_client_method(void)
257{
258    return dtlsv1_2_client_method();
259}
260# endif
261
262# ifndef OPENSSL_NO_DTLS1_METHOD
263const SSL_METHOD *DTLSv1_method(void)
264{
265    return dtlsv1_method();
266}
267
268const SSL_METHOD *DTLSv1_server_method(void)
269{
270    return dtlsv1_server_method();
271}
272
273const SSL_METHOD *DTLSv1_client_method(void)
274{
275    return dtlsv1_client_method();
276}
277# endif
278
279#endif
280