diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2020-11-08 20:34:13 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2020-11-08 20:34:13 +0200 |
commit | 51528ecf3d90d09351322e172d91eed0cb45b2e7 (patch) | |
tree | 270b22937ccf770a70b287730e4113d1b934ac09 /main.cpp | |
parent | Add compile-time key length check (diff) | |
download | blowfish-51528ecf3d90d09351322e172d91eed0cb45b2e7.tar.xz |
Diffstat (limited to 'main.cpp')
-rw-r--r-- | main.cpp | 46 |
1 files changed, 4 insertions, 42 deletions
@@ -2,49 +2,11 @@ #include "vectors.h" #include <cstdio> -constexpr uint64_t k(const uint8_t key[8]) { - uint64_t r = 0; - for (int i = 0; i < 8; ++i) { - r += static_cast<uint64_t>(key[i]) << (64 - 8 * (i + 1)); - } - return r; -} - -template <int i> struct wrapper { - constexpr void operator()() const { - constexpr Blowfish::Context<8> b(std::to_array(variable_key[i])); - constexpr Blowfish::Block x(plaintext_l[i], plaintext_r[i]); - - constexpr auto y = b.encrypt(x); - static_assert(y.L == ciphertext_l[i]); - static_assert(y.R == ciphertext_r[i]); - - constexpr auto z = b.decrypt(y); - static_assert(x.L == z.L); - static_assert(x.R == z.R); - - printf("0x%016lx\t", k(variable_key[i])); - printf("0x%016lx\t", static_cast<uint64_t>(x)); - printf("0x%016lx\t", static_cast<uint64_t>(y)); - printf("0x%016lx\n", static_cast<uint64_t>(z)); - } -}; - -template <template <int> class W, std::size_t... I> -void caller_impl(std::index_sequence<I...>) { - int t[] = {0, ((void)W<I>()(), 1)...}; - (void)t; -} - -template <template <int> class W, std::size_t N, - typename Indices = std::make_index_sequence<N>> -void call_times() { - caller_impl<W>(Indices()); -} +void run_variable_key_wrapper(); +void run_set_key_wrapper(); int main(int, char **) { - printf("%-18s\t%-18s\t%-18s\t%-18s\n", "/ key", "/ cleartext", "/ encrypt", - "/ decrypt"); - call_times<wrapper, NUM_VARIABLE_KEY_TESTS>(); + run_variable_key_wrapper(); + run_set_key_wrapper(); return 0; } |