#include "blowfish.hpp" #include "vectors.h" #include constexpr uint64_t castVarKey(const uint8_t key[8]) { uint64_t r = 0; for (int i = 0; i < 8; ++i) { r += static_cast(key[i]) << (64 - 8 * (i + 1)); } return r; } template 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(x)); printf("0x%016lx\t", static_cast(y)); printf("0x%016lx\n", static_cast(z)); } }; void run_variable_key_wrapper() { printf("%-18s\t%-18s\t%-18s\t%-18s\n", "/ key", "/ cleartext", "/ encrypt", "/ decrypt"); call_times(); }