#ifndef CHAOS_CIPHER_BLOCK_ENCRYPTOR_HPP #define CHAOS_CIPHER_BLOCK_ENCRYPTOR_HPP namespace Chaos::Cipher::Block { template class Encryptor { public: template void EncryptBlock(OutputIt out, InputIt inBegin, InputIt inEnd) const { Impl().EncryptBlock(out, inBegin, inEnd); } template auto EncryptBlock(Block block) const { return Impl().EncryptBlock(block); } auto GetBlockSize() const { return Impl().GetBlockSize(); } protected: Encryptor() = default; private: const T & Impl() const { return static_cast(*this); } T & Impl() { return static_cast(*this); } }; } // namespace Chaos::Cipher::Block #endif // CHAOS_CIPHER_BLOCK_ENCRYPTOR_HPP