diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2019-12-21 14:50:03 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2019-12-21 14:52:12 +0300 |
commit | 3304264990b96c09b174716ecb8da63d24457ae8 (patch) | |
tree | 9ec5711da75d4aa67587a8e39c24daaf6088c498 /aesxx/utils/block_dumper.hpp | |
parent | test: move data files to test/data (diff) | |
download | aes-tools-3304264990b96c09b174716ecb8da63d24457ae8.tar.gz aes-tools-3304264990b96c09b174716ecb8da63d24457ae8.zip |
utils/ -> aesxx/utils/
Diffstat (limited to 'aesxx/utils/block_dumper.hpp')
-rw-r--r-- | aesxx/utils/block_dumper.hpp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/aesxx/utils/block_dumper.hpp b/aesxx/utils/block_dumper.hpp new file mode 100644 index 0000000..a07d855 --- /dev/null +++ b/aesxx/utils/block_dumper.hpp @@ -0,0 +1,105 @@ +// Copyright (c) 2015 Egor Tensin <Egor.Tensin@gmail.com> +// This file is part of the "AES tools" project. +// For details, see https://github.com/egor-tensin/aes-tools. +// Distributed under the MIT License. + +#pragma once + +#include <aesxx/all.hpp> + +#include <cstdlib> + +#include <iostream> +#include <type_traits> + +template <aes::Algorithm algorithm> +void dump_block( + const char* header, + const typename aes::Types<algorithm>::Block& block) +{ + std::cout << header << ": " << aes::to_string<algorithm>(block) << "\n"; + std::cout << aes::to_matrix_string<algorithm>(block) << "\n"; +} + +template <aes::Algorithm algorithm> +void dump_plaintext(const typename aes::Types<algorithm>::Block& block) +{ + dump_block<algorithm>("Plaintext", block); +} + +template <aes::Algorithm algorithm> +void dump_key(const typename aes::Types<algorithm>::Key& key) +{ + std::cout << "Key: " << aes::to_string<algorithm>(key) << "\n\n"; +} + +template <aes::Algorithm algorithm> +void dump_ciphertext(const typename aes::Types<algorithm>::Block& ciphertext) +{ + dump_block<algorithm>("Ciphertext", ciphertext); +} + +template <aes::Algorithm algorithm> +void dump_iv(const typename aes::Types<algorithm>::Block& iv) +{ + dump_block<algorithm>("Initialization vector", iv); +} + +template <aes::Algorithm algorithm> +void dump_round_keys( + const char* header, + const typename aes::Types<algorithm>::RoundKeys& round_keys) +{ + std::cout << header << ":\n"; + for (std::size_t i = 0; i < aes::get_number_of_rounds<algorithm>(); ++i) + std::cout << "\t[" << i << "]: " << aes::to_string<algorithm>(round_keys.keys[i]) << "\n"; + std::cout << "\n"; +} + +template <aes::Algorithm algorithm> +void dump_encryption_keys(const typename aes::Types<algorithm>::RoundKeys& round_keys) +{ + dump_round_keys<algorithm>("Encryption round keys", round_keys); +} + +template <aes::Algorithm algorithm> +void dump_decryption_keys(const typename aes::Types<algorithm>::RoundKeys& round_keys) +{ + dump_round_keys<algorithm>("Decryption round keys", round_keys); +} + +template <aes::Algorithm algorithm, aes::Mode mode> +void dump_wrapper(const aes::EncryptWrapper<algorithm, mode>& wrapper) +{ + dump_encryption_keys<algorithm>(wrapper.encryption_keys); +} + +template <aes::Algorithm algorithm, aes::Mode mode> +void dump_wrapper(const aes::DecryptWrapper<algorithm, mode>& wrapper) +{ + dump_decryption_keys<algorithm>(wrapper.decryption_keys); +} + +template <aes::Algorithm algorithm, aes::Mode mode, + typename std::enable_if<aes::ModeRequiresInitVector<mode>::value>::type* = nullptr> +void dump_next_iv(const aes::EncryptWrapper<algorithm, mode>& wrapper) +{ + dump_block<algorithm>("Next initialization vector", wrapper.iv); +} + +template <aes::Algorithm algorithm, aes::Mode mode, + typename std::enable_if<!aes::ModeRequiresInitVector<mode>::value>::type* = nullptr> +void dump_next_iv(const aes::EncryptWrapper<algorithm, mode>&) +{ } + +template <aes::Algorithm algorithm, aes::Mode mode, + typename std::enable_if<aes::ModeRequiresInitVector<mode>::value>::type* = nullptr> +void dump_next_iv(const aes::DecryptWrapper<algorithm, mode>& wrapper) +{ + dump_block<algorithm>("Next initialization vector", wrapper.iv); +} + +template <aes::Algorithm algorithm, aes::Mode mode, + typename std::enable_if<!aes::ModeRequiresInitVector<mode>::value>::type* = nullptr> +void dump_next_iv(const aes::DecryptWrapper<algorithm, mode>&) +{ } |