47 lines
1.7 KiB
C++
47 lines
1.7 KiB
C++
#pragma once
|
|
#include <expected>
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
#include <boost/asio/ip/tcp.hpp>
|
|
#include <boost/asio/ssl/context.hpp>
|
|
#include <boost/asio/ssl/stream.hpp>
|
|
|
|
#include <modulus.hpp>
|
|
|
|
namespace ligo {
|
|
|
|
enum class security_mode {
|
|
NONE,
|
|
TLS,
|
|
DTLS,
|
|
};
|
|
|
|
enum class verify_mode {
|
|
DEFAULTED,
|
|
NONE,
|
|
PEER,
|
|
};
|
|
|
|
struct security_config {
|
|
ligo::security_mode mode{ligo::security_mode::NONE};
|
|
ligo::verify_mode verify{ligo::verify_mode::DEFAULTED};
|
|
std::string peer_name{};
|
|
std::string ca_file{};
|
|
std::string certificate_chain_file{};
|
|
std::string private_key_file{};
|
|
std::shared_ptr<boost::asio::ssl::context> tls_context{};
|
|
};
|
|
|
|
auto make_tls_client_context(ligo::security_config const& config) -> std::expected<std::shared_ptr<boost::asio::ssl::context>, modulus::error>;
|
|
auto make_tls_server_context(ligo::security_config const& config) -> std::expected<std::shared_ptr<boost::asio::ssl::context>, modulus::error>;
|
|
auto apply_tls_client_verification(boost::asio::ssl::stream<boost::asio::ip::tcp::socket>& stream, std::string const& host, ligo::security_config const& config) -> std::expected<void, modulus::error>;
|
|
auto configure_tls_client_stream(boost::asio::ssl::stream<boost::asio::ip::tcp::socket>& stream, std::string const& host, ligo::security_config const& config) -> std::expected<void, modulus::error>;
|
|
auto validate_tls_server_config(std::string_view protocol, ligo::security_config const& config) -> std::expected<void, modulus::error>;
|
|
auto validate_tls_server_context(std::shared_ptr<boost::asio::ssl::context> const& context) -> std::expected<void, modulus::error>;
|
|
auto unsupported_security(std::string_view protocol, ligo::security_mode mode) -> modulus::error;
|
|
|
|
}
|