aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--utils/CMakeLists.txt4
-rw-r--r--utils/README.md4
-rw-r--r--utils/block_cmd_parser.hpp67
-rw-r--r--utils/block_input.hpp47
-rw-r--r--utils/decrypt_block.cpp7
-rw-r--r--utils/encrypt_block.cpp7
-rw-r--r--utils/file_cmd_parser.hpp35
7 files changed, 81 insertions, 90 deletions
diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt
index 97ecfb6..0d57e27 100644
--- a/utils/CMakeLists.txt
+++ b/utils/CMakeLists.txt
@@ -1,11 +1,11 @@
find_package(Boost REQUIRED COMPONENTS filesystem program_options system)
-add_executable(util_encrypt_block encrypt_block.cpp block_cmd_parser.hpp block_dumper.hpp data_parsers.hpp)
+add_executable(util_encrypt_block encrypt_block.cpp block_cmd_parser.hpp block_dumper.hpp block_input.hpp data_parsers.hpp)
target_include_directories(util_encrypt_block PRIVATE ${Boost_INCLUDE_DIRS})
target_link_libraries(util_encrypt_block libaesnixx ${Boost_LIBRARIES})
set_target_properties(util_encrypt_block PROPERTIES OUTPUT_NAME encrypt_block)
-add_executable(util_decrypt_block decrypt_block.cpp block_cmd_parser.hpp block_dumper.hpp data_parsers.hpp)
+add_executable(util_decrypt_block decrypt_block.cpp block_cmd_parser.hpp block_dumper.hpp block_input.hpp data_parsers.hpp)
target_include_directories(util_decrypt_block PRIVATE ${Boost_INCLUDE_DIRS})
target_link_libraries(util_decrypt_block libaesnixx ${Boost_LIBRARIES})
set_target_properties(util_decrypt_block PROPERTIES OUTPUT_NAME decrypt_block)
diff --git a/utils/README.md b/utils/README.md
index 8055d87..a1cfeb5 100644
--- a/utils/README.md
+++ b/utils/README.md
@@ -19,8 +19,8 @@ The block encryption utilities can produce verbose human-readable output,
including round keys, intermediate initialization vector values, etc.
This is primarily intended for debugging purposes.
Enable verbose output by passing the `--verbose` flag to the utilities.
-Please note that verbose output can only be produced when *not* using "boxes"
-(the `--box` flag).
+Please note that verbose output can only be produced when *not* using the
+"boxes" interface (the `--use-boxes` flag).
### encrypt_block.exe
diff --git a/utils/block_cmd_parser.hpp b/utils/block_cmd_parser.hpp
index 988ef52..62b0f36 100644
--- a/utils/block_cmd_parser.hpp
+++ b/utils/block_cmd_parser.hpp
@@ -8,11 +8,11 @@
#pragma once
+#include "block_input.hpp"
#include "data_parsers.hpp"
#include <aesnixx/all.hpp>
-#include <boost/config.hpp>
#include <boost/filesystem.hpp>
#include <boost/program_options.hpp>
@@ -25,66 +25,8 @@
namespace
{
- BOOST_NORETURN inline void throw_iv_required()
- {
- throw boost::program_options::error(
- "initialization vector is required for the selected mode of operation");
- }
-
- BOOST_NORETURN inline void throw_not_implemented(aesni::Algorithm algorithm)
- {
- throw boost::program_options::error(
- "the selected algorithm is not implemented");
- }
-
- BOOST_NORETURN inline void throw_not_implemented(aesni::Mode mode)
- {
- throw boost::program_options::error(
- "the selected mode of operation is not implemented");
- }
-
class CommandLineParser;
- class Input
- {
- public:
- Input(
- std::string&& key_string,
- std::string&& iv_string,
- std::vector<std::string>&& input_block_strings)
- : key_string(std::move(key_string))
- , iv_string(std::make_pair<bool, std::string>(true, std::move(iv_string)))
- , input_block_strings(input_block_strings)
- { }
-
- Input(
- std::string&& key_string,
- std::vector<std::string>&& input_block_strings)
- : key_string(std::move(key_string))
- , iv_string(std::make_pair<bool, std::string>(false, std::string()))
- , input_block_strings(std::move(input_block_strings))
- { }
-
- const std::string& get_key_string() const { return key_string; }
-
- const std::string& get_iv_string() const
- {
- if (!iv_string.first)
- throw_iv_required();
- return iv_string.second;
- }
-
- const std::vector<std::string>& get_input_block_strings() const
- {
- return input_block_strings;
- }
-
- private:
- const std::string key_string;
- const std::pair<bool, std::string> iv_string;
- const std::vector<std::string> input_block_strings;
- };
-
class Settings
{
public:
@@ -118,7 +60,7 @@ namespace
options.add_options()
("help,h", "show this message and exit")
- ("box,b", po::bool_switch(&settings.use_boxes_flag)->default_value(false), "use the \"boxes\" interface")
+ ("use-boxes,b", po::bool_switch(&settings.use_boxes_flag)->default_value(false), "use the \"boxes\" interface")
("mode,m", po::value<aesni::Mode>(&settings.mode)->required(), "set mode of operation")
("algorithm,a", po::value<aesni::Algorithm>(&settings.algorithm)->required(), "set algorithm")
("verbose,v", po::bool_switch(&settings.verbose_flag)->default_value(false), "enable verbose output");
@@ -173,7 +115,10 @@ namespace
if (aesni::mode_requires_initialization_vector(settings.get_mode()))
{
if (args.empty())
- throw_iv_required();
+ {
+ throw boost::program_options::error(
+ "an initialization vector is required for the selected mode of operation");
+ }
iv_string = std::move(args.front());
args.pop_front();
}
diff --git a/utils/block_input.hpp b/utils/block_input.hpp
new file mode 100644
index 0000000..343bb2a
--- /dev/null
+++ b/utils/block_input.hpp
@@ -0,0 +1,47 @@
+/**
+ * \file
+ * \author Egor Tensin <Egor.Tensin@gmail.com>
+ * \date 2015
+ * \copyright This file is licensed under the terms of the MIT License.
+ * See LICENSE.txt for details.
+ */
+
+#pragma once
+
+#include <string>
+#include <vector>
+
+namespace
+{
+ class Input
+ {
+ public:
+ Input(const std::string& key_string,
+ const std::string& iv_string,
+ const std::vector<std::string>& input_block_strings)
+ : key_string(key_string)
+ , iv_string(iv_string)
+ , input_block_strings(input_block_strings)
+ { }
+
+ Input(const std::string& key_string,
+ const std::vector<std::string>& input_block_strings)
+ : key_string(key_string)
+ , input_block_strings(input_block_strings)
+ { }
+
+ const std::string& get_key_string() const { return key_string; }
+
+ const std::string& get_iv_string() const { return iv_string; }
+
+ const std::vector<std::string>& get_input_block_strings() const
+ {
+ return input_block_strings;
+ }
+
+ private:
+ const std::string key_string;
+ const std::string iv_string;
+ const std::vector<std::string> input_block_strings;
+ };
+}
diff --git a/utils/decrypt_block.cpp b/utils/decrypt_block.cpp
index a8c9625..456ef6c 100644
--- a/utils/decrypt_block.cpp
+++ b/utils/decrypt_block.cpp
@@ -8,6 +8,7 @@
#include "block_cmd_parser.hpp"
#include "block_dumper.hpp"
+#include "block_input.hpp"
#include <aesnixx/all.hpp>
@@ -15,7 +16,7 @@
#include <exception>
#include <iostream>
-#include <iterator>
+#include <stdexcept>
#include <string>
namespace
@@ -92,7 +93,7 @@ namespace
break;
default:
- throw_not_implemented(mode);
+ throw std::runtime_error("the selected mode of operation is not implemented");
break;
}
}
@@ -118,7 +119,7 @@ namespace
break;
default:
- throw_not_implemented(algorithm);
+ throw std::runtime_error("the selected algorithm is not implemented");
break;
}
}
diff --git a/utils/encrypt_block.cpp b/utils/encrypt_block.cpp
index 724e8c1..98fdec6 100644
--- a/utils/encrypt_block.cpp
+++ b/utils/encrypt_block.cpp
@@ -8,6 +8,7 @@
#include "block_cmd_parser.hpp"
#include "block_dumper.hpp"
+#include "block_input.hpp"
#include <aesnixx/all.hpp>
@@ -15,7 +16,7 @@
#include <exception>
#include <iostream>
-#include <iterator>
+#include <stdexcept>
#include <string>
namespace
@@ -92,7 +93,7 @@ namespace
break;
default:
- throw_not_implemented(mode);
+ throw std::runtime_error("the selected mode of operation is not implemented");
break;
}
}
@@ -118,7 +119,7 @@ namespace
break;
default:
- throw_not_implemented(algorithm);
+ throw std::runtime_error("the selected algorithm is not implemented");
break;
}
}
diff --git a/utils/file_cmd_parser.hpp b/utils/file_cmd_parser.hpp
index 7d1470d..b6312f3 100644
--- a/utils/file_cmd_parser.hpp
+++ b/utils/file_cmd_parser.hpp
@@ -26,24 +26,16 @@ namespace
class Settings
{
public:
- Settings()
- : iv(false, std::string())
- { }
+ Settings() = default;
aesni::Mode get_mode() const { return mode; }
aesni::Algorithm get_algorithm() const { return algorithm; }
- std::string get_input_path() const { return input_path; }
- std::string get_output_path() const { return output_path; }
+ const std::string& get_input_path() const { return input_path; }
+ const std::string& get_output_path() const { return output_path; }
- std::string get_key_string() const { return key; }
-
- std::string get_iv_string() const
- {
- if (!iv.first)
- throw boost::program_options::error("initialization vector is required for the selected mode of operation");
- return iv.second;
- }
+ const std::string& get_key_string() const { return key; }
+ const std::string& get_iv_string() const { return iv; }
private:
aesni::Mode mode;
@@ -52,8 +44,7 @@ namespace
std::string input_path;
std::string output_path;
std::string key;
-
- std::pair<bool, std::string> iv;
+ std::string iv;
friend class CommandLineParser;
};
@@ -77,7 +68,7 @@ namespace
("input-path,i", po::value<std::string>(&settings.input_path)->required(), "set input file")
("output-path,o", po::value<std::string>(&settings.output_path)->required(), "set output file")
("key,k", po::value<std::string>(&settings.key)->required(), "set encryption key")
- ("iv,v", po::value<std::string>(&settings.iv.second), "set initialization vector");
+ ("iv,v", po::value<std::string>(&settings.iv), "set initialization vector");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, options), vm);
@@ -88,10 +79,16 @@ namespace
return;
}
- if (vm.count("iv"))
- settings.iv.first = true;
-
po::notify(vm);
+
+ if (aesni::mode_requires_initialization_vector(settings.get_mode()))
+ {
+ if (!vm.count("iv"))
+ {
+ throw boost::program_options::error(
+ "an initialization vector is required for the selected mode of operation");
+ }
+ }
}
bool exit_with_usage() const { return help_flag; }