diff options
Diffstat (limited to 'test_variable_keys.cpp')
-rw-r--r-- | test_variable_keys.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/test_variable_keys.cpp b/test_variable_keys.cpp new file mode 100644 index 0000000..8382900 --- /dev/null +++ b/test_variable_keys.cpp @@ -0,0 +1,36 @@ +#include "blowfish.hpp" +#include "vectors.h" +#include <cstdio> + +constexpr uint64_t castVarKey(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 variable_key_wrapper { + constexpr void operator()() const { + constexpr Blowfish::Context<8> b(std::span(variable_key[i], 8)); + 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", castVarKey(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)); + } +}; +void run_variable_key_wrapper() { + printf("%-18s\t%-18s\t%-18s\t%-18s\n", "/ key", "/ cleartext", "/ encrypt", + "/ decrypt"); + call_times<variable_key_wrapper, NUM_VARIABLE_KEY_TESTS>(); +} |