22#include "crypto/cipher/bcModOp.hpp"
36 template<
typename Cipher>
42 std::array<uint8_t,Cipher::getBlockSize()> _nonce;
55 CTR(
const std::array<uint8_t,Cipher::getBlockSize()>& nonce,
unsigned int nbThread = 1);
81 virtual std::size_t
cipherBlock(std::array<uint8_t,Cipher::getBlockSize()>& input,
82 std::streamsize nbRead,
83 std::array<uint8_t,Cipher::getBlockSize()>& output,
99 virtual std::size_t
decipherBlock(std::array<uint8_t,Cipher::getBlockSize()>& input,
100 std::array<uint8_t,Cipher::getBlockSize()>&,
101 std::streamsize nbRead,
103 std::array<uint8_t,Cipher::getBlockSize()>& output,
112 virtual const std::array<uint8_t,Cipher::getBlockSize()>&
reset();
118 template<
typename Cipher>
119 CTR<Cipher>::CTR(
const std::array<uint8_t,Cipher::getBlockSize()>& nonce,
unsigned int nbThread):
128 template<
typename Cipher>
136 template<
typename Cipher>
139 std::streamsize nbRead,
140 std::array<uint8_t,Cipher::getBlockSize()>& output,
143 std::array<uint8_t,Cipher::getBlockSize()> ctxtVect(_nonce);
144 uint16_t* counter =
reinterpret_cast<uint16_t*
>(&ctxtVect.data()[Cipher::getBlockSize() - 2]);
145 *counter =
static_cast<uint16_t
>(index);
146 std::array<uint8_t,Cipher::getBlockSize()> data;
147 cipher.cipher(ctxtVect, data);
148 for(std::size_t i = 0 ; i < static_cast<std::size_t>(nbRead) ; ++i) {
149 output[i] = input[i] ^ data[i];
151 return static_cast<std::size_t
>(nbRead);
154 template<
typename Cipher>
157 std::array<uint8_t,Cipher::getBlockSize()>&,
158 std::streamsize nbRead,
160 std::array<uint8_t,Cipher::getBlockSize()>& output,
163 std::array<uint8_t,Cipher::getBlockSize()> ctxtVect(_nonce);
164 uint16_t* counter =
reinterpret_cast<uint16_t*
>(&ctxtVect.data()[Cipher::getBlockSize() - 2]);
165 *counter =
static_cast<uint16_t
>(index);
166 std::array<uint8_t,Cipher::getBlockSize()> data;
167 cipher.cipher(ctxtVect, data);
168 for(std::size_t i = 0 ; i < static_cast<std::size_t>(nbRead) ; ++i) {
169 output[i] = input[i] ^ data[i];
171 return static_cast<std::size_t
>(nbRead);
174 template<
typename Cipher>
175 const std::array<uint8_t,Cipher::getBlockSize()>&
BlockCipherModeOfOperation(bool cipherParallelizable, bool decipherParallelizable, unsigned int nbThread=1)
Definition bcModOp.hpp:269
void cipher(std::istream &input, std::ostream &output, const std::string &key)
Definition bcModOp.hpp:300
CTR(const std::array< uint8_t, Cipher::getBlockSize()> &nonce, unsigned int nbThread=1)
Definition ctr.hpp:119
virtual ~CTR()
Definition ctr.hpp:129
virtual std::size_t decipherBlock(std::array< uint8_t, Cipher::getBlockSize()> &input, std::array< uint8_t, Cipher::getBlockSize()> &, std::streamsize nbRead, bool, std::array< uint8_t, Cipher::getBlockSize()> &output, uint32_t index, Cipher &cipher) override
Definition ctr.hpp:156
virtual std::size_t cipherBlock(std::array< uint8_t, Cipher::getBlockSize()> &input, std::streamsize nbRead, std::array< uint8_t, Cipher::getBlockSize()> &output, uint32_t index, Cipher &cipher) override
Definition ctr.hpp:138
virtual const std::array< uint8_t, Cipher::getBlockSize()> & reset()
Definition ctr.hpp:176
Cryptography namespace.
Definition base64.hpp:28
AnCH framework base namespace.
Definition app.hpp:28