From f23496c297f3a7d3ff3e60b0b8f8af6e6393699b Mon Sep 17 00:00:00 2001 From: Omercanyt Date: Fri, 14 May 2021 00:23:19 +0300 Subject: [PATCH 1/5] Support setting minimum and maximum lengths for generated strings Now it supports setting minimum and maximum lengths for generated strings --- MarkovModel/src/model.cpp | 25 ++++++++++++++++++++----- MarkovModel/src/model.h | 2 +- MarkovPasswords/src/markovPasswords.cpp | 4 ++-- MarkovPasswords/src/markovPasswords.h | 2 +- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/MarkovModel/src/model.cpp b/MarkovModel/src/model.cpp index 91f9de17..9e773664 100644 --- a/MarkovModel/src/model.cpp +++ b/MarkovModel/src/model.cpp @@ -93,16 +93,31 @@ bool Markov::Model::Export(const char* filename) { } template -NodeStorageType* Markov::Model::RandomWalk() { +NodeStorageType* Markov::Model::RandomWalk(int minSetting, int maxSetting) { + std::cout << "Hello\n"; Markov::Node* n = this->starterNode; int len = 0; NodeStorageType *ret = new NodeStorageType[64]; - + Markov::Node *temp_node; while (n != NULL) { - n = n->RandomNext(); + //n = n->RandomNext(); + temp_node = n->RandomNext(); //dirty cutoff, needs better solution - if (len == 60) break; - if (n == NULL) break; + if (len == 60) + break; + if (len > maxSetting) { + //std::cout<<"MAX ->"<< "node*: " << temp_node << ", len: " << len << "\n"; + break; + } + + if ((temp_node == NULL) && (len < minSetting)) { + //std::cout << "node*: " << temp_node << ", len: " << len << "\n"; + continue; + } + + if (temp_node == NULL) + break; + n = temp_node; //std::cout << n->NodeValue(); ret[len++] = n->NodeValue(); diff --git a/MarkovModel/src/model.h b/MarkovModel/src/model.h index 935d2a23..1e4be6ca 100644 --- a/MarkovModel/src/model.h +++ b/MarkovModel/src/model.h @@ -34,7 +34,7 @@ namespace Markov { * Start from the starter node, invoke RandomNext on current node until terminator node is reached. * @return Null terminated string that was generated. */ - NodeStorageType* RandomWalk(); + NodeStorageType* RandomWalk(int minSetting, int maxSetting); /** @brief Adjust the model with a single string. * Start from the starter node, and for each character, AdjustEdge the edge EdgeWeight from current node to the next, until NULL character is reached. diff --git a/MarkovPasswords/src/markovPasswords.cpp b/MarkovPasswords/src/markovPasswords.cpp index cfd16995..2075127d 100644 --- a/MarkovPasswords/src/markovPasswords.cpp +++ b/MarkovPasswords/src/markovPasswords.cpp @@ -70,7 +70,7 @@ std::ofstream* MarkovPasswords::Save(const char* filename) { } -void MarkovPasswords::Generate(unsigned long int n, const char* wordlistFileName) { +void MarkovPasswords::Generate(unsigned long int n, const char* wordlistFileName, int minLen, int maxLen) { char* res; char print[100]; std::ofstream wordlist; @@ -78,7 +78,7 @@ void MarkovPasswords::Generate(unsigned long int n, const char* wordlistFileName wordlist.open(wordlistFileName); for (int i = 0; i < n; i++) { - res = this->RandomWalk(); + res = this->RandomWalk(minLen, maxLen); #ifdef _WIN32 strcpy_s(print, 100, (char*)res); #else diff --git a/MarkovPasswords/src/markovPasswords.h b/MarkovPasswords/src/markovPasswords.h index 9769438c..5836567f 100644 --- a/MarkovPasswords/src/markovPasswords.h +++ b/MarkovPasswords/src/markovPasswords.h @@ -46,7 +46,7 @@ class MarkovPasswords : public Markov::Model{ * @param n - Number of passwords to generate. * @return std::ofstream* of the output file. */ - void Generate(unsigned long int n, const char* wordlistFileName); + void Generate(unsigned long int n, const char* wordlistFileName, int minLen=6, int maxLen=12); private: std::ifstream* datasetFile; From 466e00b0d3dda84dd23d4f916118edbf0bd53703 Mon Sep 17 00:00:00 2001 From: Omercanyt Date: Wed, 19 May 2021 22:52:37 +0300 Subject: [PATCH 2/5] Cli changes With min max values --- Markopy/src/CLI/markopy_cli.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Markopy/src/CLI/markopy_cli.py b/Markopy/src/CLI/markopy_cli.py index 796d3882..5baffdd2 100644 --- a/Markopy/src/CLI/markopy_cli.py +++ b/Markopy/src/CLI/markopy_cli.py @@ -22,7 +22,7 @@ parser.add_argument("input", help="Input model file. This model will be imported before starting operation.") parser.add_argument("-o", "--output", help="Output model file. This model will be exported when done. Will be ignored for generation mode.") parser.add_argument("-d", "--dataset", help="Dataset file to read input from for training. Will be ignored for generation mode.") -parser.add_argument("-s", "--seperator",help="Seperator character to use with training data.(character between occurrence and value)") +parser.add_argument("-s", "--seperator",help="Seperator character to use with training data.(character between occurrence and NodeValue)") parser.add_argument("-w", "--wordlist", help="Wordlist file path to export generation results to. Will be ignored for training mode") parser.add_argument("-n", "--count", help="Number of lines to generate. Ignored in training mode.") parser.add_argument("-v", "--verbosity",action="count", help="Output verbosity.") @@ -89,7 +89,7 @@ def cli_generate(model): if(os.path.isfile(args.wordlist)): logging.pprint(f"{args.wordlist} exists and will be overwritten.", 1) - model.Generate(int(args.count), args.wordlist) + model.Generate(int(args.count), args.wordlist,6,12) From 0d35a0486d07418663b7f5fa8859b06953909fb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ata=20Hak=C3=A7=C4=B1l?= Date: Wed, 19 May 2021 22:55:12 +0300 Subject: [PATCH 3/5] Revert refactoring mistake in 466e00b --- Markopy/src/CLI/markopy_cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Markopy/src/CLI/markopy_cli.py b/Markopy/src/CLI/markopy_cli.py index 5baffdd2..466e722a 100644 --- a/Markopy/src/CLI/markopy_cli.py +++ b/Markopy/src/CLI/markopy_cli.py @@ -22,7 +22,7 @@ parser.add_argument("input", help="Input model file. This model will be imported before starting operation.") parser.add_argument("-o", "--output", help="Output model file. This model will be exported when done. Will be ignored for generation mode.") parser.add_argument("-d", "--dataset", help="Dataset file to read input from for training. Will be ignored for generation mode.") -parser.add_argument("-s", "--seperator",help="Seperator character to use with training data.(character between occurrence and NodeValue)") +parser.add_argument("-s", "--seperator",help="Seperator character to use with training data.(character between occurrence and value)") parser.add_argument("-w", "--wordlist", help="Wordlist file path to export generation results to. Will be ignored for training mode") parser.add_argument("-n", "--count", help="Number of lines to generate. Ignored in training mode.") parser.add_argument("-v", "--verbosity",action="count", help="Output verbosity.") From 6afd00aa86744ab1b4b8b32bf5b6e2384ecc6ec4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ata=20Hak=C3=A7=C4=B1l?= Date: Wed, 19 May 2021 23:09:44 +0300 Subject: [PATCH 4/5] Correctly parameterize variables implemented in 466e00b0d3dda84dd23d4f916118edbf0bd53703 --- Markopy/src/CLI/markopy_cli.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Markopy/src/CLI/markopy_cli.py b/Markopy/src/CLI/markopy_cli.py index 466e722a..de7d5139 100644 --- a/Markopy/src/CLI/markopy_cli.py +++ b/Markopy/src/CLI/markopy_cli.py @@ -24,6 +24,8 @@ parser.add_argument("-d", "--dataset", help="Dataset file to read input from for training. Will be ignored for generation mode.") parser.add_argument("-s", "--seperator",help="Seperator character to use with training data.(character between occurrence and value)") parser.add_argument("-w", "--wordlist", help="Wordlist file path to export generation results to. Will be ignored for training mode") +parser.add_argument("--min", default=6, help="Minimum length that is allowed during generation") +parser.add_argument("--max", default=12,help="Maximum length that is allowed during generation") parser.add_argument("-n", "--count", help="Number of lines to generate. Ignored in training mode.") parser.add_argument("-v", "--verbosity",action="count", help="Output verbosity.") args = parser.parse_args() @@ -89,7 +91,7 @@ def cli_generate(model): if(os.path.isfile(args.wordlist)): logging.pprint(f"{args.wordlist} exists and will be overwritten.", 1) - model.Generate(int(args.count), args.wordlist,6,12) + model.Generate(int(args.count), args.wordlist, args.min, args.max) From f34dd0737ab05693d8d109a4c3dca1ca6022fc89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ata=20Hak=C3=A7=C4=B1l?= Date: Wed, 19 May 2021 23:15:16 +0300 Subject: [PATCH 5/5] Ffs cleanup your debug prints --- MarkovModel/src/model.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/MarkovModel/src/model.cpp b/MarkovModel/src/model.cpp index 9e773664..2ff3ec06 100644 --- a/MarkovModel/src/model.cpp +++ b/MarkovModel/src/model.cpp @@ -94,7 +94,6 @@ bool Markov::Model::Export(const char* filename) { template NodeStorageType* Markov::Model::RandomWalk(int minSetting, int maxSetting) { - std::cout << "Hello\n"; Markov::Node* n = this->starterNode; int len = 0; NodeStorageType *ret = new NodeStorageType[64];