32 #ifndef MCKL_RANDOM_INTERNAL_AES_KEY_SEQ_HPP 33 #define MCKL_RANDOM_INTERNAL_AES_KEY_SEQ_HPP 43 template <std::
size_t Rounds,
typename KeySeqGenerator>
47 using key_type =
typename KeySeqGenerator::key_type;
48 using rk_type =
typename KeySeqGenerator::rk_type;
50 static constexpr std::size_t
rounds() {
return Rounds; }
56 KeySeqGenerator generator;
60 const std::array<rk_type, rounds() + 1> &
get()
const {
return rk_; }
62 template <std::
size_t N>
65 return std::get<N>(rk_);
71 std::array<std::uint64_t, 2 * (rounds() + 1)> ks1;
72 std::array<std::uint64_t, 2 * (rounds() + 1)> ks2;
73 std::memcpy(ks1.data(), seq1.rk_.data(),
75 std::memcpy(ks2.data(), seq2.rk_.data(),
84 return !(seq1 == seq2);
87 template <
typename CharT,
typename Traits>
89 std::basic_ostream<CharT, Traits> &os,
96 std::array<std::uint64_t, 2 * (rounds() + 1)> ks;
97 std::memcpy(ks.data(), seq.rk_.data(),
104 template <
typename CharT,
typename Traits>
106 std::basic_istream<CharT, Traits> &is,
113 std::array<std::uint64_t, 2 * (rounds() + 1)> ks;
116 std::memcpy(seq.rk_.data(), ks.data(),
124 std::array<rk_type, rounds() + 1> rk_;
127 template <std::
size_t Rounds,
typename KeySeqGenerator>
131 using key_type =
typename KeySeqGenerator::key_type;
132 using rk_type =
typename KeySeqGenerator::rk_type;
134 static constexpr std::size_t
rounds() {
return Rounds; }
140 std::array<rk_type, rounds() + 1>
get()
const 142 KeySeqGenerator generator;
143 std::array<rk_type, rounds() + 1> rk;
152 return seq1.key_ == seq2.key_;
158 return !(seq1 == seq2);
161 template <
typename CharT,
typename Traits>
163 std::basic_ostream<CharT, Traits> &os,
175 template <
typename CharT,
typename Traits>
177 std::basic_istream<CharT, Traits> &is,
203 #endif // MCKL_RANDOM_INTERNAL_AES_KEY_SEQ_HPP #define MCKL_PUSH_GCC_WARNING(warning)
friend std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > &is, ARSKeySeqImpl< Rounds, KeySeqGenerator > &seq)
friend std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > &is, AESKeySeqImpl< Rounds, KeySeqGenerator > &seq)
friend bool operator==(const ARSKeySeqImpl< Rounds, KeySeqGenerator > &seq1, const ARSKeySeqImpl< Rounds, KeySeqGenerator > &seq2)
static constexpr std::size_t rounds()
friend bool operator!=(const ARSKeySeqImpl< Rounds, KeySeqGenerator > &seq1, const ARSKeySeqImpl< Rounds, KeySeqGenerator > &seq2)
friend std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &os, const AESKeySeqImpl< Rounds, KeySeqGenerator > &seq)
std::basic_ostream< CharT, Traits > & ostream(std::basic_ostream< CharT, Traits > &os, const std::array< T, N > &ary)
typename KeySeqGenerator::rk_type rk_type
static constexpr std::size_t rounds()
const key_type & key() const
friend bool operator!=(const AESKeySeqImpl< Rounds, KeySeqGenerator > &seq1, const AESKeySeqImpl< Rounds, KeySeqGenerator > &seq2)
typename KeySeqGenerator::rk_type rk_type
typename KeySeqGenerator::key_type key_type
friend std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &os, const ARSKeySeqImpl< Rounds, KeySeqGenerator > &seq)
friend bool operator==(const AESKeySeqImpl< Rounds, KeySeqGenerator > &seq1, const AESKeySeqImpl< Rounds, KeySeqGenerator > &seq2)
std::basic_istream< CharT, Traits > & istream(std::basic_istream< CharT, Traits > &is, std::array< T, N > &ary)
#define MCKL_POP_GCC_WARNING
typename KeySeqGenerator::key_type key_type