aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/utils/data_parsers.hpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--utils/data_parsers.hpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/utils/data_parsers.hpp b/utils/data_parsers.hpp
new file mode 100644
index 0000000..08486fa
--- /dev/null
+++ b/utils/data_parsers.hpp
@@ -0,0 +1,55 @@
+/**
+ * \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 <aesnixx/all.hpp>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/program_options.hpp>
+
+#include <istream>
+#include <string>
+
+static std::istream& operator>>(std::istream& is, aesni::Mode& dest)
+{
+ std::string src;
+ is >> src;
+
+ if (boost::iequals(src, "ecb"))
+ dest = AESNI_ECB;
+ else if (boost::iequals(src, "cbc"))
+ dest = AESNI_CBC;
+ else if (boost::iequals(src, "cfb"))
+ dest = AESNI_CFB;
+ else if (boost::iequals(src, "ofb"))
+ dest = AESNI_OFB;
+ else if (boost::iequals(src, "ctr"))
+ dest = AESNI_CTR;
+ else
+ throw boost::program_options::validation_error(boost::program_options::validation_error::invalid_option_value, "mode", src);
+
+ return is;
+}
+
+static std::istream& operator>>(std::istream& is, aesni::Algorithm& dest)
+{
+ std::string src;
+ is >> src;
+
+ if (boost::iequals(src, "aes128"))
+ dest = AESNI_AES128;
+ else if (boost::iequals(src, "aes192"))
+ dest = AESNI_AES192;
+ else if (boost::iequals(src, "aes256"))
+ dest = AESNI_AES256;
+ else
+ throw boost::program_options::validation_error(boost::program_options::validation_error::invalid_option_value, "algorithm", src);
+
+ return is;
+}