9 #include <botan/package.h>
10 #include <botan/filters.h>
11 #include <botan/ctr.h>
12 #include <botan/loadstor.h>
18 const uint8_t input[],
size_t input_len,
21 const size_t BLOCK_SIZE = cipher->
block_size();
27 const std::string all_zeros(BLOCK_SIZE*2,
'0');
34 const size_t remaining = pipe.
remaining();
43 (input_len + BLOCK_SIZE - 1) / BLOCK_SIZE;
45 uint8_t* final_block = output + input_len;
49 for(
size_t i = 0; i != blocks; ++i)
51 const size_t left = std::min<size_t>(BLOCK_SIZE,
52 input_len - BLOCK_SIZE * i);
55 copy_mem(buf.data(), output + (BLOCK_SIZE * i), left);
57 for(
size_t j = 0; j !=
sizeof(i); ++j)
58 buf[BLOCK_SIZE - 1 - j] ^=
get_byte(
sizeof(i)-1-j, i);
62 xor_buf(final_block, buf.data(), BLOCK_SIZE);
70 const uint8_t input[],
size_t input_len,
73 const size_t BLOCK_SIZE = cipher->
block_size();
78 if(input_len < BLOCK_SIZE)
82 const std::string all_zeros(BLOCK_SIZE*2,
'0');
91 input + (input_len - BLOCK_SIZE),
94 const size_t blocks = ((input_len - 1) / BLOCK_SIZE);
97 for(
size_t i = 0; i != blocks; ++i)
99 const size_t left = std::min<size_t>(BLOCK_SIZE,
100 input_len - BLOCK_SIZE * (i+1));
103 copy_mem(buf.data(), input + (BLOCK_SIZE * i), left);
105 for(
size_t j = 0; j !=
sizeof(i); ++j)
106 buf[BLOCK_SIZE - 1 - j] ^=
get_byte(
sizeof(i)-1-j, i);
110 xor_buf(package_key.data(), buf.data(), BLOCK_SIZE);
117 const size_t remaining = pipe.
remaining();
void aont_package(RandomNumberGenerator &rng, BlockCipher *cipher, const uint8_t input[], size_t input_len, uint8_t output[])
void xor_buf(T out[], const T in[], size_t length)
void encrypt(const uint8_t in[], uint8_t out[]) const
size_t remaining(message_id msg=DEFAULT_MESSAGE) const BOTAN_WARN_UNUSED_RESULT
void clear_mem(T *ptr, size_t n)
size_t read(uint8_t output[], size_t length) override BOTAN_WARN_UNUSED_RESULT
bool valid_keylength(size_t length) const
std::vector< T, secure_allocator< T >> secure_vector
void set_key(const SymmetricKey &key)
#define BOTAN_ASSERT_EQUAL(expr1, expr2, assertion_made)
void process_msg(const uint8_t in[], size_t length)
void copy_mem(T *out, const T *in, size_t n)
void aont_unpackage(BlockCipher *cipher, const uint8_t input[], size_t input_len, uint8_t output[])
uint8_t get_byte(size_t byte_num, T input)
const uint8_t * begin() const
virtual size_t block_size() const =0
void zeroise(std::vector< T, Alloc > &vec)