#ifndef CHAOS_CIPHER_BLOCK_ENCRYPTOR_HPP #define CHAOS_CIPHER_BLOCK_ENCRYPTOR_HPP #include #include #include namespace Chaos::Cipher::Block { template concept Encryptor = requires(const T constEncryptor, typename T::Block block, uint8_t * outBegin, uint8_t * outEnd, uint8_t * inBegin, uint8_t * inEnd) { typename T::Block; typename T::Key; requires std::constructible_from; requires std::unsigned_integral>; typename std::integral_constant; requires std::unsigned_integral>; typename std::integral_constant; constEncryptor.EncryptBlock(outBegin, outEnd, inBegin, inEnd); { constEncryptor.EncryptBlock(block) } -> std::same_as; { constEncryptor.GetBlockSize() } -> std::unsigned_integral; }; } // namespace Chaos::Cipher::Block #endif // CHAOS_CIPHER_BLOCK_ENCRYPTOR_HPP