9#ifndef BOTAN_TLS_RECORDS_H_
10#define BOTAN_TLS_RECORDS_H_
12#include <botan/tls_algos.h>
13#include <botan/tls_magic.h>
14#include <botan/tls_version.h>
15#include <botan/aead.h>
27class Connection_Sequence_Numbers;
43 bool uses_encrypt_then_mac);
53 std::vector<uint8_t>
aead_nonce(
const uint8_t record[],
size_t record_len, uint64_t seq);
57 uint16_t ptext_length);
64 std::chrono::seconds
age()
const
66 return std::chrono::duration_cast<std::chrono::seconds>(
67 std::chrono::system_clock::now() - m_start_time);
71 std::chrono::system_clock::time_point m_start_time;
72 std::unique_ptr<AEAD_Mode> m_aead;
74 std::vector<uint8_t> m_nonce;
76 size_t m_nonce_bytes_from_handshake;
77 size_t m_nonce_bytes_from_record;
99 size_t needed()
const {
return m_needed; }
115 return static_cast<uint16_t
>(
sequence() >> 48);
142 Protocol_Version record_version,
143 uint64_t record_sequence,
144 const uint8_t* message,
160 Protocol_Version record_version,
161 uint64_t record_sequence,
162 const uint8_t* message,
164 Connection_Cipher_State& cipherstate,
176 const uint8_t input[],
182 bool allow_epoch0_restart);
#define BOTAN_ASSERT_NOMSG(expr)
#define BOTAN_ASSERT_NONNULL(ptr)
std::chrono::seconds age() const
size_t nonce_bytes_from_record() const
Nonce_Format nonce_format() const
size_t nonce_bytes_from_handshake() const
std::vector< uint8_t > aead_nonce(uint64_t seq, RandomNumberGenerator &rng)
std::vector< uint8_t > format_ad(uint64_t seq, uint8_t type, Protocol_Version version, uint16_t ptext_length)
int(* final)(unsigned char *, CTX *)
void write_record(secure_vector< uint8_t > &output, uint8_t record_type, Protocol_Version version, uint64_t record_sequence, const uint8_t *message, size_t message_len, Connection_Cipher_State &cs, RandomNumberGenerator &rng)
void write_unencrypted_record(secure_vector< uint8_t > &output, uint8_t record_type, Protocol_Version version, uint64_t record_sequence, const uint8_t *message, size_t message_len)
std::function< std::shared_ptr< Connection_Cipher_State >(uint16_t)> get_cipherstate_fn
Record_Header read_record(bool is_datagram, secure_vector< uint8_t > &readbuf, const uint8_t input[], size_t input_len, size_t &consumed, secure_vector< uint8_t > &recbuf, Connection_Sequence_Numbers *sequence_numbers, get_cipherstate_fn get_cipherstate, bool allow_epoch0_restart)
std::vector< T, secure_allocator< T > > secure_vector