// 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 "helpers/cmd_parser_block.hpp" #include #include #include #include #include #include #include namespace { void encrypt_blocks(aes::Algorithm algorithm, aes::Mode mode, const BlockSettings::Input& input) { aes::Box::Key key; aes::Box::parse_key(key, algorithm, input.get_key()); aes::Box box{algorithm, key, mode, input.get_iv()}; for (const auto& plaintext : input.get_blocks()) { aes::Block ciphertext; box.encrypt_block(plaintext, ciphertext); std::cout << std::format("{}\n", ciphertext.to_string()); } } } // namespace 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.get_inputs()) { encrypt_blocks(settings.get_algorithm(), settings.get_mode(), input); } } catch (const aes::Error& e) { std::cerr << e; return 1; } catch (const std::exception& e) { std::cerr << std::format("{}\n", e.what()); return 1; } return 0; }