From 3304264990b96c09b174716ecb8da63d24457ae8 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 21 Dec 2019 14:50:03 +0300 Subject: utils/ -> aesxx/utils/ --- utils/decrypt_block.cpp | 215 ------------------------------------------------ 1 file changed, 215 deletions(-) delete mode 100644 utils/decrypt_block.cpp (limited to 'utils/decrypt_block.cpp') diff --git a/utils/decrypt_block.cpp b/utils/decrypt_block.cpp deleted file mode 100644 index 02a3033..0000000 --- a/utils/decrypt_block.cpp +++ /dev/null @@ -1,215 +0,0 @@ -// Copyright (c) 2015 Egor Tensin -// This file is part of the "AES tools" project. -// For details, see https://github.com/egor-tensin/aes-tools. -// Distributed under the MIT License. - -#include "block_cmd_parser.hpp" -#include "block_dumper.hpp" -#include "block_input.hpp" - -#include - -#include - -#include -#include -#include -#include - -namespace -{ - template - void decrypt_with_mode( - const Input& input, - bool verbose = false) - { - typename aes::Types::Block iv; - - if (aes::ModeRequiresInitVector()) - { - aes::from_string(iv, input.iv); - if (verbose) - dump_iv(iv); - } - - typename aes::Types::Key key; - aes::from_string(key, input.key); - if (verbose) - dump_key(key); - - aes::DecryptWrapper decrypt{key, iv}; - if (verbose) - dump_wrapper(decrypt); - - for (const auto& block : input.blocks) - { - typename aes::Types::Block ciphertext, plaintext; - aes::from_string(ciphertext, block); - - decrypt.decrypt_block(ciphertext, plaintext); - - if (verbose) - { - dump_ciphertext(ciphertext); - dump_plaintext(plaintext); - dump_next_iv(decrypt); - } - else - { - std::cout << aes::to_string(plaintext) << '\n'; - } - } - } - - template - void decrypt_with_algorithm( - aes::Mode mode, - const Input& input, - bool verbose = false) - { - switch (mode) - { - case AES_ECB: - decrypt_with_mode(input, verbose); - break; - - case AES_CBC: - decrypt_with_mode(input, verbose); - break; - - case AES_CFB: - decrypt_with_mode(input, verbose); - break; - - case AES_OFB: - decrypt_with_mode(input, verbose); - break; - - case AES_CTR: - decrypt_with_mode(input, verbose); - break; - - default: - throw std::runtime_error("the selected mode of operation is not implemented"); - break; - } - } - - void decrypt_using_cxx_api( - aes::Algorithm algorithm, - aes::Mode mode, - const Input& input, - bool verbose = false) - { - switch (algorithm) - { - case AES_AES128: - decrypt_with_algorithm(mode, input, verbose); - break; - - case AES_AES192: - decrypt_with_algorithm(mode, input, verbose); - break; - - case AES_AES256: - decrypt_with_algorithm(mode, input, verbose); - break; - - default: - throw std::runtime_error("the selected algorithm is not implemented"); - break; - } - } - - void decrypt_using_particular_box( - aes::Box& box, - const std::vector& blocks) - { - for (const auto& block : blocks) - { - aes::Box::Block ciphertext; - box.parse_block(ciphertext, block); - - aes::Box::Block plaintext; - box.decrypt_block(ciphertext, plaintext); - std::cout << box.format_block(plaintext) << '\n'; - } - } - - void decrypt_using_boxes( - aes::Algorithm algorithm, - aes::Mode mode, - const Input& input) - { - aes::Box::Key key; - aes::Box::parse_key(key, algorithm, input.key); - - if (aes::mode_requires_init_vector(mode)) - { - aes::Box::Block iv; - aes::Box::parse_block(iv, algorithm, input.iv); - aes::Box box{algorithm, key, mode, iv}; - - decrypt_using_particular_box(box, input.blocks); - } - else - { - aes::Box box{algorithm, key}; - decrypt_using_particular_box(box, input.blocks); - } - } -} - -int main(int argc, char** argv) -{ - try - { - BlockSettings settings{argv[0]}; - - try - { - settings.parse(argc, argv); - } - catch (const boost::program_options::error& e) - { - settings.usage_error(e); - return 1; - } - - if (settings.exit_with_usage) - { - settings.usage(); - return 0; - } - - for (const auto& input : settings.inputs) - { - if (settings.use_boxes) - { - decrypt_using_boxes( - settings.algorithm, - settings.mode, - input); - } - else - { - decrypt_using_cxx_api( - settings.algorithm, - settings.mode, - input, - settings.verbose); - } - } - } - catch (const aes::Error& e) - { - std::cerr << e; - return 1; - } - catch (const std::exception& e) - { - std::cerr << e.what() << "\n"; - return 1; - } - return 0; -} -- cgit v1.2.3