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
CPPFLAGS += -I./include
CXXFLAGS += -std=c++20 -O2
CXXFLAGS += -O2
ifeq ($(OS),Windows_NT)

View File

@ -1,7 +1,22 @@
# passgen
passgen generate passphrases based on wordlists.
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:

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 <cstdlib>
#include <format>
#include <functional>
#include <iostream>
#include <fstream>
@ -19,12 +18,11 @@ enum WordlistType { WORDLIST_EFF_LARGE, WORDLIST_EFF_SHORT, WORDLIST_CUSTOM };
struct PassgenOptions {
bool help = false;
WordlistType wordlist_type = WORDLIST_EFF_LARGE;
WordlistType wordlist_type = WORDLIST_EFF_SHORT;
int wordcount = 5;
bool camelcase = false;
std::string seperator = "-";
std::optional<std::string> wordlist_path;
std::optional<std::string> outfile;
};
typedef std::function<void(PassgenOptions&)> NoArgHandle;
@ -77,11 +75,11 @@ PassgenOptions parse_options(int argc, const char* argv[]) {
k->second(settings, {argv[i]});
} else {
throw std::runtime_error {"missing param after " + opt};
exit(1);
std::exit(1);
}
} else {
std::cerr << "unrecognized command-line option " << opt << std::endl;
exit(1);
std::exit(1);
}
}
return settings;
@ -91,25 +89,20 @@ std::vector<std::string> getWordlist(PassgenOptions opts)
{
std::vector<std::string> map;
if (opts.wordlist_type == WORDLIST_EFF_LARGE)
if (opts.wordlist_type != WORDLIST_CUSTOM)
{
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;
while (std::getline(ss, line)) {
map.push_back(line);
}
}
else if (opts.wordlist_type == WORDLIST_EFF_SHORT)
{
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())
else if (opts.wordlist_path.has_value())
{
std::string path = opts.wordlist_path.value();
std::ifstream file(path);
@ -119,8 +112,10 @@ std::vector<std::string> getWordlist(PassgenOptions opts)
map.push_back(line);
}
} 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;
@ -135,13 +130,13 @@ 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)
-s, --short Use the short EFF wordlist (dfault)
-l, --large Use the large EFF wordlist
--camelcase, -cc Generate passphrase 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
Amount of words to use for passphrase, default = 5
--separator <seperator> Specify a character to use as a separator between words, default = `-`
Description: