#include "blowfish.hpp" #include "vectors.h" #include constexpr uint64_t k(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 wrapper { constexpr void operator()() const { constexpr Blowfish b(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", k(variable_key[i])); printf("0x%016lx\t", static_cast(x)); printf("0x%016lx\t", static_cast(y)); printf("0x%016lx\n", static_cast(z)); } }; template