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