10 #include <botan/cmac.h> 11 #include <botan/ctr.h> 20 secure_vector<uint8_t> eax_prf(uint8_t tag,
size_t block_size,
21 MessageAuthenticationCode& mac,
22 const uint8_t in[],
size_t length)
24 for(
size_t i = 0; i != block_size - 1; ++i)
29 mac.update(in, length);
39 m_tag_size(tag_size ? tag_size : cipher->block_size()),
41 m_ctr(new
CTR_BE(m_cipher->clone())),
42 m_cmac(new
CMAC(m_cipher->clone()))
44 if(m_tag_size < 8 || m_tag_size >
m_cmac->output_length())
84 void EAX_Mode::key_schedule(
const uint8_t key[],
size_t length)
90 m_ctr->set_key(key, length);
91 m_cmac->set_key(key, length);
102 void EAX_Mode::start_msg(
const uint8_t nonce[],
size_t nonce_len)
118 m_ctr->cipher(buf, buf, sz);
137 buffer += std::make_pair(data_mac.data(),
tag_size());
143 m_ctr->cipher(buf, buf, sz);
149 BOTAN_ASSERT(buffer.size() >= offset,
"Offset is sane");
150 const size_t sz = buffer.size() - offset;
151 uint8_t* buf = buffer.data() + offset;
155 const size_t remaining = sz -
tag_size();
159 m_cmac->update(buf, remaining);
160 m_ctr->cipher(buf, buf, remaining);
163 const uint8_t* included_tag = &buf[remaining];
178 buffer.resize(offset + remaining);
void finish(secure_vector< uint8_t > &final_block, size_t offset=0) override
Key_Length_Specification key_spec() const override
size_t process(uint8_t buf[], size_t size) override
std::string name() const override
size_t block_size() const
void update(secure_vector< uint8_t > &buffer, size_t offset=0)
secure_vector< uint8_t > m_ad_mac
secure_vector< uint8_t > m_nonce_mac
bool constant_time_compare(const uint8_t x[], const uint8_t y[], size_t len)
std::string to_string(const BER_Object &obj)
#define BOTAN_ASSERT(expr, assertion_made)
void xor_buf(uint8_t out[], const uint8_t in[], size_t length)
bool valid_nonce_length(size_t) const override
EAX_Mode(BlockCipher *cipher, size_t tag_size)
size_t process(uint8_t buf[], size_t size) override
std::unique_ptr< BlockCipher > m_cipher
size_t tag_size() const override
std::unique_ptr< MessageAuthenticationCode > m_cmac
size_t update_granularity() const override
std::vector< T, secure_allocator< T > > secure_vector
void set_associated_data(const uint8_t ad[], size_t ad_len) override
std::unique_ptr< StreamCipher > m_ctr
void finish(secure_vector< uint8_t > &final_block, size_t offset=0) override