edit readme, change defaults & remove C++20 requirement

This commit is contained in:
Mans Ziesel 2024-04-28 17:17:10 +02:00
parent 8a727a6ed4
commit 501eb679a2
4 changed files with 33 additions and 40 deletions

View File

@ -2,7 +2,7 @@ TARGETS = passgen
BINARYOUT_TARGETS = passgen.o BINARYOUT_TARGETS = passgen.o
CPPFLAGS += -I./include CPPFLAGS += -I./include
CXXFLAGS += -std=c++20 -O2 CXXFLAGS += -O2
ifeq ($(OS),Windows_NT) ifeq ($(OS),Windows_NT)

View File

@ -1,7 +1,22 @@
# passgen # passgen
passgen generate passphrases based on wordlists.
Usage: Usage:
``` ```
passgen <wordlist_path> <word_count> Usage: passgen [options]
Options:
-h, --help Display this help message and exit
-s, --short Use the short EFF wordlist
-l, --large Use the large EFF wordlist (dfault)
--camelcase, -cc Generate passwords in CamelCase format
-p <path>, --path <path>
Use a custom wordlist file located at <path>
-wc <count>, --wordcount <count>
Amount of words to use for passphrase
--separator <seperator> Specify a character to use as a separator between words, default = `-`
Description:
Generate passphrases based on wordlists.
``` ```
example output: example output:

View File

@ -1,17 +0,0 @@
[
{
"arguments": [
"/usr/bin/g++",
"-std=c++20",
"-O2",
"-I./include",
"-c",
"-o",
"passgen.o",
"passgen.cpp"
],
"directory": "/home/mans/dev/passgen",
"file": "/home/mans/dev/passgen/passgen.cpp",
"output": "/home/mans/dev/passgen/passgen.o"
}
]

View File

@ -1,6 +1,5 @@
#include <cctype> #include <cctype>
#include <cstdlib> #include <cstdlib>
#include <format>
#include <functional> #include <functional>
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
@ -19,12 +18,11 @@ enum WordlistType { WORDLIST_EFF_LARGE, WORDLIST_EFF_SHORT, WORDLIST_CUSTOM };
struct PassgenOptions { struct PassgenOptions {
bool help = false; bool help = false;
WordlistType wordlist_type = WORDLIST_EFF_LARGE; WordlistType wordlist_type = WORDLIST_EFF_SHORT;
int wordcount = 5; int wordcount = 5;
bool camelcase = false; bool camelcase = false;
std::string seperator = "-"; std::string seperator = "-";
std::optional<std::string> wordlist_path; std::optional<std::string> wordlist_path;
std::optional<std::string> outfile;
}; };
typedef std::function<void(PassgenOptions&)> NoArgHandle; typedef std::function<void(PassgenOptions&)> NoArgHandle;
@ -77,11 +75,11 @@ PassgenOptions parse_options(int argc, const char* argv[]) {
k->second(settings, {argv[i]}); k->second(settings, {argv[i]});
} else { } else {
throw std::runtime_error {"missing param after " + opt}; throw std::runtime_error {"missing param after " + opt};
exit(1); std::exit(1);
} }
} else { } else {
std::cerr << "unrecognized command-line option " << opt << std::endl; std::cerr << "unrecognized command-line option " << opt << std::endl;
exit(1); std::exit(1);
} }
} }
return settings; return settings;
@ -91,25 +89,20 @@ std::vector<std::string> getWordlist(PassgenOptions opts)
{ {
std::vector<std::string> map; std::vector<std::string> map;
if (opts.wordlist_type == WORDLIST_EFF_LARGE) if (opts.wordlist_type != WORDLIST_CUSTOM)
{ {
std::stringstream ss; std::stringstream ss;
ss.write(reinterpret_cast<const char*>(eff_large_wordlist_txt), eff_large_wordlist_txt_len); if (WORDLIST_EFF_SHORT) {
ss.write(reinterpret_cast<const char*>(eff_short_wordlist_1_txt), eff_short_wordlist_1_txt_len);
} else {
ss.write(reinterpret_cast<const char*>(eff_large_wordlist_txt), eff_large_wordlist_txt_len);
}
std::string line; std::string line;
while (std::getline(ss, line)) { while (std::getline(ss, line)) {
map.push_back(line); map.push_back(line);
} }
} }
else if (opts.wordlist_type == WORDLIST_EFF_SHORT) else if (opts.wordlist_path.has_value())
{
std::stringstream ss;
ss.write(reinterpret_cast<const char*>(eff_short_wordlist_1_txt), eff_short_wordlist_1_txt_len);
std::string line;
while (std::getline(ss, line)) {
map.push_back(line);
}
}
else if (opts.wordlist_type == WORDLIST_CUSTOM && opts.wordlist_path.has_value())
{ {
std::string path = opts.wordlist_path.value(); std::string path = opts.wordlist_path.value();
std::ifstream file(path); std::ifstream file(path);
@ -119,8 +112,10 @@ std::vector<std::string> getWordlist(PassgenOptions opts)
map.push_back(line); map.push_back(line);
} }
} else { } else {
std::cout << std::format("ERROR: failed to open '{}'\n", path); std::cout << "ERROR: failed to open '" << path << "'" << std::endl;
} }
} else {
std::cout << "ERROR: no wordlist specified" << std::endl;
} }
return map; return map;
@ -135,13 +130,13 @@ Usage: passgen [options]
Options: Options:
-h, --help Display this help message and exit -h, --help Display this help message and exit
-s, --short Use the short EFF wordlist -s, --short Use the short EFF wordlist (dfault)
-l, --large Use the large EFF wordlist (dfault) -l, --large Use the large EFF wordlist
--camelcase, -cc Generate passphrase in CamelCase format --camelcase, -cc Generate passphrase in CamelCase format
-p <path>, --path <path> -p <path>, --path <path>
Use a custom wordlist file located at <path> Use a custom wordlist file located at <path>
-wc <count>, --wordcount <count> -wc <count>, --wordcount <count>
Amount of words to use for passphrase Amount of words to use for passphrase, default = 5
--separator <seperator> Specify a character to use as a separator between words, default = `-` --separator <seperator> Specify a character to use as a separator between words, default = `-`
Description: Description: