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