|
Botan
1.11.15
|
#include <tls_seq_numbers.h>
Public Member Functions | |
| bool | already_seen (u64bit sequence) const override |
| u16bit | current_read_epoch () const override |
| u16bit | current_write_epoch () const override |
| Datagram_Sequence_Numbers () | |
| void | new_read_cipher_state () override |
| void | new_write_cipher_state () override |
| u64bit | next_read_sequence () override |
| u64bit | next_write_sequence (u16bit epoch) override |
| void | read_accept (u64bit sequence) override |
Definition at line 55 of file tls_seq_numbers.h.
Definition at line 58 of file tls_seq_numbers.h.
{ m_write_seqs[0] = 0; }
| bool Botan::TLS::Datagram_Sequence_Numbers::already_seen | ( | u64bit | sequence | ) | const [inline, override, virtual] |
Implements Botan::TLS::Connection_Sequence_Numbers.
Definition at line 83 of file tls_seq_numbers.h.
{
const size_t window_size = sizeof(m_window_bits) * 8;
if(sequence > m_window_highest)
return false;
const u64bit offset = m_window_highest - sequence;
if(offset >= window_size)
return true; // really old?
return (((m_window_bits >> offset) & 1) == 1);
}
| u16bit Botan::TLS::Datagram_Sequence_Numbers::current_read_epoch | ( | ) | const [inline, override, virtual] |
Implements Botan::TLS::Connection_Sequence_Numbers.
Definition at line 68 of file tls_seq_numbers.h.
{ return m_read_epoch; }
| u16bit Botan::TLS::Datagram_Sequence_Numbers::current_write_epoch | ( | ) | const [inline, override, virtual] |
Implements Botan::TLS::Connection_Sequence_Numbers.
Definition at line 69 of file tls_seq_numbers.h.
{ return m_write_epoch; }
| void Botan::TLS::Datagram_Sequence_Numbers::new_read_cipher_state | ( | ) | [inline, override, virtual] |
Implements Botan::TLS::Connection_Sequence_Numbers.
Definition at line 60 of file tls_seq_numbers.h.
{ m_read_epoch += 1; }
| void Botan::TLS::Datagram_Sequence_Numbers::new_write_cipher_state | ( | ) | [inline, override, virtual] |
Implements Botan::TLS::Connection_Sequence_Numbers.
Definition at line 62 of file tls_seq_numbers.h.
{
m_write_epoch += 1;
m_write_seqs[m_write_epoch] = 0;
}
| u64bit Botan::TLS::Datagram_Sequence_Numbers::next_read_sequence | ( | ) | [inline, override, virtual] |
Implements Botan::TLS::Connection_Sequence_Numbers.
Definition at line 78 of file tls_seq_numbers.h.
{
throw std::runtime_error("DTLS uses explicit sequence numbers");
}
| u64bit Botan::TLS::Datagram_Sequence_Numbers::next_write_sequence | ( | u16bit | epoch | ) | [inline, override, virtual] |
Implements Botan::TLS::Connection_Sequence_Numbers.
Definition at line 71 of file tls_seq_numbers.h.
References BOTAN_ASSERT.
{
auto i = m_write_seqs.find(epoch);
BOTAN_ASSERT(i != m_write_seqs.end(), "Found epoch");
return (static_cast<u64bit>(epoch) << 48) | i->second++;
}
| void Botan::TLS::Datagram_Sequence_Numbers::read_accept | ( | u64bit | sequence | ) | [inline, override, virtual] |
Implements Botan::TLS::Connection_Sequence_Numbers.
Definition at line 98 of file tls_seq_numbers.h.
{
const size_t window_size = sizeof(m_window_bits) * 8;
if(sequence > m_window_highest)
{
const size_t offset = sequence - m_window_highest;
m_window_highest += offset;
if(offset >= window_size)
m_window_bits = 0;
else
m_window_bits <<= offset;
m_window_bits |= 0x01;
}
else
{
const u64bit offset = m_window_highest - sequence;
m_window_bits |= (static_cast<u64bit>(1) << offset);
}
}
1.7.6.1