summaryrefslogtreecommitdiff
path: root/src/options.cpp
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2009-01-18 02:06:11 +0000
committerChristian Pointner <equinox@anytun.org>2009-01-18 02:06:11 +0000
commitf6d182bc21651b2040577754471db2d1870b54c0 (patch)
tree5332e33420c35f408c42a54e4b9c4bbbe8f84f63 /src/options.cpp
parentenabled 128,192 and 256 bit keys for cipher and key derivation (diff)
added passphrase support to key derivation
Diffstat (limited to 'src/options.cpp')
-rw-r--r--src/options.cpp53
1 files changed, 45 insertions, 8 deletions
diff --git a/src/options.cpp b/src/options.cpp
index 40182c4..d241eae 100644
--- a/src/options.cpp
+++ b/src/options.cpp
@@ -238,6 +238,26 @@ Options::~Options()
i+=2; \
}
+#define PARSE_CSLIST_PARAM(SHORT, LONG, LIST, TYPE) \
+ else if(str == SHORT || str == LONG) \
+ { \
+ if(argc < 1) \
+ throw syntax_error(str, str.length()); \
+ if(argv[i+1][0] == '-') { \
+ u_int32_t pos = str.length() + 1; \
+ throw syntax_error(str.append(" ").append(argv[i+1]), pos); \
+ } \
+ std::stringstream tmp(argv[i+1]); \
+ while (tmp.good()) \
+ { \
+ std::string tmp_line; \
+ getline(tmp,tmp_line,','); \
+ LIST.push_back(TYPE(tmp_line)); \
+ } \
+ argc--; \
+ i++; \
+ }
+
#define PARSE_HEXSTRING_PARAM_SEC(SHORT, LONG, VALUE) \
else if(str == SHORT || str == LONG) \
{ \
@@ -254,7 +274,7 @@ Options::~Options()
i++; \
}
-#define PARSE_CSLIST_PARAM(SHORT, LONG, LIST, TYPE) \
+#define PARSE_PHRASE_PARAM_SEC(SHORT, LONG, VALUE) \
else if(str == SHORT || str == LONG) \
{ \
if(argc < 1) \
@@ -263,13 +283,10 @@ Options::~Options()
u_int32_t pos = str.length() + 1; \
throw syntax_error(str.append(" ").append(argv[i+1]), pos); \
} \
- std::stringstream tmp(argv[i+1]); \
- while (tmp.good()) \
- { \
- std::string tmp_line; \
- getline(tmp,tmp_line,','); \
- LIST.push_back(TYPE(tmp_line)); \
- } \
+ std::stringstream tmp; \
+ VALUE = argv[i+1]; \
+ for(size_t j=0; j < strlen(argv[i+1]); ++j) \
+ argv[i+1][j] = '#'; \
argc--; \
i++; \
}
@@ -320,6 +337,9 @@ bool Options::parse(int argc, char* argv[])
PARSE_SCALAR_PARAM("-a","--auth-algo", auth_algo_)
PARSE_SCALAR_PARAM("-k","--kd-prf", kd_prf_)
PARSE_SIGNED_INT_PARAM("-l","--ld-kdr", ld_kdr_tmp)
+#ifndef NO_PASSPHRASE
+ PARSE_PHRASE_PARAM_SEC("-E","--passphrase", passphrase_)
+#endif
PARSE_HEXSTRING_PARAM_SEC("-K","--key", key_)
PARSE_HEXSTRING_PARAM_SEC("-A","--salt", salt_)
else
@@ -380,6 +400,9 @@ void Options::printUsage()
std::cout << " [-a|--auth-algo] <algo type> message authentication algorithm" << std::endl;
std::cout << " [-k|--kd-prf] <kd-prf type> key derivation pseudo random function" << std::endl;
std::cout << " [-l|--ld-kdr] <ld-kdr> log2 of key derivation rate" << std::endl;
+#ifndef NO_PASSPHRASE
+ std::cout << " [-E|--passphrase] <pass phrase> a passprhase to generate master key and salt from" << std::endl;
+#endif
std::cout << " [-K|--key] <master key> master key to use for encryption" << std::endl;
std::cout << " [-A|--salt] <master salt> master salt to use for encryption" << std::endl;
}
@@ -429,6 +452,7 @@ void Options::printOptions()
std::cout << "auth_algo = '" << auth_algo_ << "'" << std::endl;
std::cout << "kd_prf = '" << kd_prf_ << "'" << std::endl;
std::cout << "ld_kdr = " << static_cast<int32_t>(ld_kdr_) << std::endl;
+ std::cout << "passphrase = '" << passphrase_ << "'" << std::endl;
std::cout << "key = " << key_.getHexDumpOneLine() << std::endl;
std::cout << "salt = " << salt_.getHexDumpOneLine() << std::endl;
}
@@ -808,6 +832,19 @@ Options& Options::setLdKdr(int8_t l)
return *this;
}
+std::string Options::getPassphrase()
+{
+ ReadersLock lock(mutex);
+ return passphrase_;
+}
+
+Options& Options::setPassphrase(std::string p)
+{
+ WritersLock lock(mutex);
+ passphrase_ = p;
+ return *this;
+}
+
Buffer Options::getKey()
{
ReadersLock lock(mutex);