10 #ifndef BOTAN_TLS_CALLBACKS_H_
11 #define BOTAN_TLS_CALLBACKS_H_
13 #include <botan/tls_session.h>
14 #include <botan/tls_alert.h>
15 #include <botan/pubkey.h>
20 class Certificate_Store;
21 class X509_Certificate;
31 class Handshake_Message;
34 class Certificate_Status_Request;
56 virtual void tls_emit_data(
const uint8_t data[],
size_t size) = 0;
69 virtual void tls_record_received(uint64_t seq_no,
const uint8_t data[],
size_t size) = 0;
79 virtual void tls_alert(
Alert alert) = 0;
91 virtual bool tls_session_established(
const Session& session) = 0;
129 virtual void tls_verify_cert_chain(
130 const std::vector<X509_Certificate>& cert_chain,
131 const std::vector<std::shared_ptr<const OCSP::Response>>& ocsp_responses,
132 const std::vector<Certificate_Store*>& trusted_roots,
134 const std::string& hostname,
146 return std::chrono::milliseconds(0);
164 return std::vector<uint8_t>();
181 virtual std::vector<uint8_t> tls_sign_message(
184 const std::string& emsa,
186 const std::vector<uint8_t>& msg);
202 virtual bool tls_verify_message(
204 const std::string& emsa,
206 const std::vector<uint8_t>& msg,
207 const std::vector<uint8_t>& sig);
223 virtual std::pair<secure_vector<uint8_t>, std::vector<uint8_t>> tls_dh_agree(
224 const std::vector<uint8_t>& modulus,
225 const std::vector<uint8_t>& generator,
226 const std::vector<uint8_t>& peer_public_value,
244 virtual std::pair<secure_vector<uint8_t>, std::vector<uint8_t>> tls_ecdh_agree(
245 const std::string& curve_name,
246 const std::vector<uint8_t>& peer_public_value,
273 virtual std::string tls_server_choose_app_protocol(
const std::vector<std::string>& client_protos);
317 virtual std::string tls_decode_group_param(
Group_Params group_param);
329 virtual std::string tls_peer_network_identity();
369 typedef std::function<void (const uint8_t[], size_t)>
output_fn;
370 typedef std::function<void (const uint8_t[], size_t)>
data_cb;
371 typedef std::function<void (Alert, const uint8_t[], size_t)>
alert_cb;
389 BOTAN_DEPRECATED(
"Use TLS::Callbacks (virtual interface).")
391 handshake_cb hs_cb, handshake_msg_cb hs_msg_cb =
nullptr,
393 : m_output_function(data_output_fn), m_app_data_cb(app_data_cb),
394 m_alert_cb(
std::bind(recv_alert_cb,
std::placeholders::_1,
nullptr, 0)),
395 m_hs_cb(hs_cb), m_hs_msg_cb(hs_msg_cb), m_next_proto(next_proto) {}
397 BOTAN_DEPRECATED(
"Use TLS::Callbacks (virtual interface).")
399 std::function<
void (
Alert)> recv_alert_cb,
401 handshake_msg_cb hs_msg_cb =
nullptr,
403 : m_output_function(data_output_fn), m_app_data_cb(app_data_cb),
404 m_alert_cb(recv_alert_cb),
405 m_hs_cb(hs_cb), m_hs_msg_cb(hs_msg_cb), m_next_proto(next_proto) {}
409 output_fn data_output_fn, data_cb app_data_cb,
410 std::function<
void (
Alert)> recv_alert_cb,
412 handshake_msg_cb hs_msg_cb =
nullptr,
414 : m_output_function(data_output_fn),
415 m_app_data_cb(app_data_cb),
416 m_alert_cb(recv_alert_cb),
418 m_hs_msg_cb(hs_msg_cb),
419 m_next_proto(next_proto) {}
422 output_fn data_output_fn, data_cb app_data_cb, alert_cb recv_alert_cb,
423 handshake_cb hs_cb, handshake_msg_cb hs_msg_cb =
nullptr,
425 : m_output_function(data_output_fn), m_app_data_cb(app_data_cb),
426 m_alert_cb(
std::bind(recv_alert_cb,
std::placeholders::_1, nullptr, 0)),
427 m_hs_cb(hs_cb), m_hs_msg_cb(hs_msg_cb), m_next_proto(next_proto) {}
433 "Invalid TLS output function callback.");
434 m_output_function(data, size);
440 "Invalid TLS app data callback.");
441 m_app_data_cb(data, size);
447 "Invalid TLS alert callback.");
454 "Invalid TLS handshake callback.");
455 return m_hs_cb(session);
460 if(m_next_proto !=
nullptr) {
return m_next_proto(client_protos); }
468 if(m_hs_msg_cb !=
nullptr) { m_hs_msg_cb(hmsg); }
472 const output_fn m_output_function;
473 const data_cb m_app_data_cb;
474 const std::function<void (Alert)> m_alert_cb;
475 const handshake_cb m_hs_cb;
476 const handshake_msg_cb m_hs_msg_cb;
477 const next_protocol_fn m_next_proto;
std::function< void(const uint8_t[], size_t)> data_cb
SILENCE_DEPRECATION_WARNING
void tls_emit_data(const uint8_t data[], size_t size) override
virtual void tls_log_debug(const char *what)
Compat_Callbacks(SILENCE_DEPRECATION_WARNING, output_fn data_output_fn, data_cb app_data_cb, std::function< void(Alert)> recv_alert_cb, handshake_cb hs_cb, handshake_msg_cb hs_msg_cb=nullptr, next_protocol_fn next_proto=nullptr)
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
void tls_alert(Alert alert) override
#define BOTAN_ASSERT(expr, assertion_made)
std::function< bool(const Session &)> handshake_cb
std::function< void(Alert, const uint8_t[], size_t)> alert_cb
bool tls_session_established(const Session &session) override
#define BOTAN_UNUSED(...)
Compat_Callbacks(SILENCE_DEPRECATION_WARNING, output_fn data_output_fn, data_cb app_data_cb, alert_cb recv_alert_cb, handshake_cb hs_cb, handshake_msg_cb hs_msg_cb=nullptr, next_protocol_fn next_proto=nullptr)
virtual void tls_session_activated()
std::function< void(const uint8_t[], size_t)> output_fn
std::function< void(const Handshake_Message &)> handshake_msg_cb
std::function< std::string(std::vector< std::string >)> next_protocol_fn
void tls_inspect_handshake_msg(const Handshake_Message &hmsg) override
virtual std::chrono::milliseconds tls_verify_cert_chain_ocsp_timeout() const
std::string tls_server_choose_app_protocol(const std::vector< std::string > &client_protos) override
virtual void tls_log_error(const char *err)
virtual void tls_log_debug_bin(const char *descr, const uint8_t val[], size_t val_len)
virtual std::vector< uint8_t > tls_provide_cert_status(const std::vector< X509_Certificate > &chain, const Certificate_Status_Request &csr)
void tls_record_received(uint64_t, const uint8_t data[], size_t size) override