1 #ifndef LIBFILEZILLA_TLS_LAYER_HEADER
2 #define LIBFILEZILLA_TLS_LAYER_HEADER
11 class logger_interface;
12 class tls_system_trust_store;
13 class tls_session_info;
18 struct certificate_verification_event_type;
98 bool server_handshake(std::vector<uint8_t>
const& session_to_resume = {}, std::string_view
const& preamble = {});
113 std::string get_protocol()
const;
115 std::string get_key_exchange()
const;
116 std::string get_cipher()
const;
117 std::string get_mac()
const;
118 int get_algorithm_warnings()
const;
167 bool set_alpn(std::vector<std::string>
const& alpns);
185 bool is_server()
const;
189 virtual int connect(
native_string const& host,
unsigned int port, address_type family = address_type::unknown)
override;
191 virtual int read(
void *
buffer,
unsigned int size,
int& error)
override;
192 virtual int write(
void const*
buffer,
unsigned int size,
int& error)
override;
201 virtual void FZ_PRIVATE_SYMBOL operator()(
event_base const& ev)
override;
203 friend class tls_layer_impl;
204 std::unique_ptr<tls_layer_impl> impl_;
The buffer class is a simple buffer where data can be appended at the end and consumed at the front....
Definition: buffer.hpp:26
Common base class for all events.
Definition: event.hpp:23
Simple handler for asynchronous event processing.
Definition: event_handler.hpp:55
A threaded event loop that supports sending events and timers.
Definition: event_loop.hpp:34
Abstract interface for logging strings.
Definition: logger.hpp:50
This is the recommended event class.
Definition: event.hpp:66
Interface for sockets.
Definition: socket.hpp:359
A base class for socket layers.
Definition: socket.hpp:606
A Transport Layer Security (TLS) layer.
Definition: tls_layer.hpp:47
bool resumed_session() const
After a successful handshake, returns whether the session has been resumed.
void set_min_tls_ver(tls_ver ver)
Sets minimum allowed TLS version.
virtual int shutdown() override
Signals peers that we want to close the connections.
bool set_certificate(std::string_view const &key, std::string_view const &certs, native_string const &password, bool pem=true)
Sets the certificate (and its chain) and the private key.
bool client_handshake(std::vector< uint8_t > const &required_certificate, std::vector< uint8_t > const &session_to_resume=std::vector< uint8_t >(), native_string const &session_hostname=native_string())
Starts shaking hands for a new TLS session as client.
virtual void set_event_handler(event_handler *pEvtHandler, fz::socket_event_flag retrigger_block=socket_event_flag{}) override
The handler for any events generated (or forwarded) by this layer.
static std::string get_gnutls_version()
Returns the version of the loaded GnuTLS library, may be different than the version used at compile-t...
std::vector< uint8_t > get_raw_certificate() const
Gets the session's peer certificate in DER.
void set_max_tls_ver(tls_ver ver)
Sets maximum allowed TLS versions.
std::vector< uint8_t > get_session_parameters() const
Gets session parameters for resumption.
void set_verification_result(bool trusted)
Must be called after having received certificate_verification_event.
std::string get_alpn() const
After a successful handshake, returns which protocol, if any, has been negotiated.
static std::pair< std::string, std::string > generate_selfsigned_certificate(native_string const &password, std::string const &distinguished_name, std::vector< std::string > const &hostnames)
Creates a new private key and a self-signed certificate.
static std::string list_tls_ciphers(std::string const &priority)
Returns a human-readable list of all TLS ciphers available with the passed priority string.
bool server_handshake(std::vector< uint8_t > const &session_to_resume={}, std::string_view const &preamble={})
Starts shaking hand for a new TLS session as server.
native_string get_hostname() const
If running as server, get the SNI sent by the client.
bool set_certificate_file(native_string const &keyfile, native_string const &certsfile, native_string const &password, bool pem=true)
Sets the file containing the certificate (and its chain) and the file with the corresponding private ...
bool client_handshake(event_handler *const verification_handler, std::vector< uint8_t > const &session_to_resume=std::vector< uint8_t >(), native_string const &session_hostname=native_string())
Starts shaking hands for a new TLS session as client.
virtual int shutdown_read() override
Check that all layers further down also have reached EOF.
bool set_alpn(std::string_view const &alpn)
Negotiate application protocol.
Opaque class to load the system trust store asynchronously.
Definition: tls_system_trust_store.hpp:30
The namespace used by libfilezilla.
Definition: apply.hpp:17
simple_event< certificate_verification_event_type, tls_layer *, tls_session_info > certificate_verification_event
This event gets sent during the handshake with details about the session and the used certificate.
Definition: tls_layer.hpp:18
std::wstring native_string
A string in the system's native character type and encoding. Note: This typedef changes depending on...
Definition: string.hpp:33
socket_state
State transitions are monotonically increasing.
Definition: socket.hpp:327
socket_event_flag
The type of a socket event.
Definition: socket.hpp:34
Socket classes for networking.