1 //
2 // ssl/context_base.hpp
3 // ~~~~~~~~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6 //
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 //
10 
11 #ifndef BOOST_ASIO_SSL_CONTEXT_BASE_HPP
12 #define BOOST_ASIO_SSL_CONTEXT_BASE_HPP
13 
14 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15 # pragma once
16 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17 
18 #include <boost/asio/detail/config.hpp>
19 #include <boost/asio/ssl/detail/openssl_types.hpp>
20 
21 #include <boost/asio/detail/push_options.hpp>
22 
23 namespace boost {
24 namespace asio {
25 namespace ssl {
26 
27 /// The context_base class is used as a base for the basic_context class
28 /// template so that we have a common place to define various enums.
29 class context_base
30 {
31 public:
32   /// Different methods supported by a context.
33   enum method
34   {
35     /// Generic SSL version 2.
36     sslv2,
37 
38     /// SSL version 2 client.
39     sslv2_client,
40 
41     /// SSL version 2 server.
42     sslv2_server,
43 
44     /// Generic SSL version 3.
45     sslv3,
46 
47     /// SSL version 3 client.
48     sslv3_client,
49 
50     /// SSL version 3 server.
51     sslv3_server,
52 
53     /// Generic TLS version 1.
54     tlsv1,
55 
56     /// TLS version 1 client.
57     tlsv1_client,
58 
59     /// TLS version 1 server.
60     tlsv1_server,
61 
62     /// Generic SSL/TLS.
63     sslv23,
64 
65     /// SSL/TLS client.
66     sslv23_client,
67 
68     /// SSL/TLS server.
69     sslv23_server,
70 
71     /// Generic TLS version 1.1.
72     tlsv11,
73 
74     /// TLS version 1.1 client.
75     tlsv11_client,
76 
77     /// TLS version 1.1 server.
78     tlsv11_server,
79 
80     /// Generic TLS version 1.2.
81     tlsv12,
82 
83     /// TLS version 1.2 client.
84     tlsv12_client,
85 
86     /// TLS version 1.2 server.
87     tlsv12_server,
88 
89     /// Generic TLS version 1.3.
90     tlsv13,
91 
92     /// TLS version 1.3 client.
93     tlsv13_client,
94 
95     /// TLS version 1.3 server.
96     tlsv13_server,
97 
98     /// Generic TLS.
99     tls,
100 
101     /// TLS client.
102     tls_client,
103 
104     /// TLS server.
105     tls_server
106   };
107 
108   /// Bitmask type for SSL options.
109   typedef long options;
110 
111 #if defined(GENERATING_DOCUMENTATION)
112   /// Implement various bug workarounds.
113   static const long default_workarounds = implementation_defined;
114 
115   /// Always create a new key when using tmp_dh parameters.
116   static const long single_dh_use = implementation_defined;
117 
118   /// Disable SSL v2.
119   static const long no_sslv2 = implementation_defined;
120 
121   /// Disable SSL v3.
122   static const long no_sslv3 = implementation_defined;
123 
124   /// Disable TLS v1.
125   static const long no_tlsv1 = implementation_defined;
126 
127   /// Disable TLS v1.1.
128   static const long no_tlsv1_1 = implementation_defined;
129 
130   /// Disable TLS v1.2.
131   static const long no_tlsv1_2 = implementation_defined;
132 
133   /// Disable TLS v1.3.
134   static const long no_tlsv1_3 = implementation_defined;
135 
136   /// Disable compression. Compression is disabled by default.
137   static const long no_compression = implementation_defined;
138 #else
139   BOOST_ASIO_STATIC_CONSTANT(long, default_workarounds = SSL_OP_ALL);
140   BOOST_ASIO_STATIC_CONSTANT(long, single_dh_use = SSL_OP_SINGLE_DH_USE);
141   BOOST_ASIO_STATIC_CONSTANT(long, no_sslv2 = SSL_OP_NO_SSLv2);
142   BOOST_ASIO_STATIC_CONSTANT(long, no_sslv3 = SSL_OP_NO_SSLv3);
143   BOOST_ASIO_STATIC_CONSTANT(long, no_tlsv1 = SSL_OP_NO_TLSv1);
144 # if defined(SSL_OP_NO_TLSv1_1)
145   BOOST_ASIO_STATIC_CONSTANT(long, no_tlsv1_1 = SSL_OP_NO_TLSv1_1);
146 # else // defined(SSL_OP_NO_TLSv1_1)
147   BOOST_ASIO_STATIC_CONSTANT(long, no_tlsv1_1 = 0x10000000L);
148 # endif // defined(SSL_OP_NO_TLSv1_1)
149 # if defined(SSL_OP_NO_TLSv1_2)
150   BOOST_ASIO_STATIC_CONSTANT(long, no_tlsv1_2 = SSL_OP_NO_TLSv1_2);
151 # else // defined(SSL_OP_NO_TLSv1_2)
152   BOOST_ASIO_STATIC_CONSTANT(long, no_tlsv1_2 = 0x08000000L);
153 # endif // defined(SSL_OP_NO_TLSv1_2)
154 # if defined(SSL_OP_NO_TLSv1_3)
155   BOOST_ASIO_STATIC_CONSTANT(long, no_tlsv1_3 = SSL_OP_NO_TLSv1_3);
156 # else // defined(SSL_OP_NO_TLSv1_3)
157   BOOST_ASIO_STATIC_CONSTANT(long, no_tlsv1_3 = 0x20000000L);
158 # endif // defined(SSL_OP_NO_TLSv1_3)
159 # if defined(SSL_OP_NO_COMPRESSION)
160   BOOST_ASIO_STATIC_CONSTANT(long, no_compression = SSL_OP_NO_COMPRESSION);
161 # else // defined(SSL_OP_NO_COMPRESSION)
162   BOOST_ASIO_STATIC_CONSTANT(long, no_compression = 0x20000L);
163 # endif // defined(SSL_OP_NO_COMPRESSION)
164 #endif
165 
166   /// File format types.
167   enum file_format
168   {
169     /// ASN.1 file.
170     asn1,
171 
172     /// PEM file.
173     pem
174   };
175 
176 #if !defined(GENERATING_DOCUMENTATION)
177   // The following types and constants are preserved for backward compatibility.
178   // New programs should use the equivalents of the same names that are defined
179   // in the boost::asio::ssl namespace.
180   typedef int verify_mode;
181   BOOST_ASIO_STATIC_CONSTANT(int, verify_none = SSL_VERIFY_NONE);
182   BOOST_ASIO_STATIC_CONSTANT(int, verify_peer = SSL_VERIFY_PEER);
183   BOOST_ASIO_STATIC_CONSTANT(int,
184       verify_fail_if_no_peer_cert = SSL_VERIFY_FAIL_IF_NO_PEER_CERT);
185   BOOST_ASIO_STATIC_CONSTANT(int, verify_client_once = SSL_VERIFY_CLIENT_ONCE);
186 #endif
187 
188   /// Purpose of PEM password.
189   enum password_purpose
190   {
191     /// The password is needed for reading/decryption.
192     for_reading,
193 
194     /// The password is needed for writing/encryption.
195     for_writing
196   };
197 
198 protected:
199   /// Protected destructor to prevent deletion through this type.
~context_base()200   ~context_base()
201   {
202   }
203 };
204 
205 } // namespace ssl
206 } // namespace asio
207 } // namespace boost
208 
209 #include <boost/asio/detail/pop_options.hpp>
210 
211 #endif // BOOST_ASIO_SSL_CONTEXT_BASE_HPP
212