8#ifndef BOTAN_ROUGHTIME_H_
9#define BOTAN_ROUGHTIME_H_
15#include <botan/ed25519.h>
19class RandomNumberGenerator;
36 Nonce(
const std::vector<uint8_t>& nonce);
38 Nonce(
const std::array<uint8_t, 64>& nonce)
43 const std::array<uint8_t, 64>&
get_nonce()
const {
return m_nonce; }
45 std::array<uint8_t, 64> m_nonce;
65 static Response from_bits(
const std::vector<uint8_t>& response,
const Nonce& nonce);
73 Response(
const std::array<uint8_t, 72>& dele,
74 const std::array<uint8_t, 64>& sig,
75 sys_microseconds64 utc_midp,
76 microseconds32 utc_radius)
79 , m_utc_midpoint {utc_midp}
80 , m_utc_radius {utc_radius}
82 const std::array<uint8_t, 72> m_cert_dele;
83 const std::array<uint8_t, 64> m_cert_sig;
84 const sys_microseconds64 m_utc_midpoint;
85 const microseconds32 m_utc_radius;
91 Link(
const std::vector<uint8_t>& response,
93 const Nonce& nonce_or_blind)
94 : m_response{response}
95 , m_public_key{public_key}
96 , m_nonce_or_blind{nonce_or_blind}
98 const std::vector<uint8_t>&
response()
const {
return m_response; }
104 std::vector<uint8_t> m_response;
106 Nonce m_nonce_or_blind;
113 Chain(
const std::string& str);
114 const std::vector<Link>&
links()
const {
return m_links; }
115 std::vector<Response> responses()
const;
117 void append(
const Link& new_link,
size_t max_chain_size);
120 std::vector<Link> m_links;
139 std::chrono::milliseconds timeout =
std::chrono::seconds(3));
146 const std::vector<std::string>& addresses)
148 , m_public_key { public_key }
149 , m_addresses { addresses }
151 const std::string&
name()
const {
return m_name;}
153 const std::vector<std::string>&
addresses()
const {
return m_addresses;}
158 std::vector<std::string> m_addresses;
const std::vector< Link > & links() const
const Ed25519_PublicKey & public_key() const
const Nonce & nonce_or_blind() const
const std::vector< uint8_t > & response() const
Link(const std::vector< uint8_t > &response, const Ed25519_PublicKey &public_key, const Nonce &nonce_or_blind)
const std::array< uint8_t, 64 > & get_nonce() const
Nonce(const std::array< uint8_t, 64 > &nonce)
bool operator==(const Nonce &rhs) const
std::chrono::time_point< std::chrono::system_clock, microseconds64 > sys_microseconds64
microseconds32 utc_radius() const
sys_microseconds64 utc_midpoint() const
std::chrono::duration< uint32_t, std::micro > microseconds32
std::chrono::duration< uint64_t, std::micro > microseconds64
Roughtime_Error(const std::string &s)
ErrorType error_type() const noexcept override
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
std::vector< uint8_t > online_request(const std::string &uri, const Nonce &nonce, std::chrono::milliseconds timeout)
std::vector< Server_Information > servers_from_str(const std::string &str)
Nonce nonce_from_blind(const std::vector< uint8_t > &previous_response, const Nonce &blind)
std::array< uint8_t, request_min_size > encode_request(const Nonce &nonce)
const unsigned request_min_size
std::string to_string(ErrorType type)
Convert an ErrorType to string.