9 #ifndef BOTAN_TLS_RECORDS_H__
10 #define BOTAN_TLS_RECORDS_H__
12 #include <botan/tls_magic.h>
13 #include <botan/tls_version.h>
14 #include <botan/aead.h>
15 #include <botan/block_cipher.h>
16 #include <botan/mac.h>
27 class Connection_Sequence_Numbers;
43 bool uses_encrypt_then_mac);
49 std::vector<uint8_t>
aead_nonce(
const uint8_t record[],
size_t record_len, uint64_t seq);
53 uint16_t ptext_length);
59 std::chrono::seconds
age()
const
61 return std::chrono::duration_cast<std::chrono::seconds>(
62 std::chrono::system_clock::now() - m_start_time);
66 std::chrono::system_clock::time_point m_start_time;
67 std::unique_ptr<AEAD_Mode> m_aead;
69 std::vector<uint8_t> m_nonce;
70 size_t m_nonce_bytes_from_handshake;
71 size_t m_nonce_bytes_from_record;
82 : m_data(data), m_sequence(sequence), m_protocol_version(protocol_version),
83 m_type(type), m_size(data.size()) {}
107 : m_type(0), m_sequence(0), m_data(data), m_size(size) {}
109 : m_type(type), m_sequence(sequence), m_data(data),
120 const uint8_t* m_data;
129 : m_data(data), m_size(size), m_consumed(consumed),
130 m_is_datagram(is_datagram) {}
142 const uint8_t* m_data;
159 Record_Message rec_msg,
160 Protocol_Version version,
161 uint64_t msg_sequence,
162 Connection_Cipher_State* cipherstate,
Record_Message(uint8_t type, uint64_t sequence, const uint8_t *data, size_t size)
uint64_t * get_sequence()
std::vector< uint8_t > aead_nonce(uint64_t seq, RandomNumberGenerator &rng)
const uint8_t * get_data()
size_t nonce_bytes_from_record() const
std::function< std::shared_ptr< Connection_Cipher_State >uint16_t)> get_cipherstate_fn
size_t read_record(secure_vector< uint8_t > &readbuf, Record_Raw_Input &raw_input, Record &rec, Connection_Sequence_Numbers *sequence_numbers, get_cipherstate_fn get_cipherstate)
Connection_Cipher_State(Protocol_Version version, Connection_Side which_side, bool is_our_side, const Ciphersuite &suite, const Session_Keys &keys, bool uses_encrypt_then_mac)
Record_Message(const uint8_t *data, size_t size)
secure_vector< uint8_t > & get_data()
std::vector< T, secure_allocator< T >> secure_vector
std::vector< uint8_t > format_ad(uint64_t seq, uint8_t type, Protocol_Version version, uint16_t ptext_length)
uint64_t & get_sequence()
Record(secure_vector< uint8_t > &data, uint64_t *sequence, Protocol_Version *protocol_version, Record_Type *type)
size_t nonce_bytes_from_handshake() const
void write_record(secure_vector< uint8_t > &output, Record_Message msg, Protocol_Version version, uint64_t seq, Connection_Cipher_State *cs, RandomNumberGenerator &rng)
Protocol_Version * get_protocol_version()
std::chrono::seconds age() const