edit readme, change defaults & remove C++20 requirement
This commit is contained in:
parent
8a727a6ed4
commit
501eb679a2
2
Makefile
2
Makefile
@ -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)
|
||||||
|
17
README.md
17
README.md
@ -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:
|
||||||
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
37
passgen.cpp
37
passgen.cpp
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user