210 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			210 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | //
 | ||
|  | // ssl/context_base.hpp
 | ||
|  | // ~~~~~~~~~~~~~~~~~~~~
 | ||
|  | //
 | ||
|  | // Copyright (c) 2003-2023 Christopher M. Kohlhoff (chris at kohlhoff dot com)
 | ||
|  | //
 | ||
|  | // Distributed under the Boost Software License, Version 1.0. (See accompanying
 | ||
|  | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | ||
|  | //
 | ||
|  | 
 | ||
|  | #ifndef ASIO_SSL_CONTEXT_BASE_HPP
 | ||
|  | #define ASIO_SSL_CONTEXT_BASE_HPP
 | ||
|  | 
 | ||
|  | #if defined(_MSC_VER) && (_MSC_VER >= 1200)
 | ||
|  | # pragma once
 | ||
|  | #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
 | ||
|  | 
 | ||
|  | #include "asio/detail/config.hpp"
 | ||
|  | #include "asio/ssl/detail/openssl_types.hpp"
 | ||
|  | 
 | ||
|  | #include "asio/detail/push_options.hpp"
 | ||
|  | 
 | ||
|  | namespace asio { | ||
|  | namespace ssl { | ||
|  | 
 | ||
|  | /// The context_base class is used as a base for the basic_context class
 | ||
|  | /// template so that we have a common place to define various enums.
 | ||
|  | class context_base | ||
|  | { | ||
|  | public: | ||
|  |   /// Different methods supported by a context.
 | ||
|  |   enum method | ||
|  |   { | ||
|  |     /// Generic SSL version 2.
 | ||
|  |     sslv2, | ||
|  | 
 | ||
|  |     /// SSL version 2 client.
 | ||
|  |     sslv2_client, | ||
|  | 
 | ||
|  |     /// SSL version 2 server.
 | ||
|  |     sslv2_server, | ||
|  | 
 | ||
|  |     /// Generic SSL version 3.
 | ||
|  |     sslv3, | ||
|  | 
 | ||
|  |     /// SSL version 3 client.
 | ||
|  |     sslv3_client, | ||
|  | 
 | ||
|  |     /// SSL version 3 server.
 | ||
|  |     sslv3_server, | ||
|  | 
 | ||
|  |     /// Generic TLS version 1.
 | ||
|  |     tlsv1, | ||
|  | 
 | ||
|  |     /// TLS version 1 client.
 | ||
|  |     tlsv1_client, | ||
|  | 
 | ||
|  |     /// TLS version 1 server.
 | ||
|  |     tlsv1_server, | ||
|  | 
 | ||
|  |     /// Generic SSL/TLS.
 | ||
|  |     sslv23, | ||
|  | 
 | ||
|  |     /// SSL/TLS client.
 | ||
|  |     sslv23_client, | ||
|  | 
 | ||
|  |     /// SSL/TLS server.
 | ||
|  |     sslv23_server, | ||
|  | 
 | ||
|  |     /// Generic TLS version 1.1.
 | ||
|  |     tlsv11, | ||
|  | 
 | ||
|  |     /// TLS version 1.1 client.
 | ||
|  |     tlsv11_client, | ||
|  | 
 | ||
|  |     /// TLS version 1.1 server.
 | ||
|  |     tlsv11_server, | ||
|  | 
 | ||
|  |     /// Generic TLS version 1.2.
 | ||
|  |     tlsv12, | ||
|  | 
 | ||
|  |     /// TLS version 1.2 client.
 | ||
|  |     tlsv12_client, | ||
|  | 
 | ||
|  |     /// TLS version 1.2 server.
 | ||
|  |     tlsv12_server, | ||
|  | 
 | ||
|  |     /// Generic TLS version 1.3.
 | ||
|  |     tlsv13, | ||
|  | 
 | ||
|  |     /// TLS version 1.3 client.
 | ||
|  |     tlsv13_client, | ||
|  | 
 | ||
|  |     /// TLS version 1.3 server.
 | ||
|  |     tlsv13_server, | ||
|  | 
 | ||
|  |     /// Generic TLS.
 | ||
|  |     tls, | ||
|  | 
 | ||
|  |     /// TLS client.
 | ||
|  |     tls_client, | ||
|  | 
 | ||
|  |     /// TLS server.
 | ||
|  |     tls_server | ||
|  |   }; | ||
|  | 
 | ||
|  |   /// Bitmask type for SSL options.
 | ||
|  |   typedef uint64_t options; | ||
|  | 
 | ||
|  | #if defined(GENERATING_DOCUMENTATION)
 | ||
|  |   /// Implement various bug workarounds.
 | ||
|  |   static const uint64_t default_workarounds = implementation_defined; | ||
|  | 
 | ||
|  |   /// Always create a new key when using tmp_dh parameters.
 | ||
|  |   static const uint64_t single_dh_use = implementation_defined; | ||
|  | 
 | ||
|  |   /// Disable SSL v2.
 | ||
|  |   static const uint64_t no_sslv2 = implementation_defined; | ||
|  | 
 | ||
|  |   /// Disable SSL v3.
 | ||
|  |   static const uint64_t no_sslv3 = implementation_defined; | ||
|  | 
 | ||
|  |   /// Disable TLS v1.
 | ||
|  |   static const uint64_t no_tlsv1 = implementation_defined; | ||
|  | 
 | ||
|  |   /// Disable TLS v1.1.
 | ||
|  |   static const uint64_t no_tlsv1_1 = implementation_defined; | ||
|  | 
 | ||
|  |   /// Disable TLS v1.2.
 | ||
|  |   static const uint64_t no_tlsv1_2 = implementation_defined; | ||
|  | 
 | ||
|  |   /// Disable TLS v1.3.
 | ||
|  |   static const uint64_t no_tlsv1_3 = implementation_defined; | ||
|  | 
 | ||
|  |   /// Disable compression. Compression is disabled by default.
 | ||
|  |   static const uint64_t no_compression = implementation_defined; | ||
|  | #else
 | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, default_workarounds = SSL_OP_ALL); | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, single_dh_use = SSL_OP_SINGLE_DH_USE); | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_sslv2 = SSL_OP_NO_SSLv2); | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_sslv3 = SSL_OP_NO_SSLv3); | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_tlsv1 = SSL_OP_NO_TLSv1); | ||
|  | # if defined(SSL_OP_NO_TLSv1_1)
 | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_tlsv1_1 = SSL_OP_NO_TLSv1_1); | ||
|  | # else // defined(SSL_OP_NO_TLSv1_1)
 | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_tlsv1_1 = 0x10000000L); | ||
|  | # endif // defined(SSL_OP_NO_TLSv1_1)
 | ||
|  | # if defined(SSL_OP_NO_TLSv1_2)
 | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_tlsv1_2 = SSL_OP_NO_TLSv1_2); | ||
|  | # else // defined(SSL_OP_NO_TLSv1_2)
 | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_tlsv1_2 = 0x08000000L); | ||
|  | # endif // defined(SSL_OP_NO_TLSv1_2)
 | ||
|  | # if defined(SSL_OP_NO_TLSv1_3)
 | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_tlsv1_3 = SSL_OP_NO_TLSv1_3); | ||
|  | # else // defined(SSL_OP_NO_TLSv1_3)
 | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_tlsv1_3 = 0x20000000L); | ||
|  | # endif // defined(SSL_OP_NO_TLSv1_3)
 | ||
|  | # if defined(SSL_OP_NO_COMPRESSION)
 | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_compression = SSL_OP_NO_COMPRESSION); | ||
|  | # else // defined(SSL_OP_NO_COMPRESSION)
 | ||
|  |   ASIO_STATIC_CONSTANT(uint64_t, no_compression = 0x20000L); | ||
|  | # endif // defined(SSL_OP_NO_COMPRESSION)
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  |   /// File format types.
 | ||
|  |   enum file_format | ||
|  |   { | ||
|  |     /// ASN.1 file.
 | ||
|  |     asn1, | ||
|  | 
 | ||
|  |     /// PEM file.
 | ||
|  |     pem | ||
|  |   }; | ||
|  | 
 | ||
|  | #if !defined(GENERATING_DOCUMENTATION)
 | ||
|  |   // The following types and constants are preserved for backward compatibility.
 | ||
|  |   // New programs should use the equivalents of the same names that are defined
 | ||
|  |   // in the asio::ssl namespace.
 | ||
|  |   typedef int verify_mode; | ||
|  |   ASIO_STATIC_CONSTANT(int, verify_none = SSL_VERIFY_NONE); | ||
|  |   ASIO_STATIC_CONSTANT(int, verify_peer = SSL_VERIFY_PEER); | ||
|  |   ASIO_STATIC_CONSTANT(int, | ||
|  |       verify_fail_if_no_peer_cert = SSL_VERIFY_FAIL_IF_NO_PEER_CERT); | ||
|  |   ASIO_STATIC_CONSTANT(int, verify_client_once = SSL_VERIFY_CLIENT_ONCE); | ||
|  | #endif
 | ||
|  | 
 | ||
|  |   /// Purpose of PEM password.
 | ||
|  |   enum password_purpose | ||
|  |   { | ||
|  |     /// The password is needed for reading/decryption.
 | ||
|  |     for_reading, | ||
|  | 
 | ||
|  |     /// The password is needed for writing/encryption.
 | ||
|  |     for_writing | ||
|  |   }; | ||
|  | 
 | ||
|  | protected: | ||
|  |   /// Protected destructor to prevent deletion through this type.
 | ||
|  |   ~context_base() | ||
|  |   { | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | } // namespace ssl
 | ||
|  | } // namespace asio
 | ||
|  | 
 | ||
|  | #include "asio/detail/pop_options.hpp"
 | ||
|  | 
 | ||
|  | #endif // ASIO_SSL_CONTEXT_BASE_HPP
 |