8 #ifndef BOTAN_BLOCK_CIPHER_H__
9 #define BOTAN_BLOCK_CIPHER_H__
11 #include <botan/sym_algo.h>
30 static std::unique_ptr<BlockCipher>
31 create(
const std::string& algo_spec,
32 const std::string& provider =
"");
39 static std::unique_ptr<BlockCipher>
40 create_or_throw(
const std::string& algo_spec,
41 const std::string& provider =
"");
47 static std::vector<std::string> providers(
const std::string& algo_spec);
52 virtual size_t block_size()
const = 0;
64 return parallelism() * block_size() * BOTAN_BLOCK_CIPHER_PAR_MULT;
71 virtual std::string
provider()
const {
return "base"; }
80 void encrypt(
const uint8_t in[], uint8_t out[])
const
81 { encrypt_n(in, out, 1); }
90 void decrypt(
const uint8_t in[], uint8_t out[])
const
91 { decrypt_n(in, out, 1); }
99 void encrypt(uint8_t block[])
const { encrypt_n(block, block, 1); }
107 void decrypt(uint8_t block[])
const { decrypt_n(block, block, 1); }
113 template<
typename Alloc>
114 void encrypt(std::vector<uint8_t, Alloc>& block)
const
116 return encrypt_n(block.data(), block.data(), block.size() / block_size());
123 template<
typename Alloc>
124 void decrypt(std::vector<uint8_t, Alloc>& block)
const
126 return decrypt_n(block.data(), block.data(), block.size() / block_size());
134 template<
typename Alloc,
typename Alloc2>
135 void encrypt(
const std::vector<uint8_t, Alloc>& in,
136 std::vector<uint8_t, Alloc2>& out)
const
138 return encrypt_n(in.data(), out.data(), in.size() / block_size());
146 template<
typename Alloc,
typename Alloc2>
147 void decrypt(
const std::vector<uint8_t, Alloc>& in,
148 std::vector<uint8_t, Alloc2>& out)
const
150 return decrypt_n(in.data(), out.data(), in.size() / block_size());
159 virtual void encrypt_n(
const uint8_t in[], uint8_t out[],
160 size_t blocks)
const = 0;
168 virtual void decrypt_n(
const uint8_t in[], uint8_t out[],
169 size_t blocks)
const = 0;
182 template<
size_t BS,
size_t KMIN,
size_t KMAX = 0,
size_t KMOD = 1>
void encrypt(const uint8_t in[], uint8_t out[]) const
void encrypt(std::vector< uint8_t, Alloc > &block) const
void decrypt(const uint8_t in[], uint8_t out[]) const
void encrypt(uint8_t block[]) const
Key_Length_Specification key_spec() const override
void decrypt(uint8_t block[]) const
size_t parallel_bytes() const
virtual size_t parallelism() const
void decrypt(const std::vector< uint8_t, Alloc > &in, std::vector< uint8_t, Alloc2 > &out) const
virtual std::string provider() const
size_t block_size() const override
void encrypt(const std::vector< uint8_t, Alloc > &in, std::vector< uint8_t, Alloc2 > &out) const
void decrypt(std::vector< uint8_t, Alloc > &block) const