def test_adder_node(self): attr = model.FileAttr(path=self.test_words_path) node = model.AddNode(prepend=True) node.add_attr(attr) result = list(node.get_words(['A', 'B'])) self.assertEqual(result, ['test1A', 'test word 2A', 'THIRDTESTWORDA', 'test1B', 'test word 2B', 'THIRDTESTWORDB']) self.assertEqual(len(result), node.count_words(2)) attr = model.FileAttr(path=self.test_words_path) node = model.AddNode(prepend=False) node.add_attr(attr) result = list(node.get_words(['A', 'B'])) self.assertEqual(result, ['Atest1', 'Atest word 2', 'ATHIRDTESTWORD', 'Btest1', 'Btest word 2', 'BTHIRDTESTWORD']) self.assertEqual(len(result), node.count_words(2)) attr = model.FileAttr(path=self.test_words_path) node = model.AddNode(prepend=True) node.add_attr(attr) attr = model.NothingAdderAttr() node.add_attr(attr) result = list(node.get_words(['A', 'B'])) self.assertEqual(result, ['test1A', 'test word 2A', 'THIRDTESTWORDA', 'A', 'test1B', 'test word 2B', 'THIRDTESTWORDB', 'B']) self.assertEqual(len(result), node.count_words(2)) node = model.AddNode(prepend=True) result = list(node.get_words(['A', 'B'])) self.assertEqual(result, ['A', 'B']) self.assertEqual(len(result), node.count_words(2))
def test_empty_add_case_chain(self): chain = model.Chain() basewords = ['hello', 'world'] node = model.BaseNode(is_root=True) attr = model.StringListAttr(strings=basewords) node.add_attr(attr) chain.add_node(node) node = model.AddNode() chain.add_node(node) node = model.MutateNode(is_case=True) attr = model.CaseAttr(type_='First', case='Uppercase') node.add_attr(attr) chain.add_node(node) truth_words = ['Hello', 'World'] result = list(chain.get_words()) self.assertEqual(sorted(truth_words), sorted(result)) self.assertEqual(len(basewords), chain.count_words()) self.assertEqual(len('\n'.join(result)+'\n'), chain.count_bytes()) rules = chain.get_rules() self.assert_hashcat_result(sorted(truth_words), rules, basewords=basewords) self.assertTrue(chain.check_hashcat_compatible()) self.assertEqual(':c\n', rules)
def test_append_nothing_chain(self): chain = model.Chain() basewords = ['heLlo', 'worLd'] node = model.BaseNode(is_root=True) attr = model.StringListAttr(strings=basewords) node.add_attr(attr) chain.add_node(node) node = model.AddNode(prepend=False) node.add_attr(model.StringListAttr(strings=['A', 'B'])) node.add_attr(model.NothingAdderAttr()) chain.add_node(node) truth_words = ['heLlo', 'heLloA', 'heLloB', 'worLd', 'worLdA', 'worLdB'] result = list(chain.get_words()) self.assertEqual(sorted(result), sorted(truth_words)) self.assertEqual(len(result), chain.count_words()) rules = chain.get_rules() self.assert_hashcat_result(truth_words, rules, basewords) self.assertTrue(chain.check_hashcat_compatible()) rules_truth = '''$A $B : ''' self.assertEqual(rules_truth, rules)
def test_add_chain(self): chain = model.Chain() basewords = ['heLlo', 'worLd'] node = model.BaseNode(is_root=True) attr = model.StringListAttr(strings=basewords) node.add_attr(attr) chain.add_node(node) node = model.AddNode(prepend=False) node.add_attr(model.FileAttr(path=self.test_words_path)) chain.add_node(node) node = model.AddNode(prepend=False) node.add_attr(model.StringListAttr(strings=['A', 'B'])) node.add_attr(model.NothingAdderAttr()) chain.add_node(node) truth_words = ['heLlotest1A', 'heLlotest1B', 'heLlotest1', 'heLlotest word 2A', 'heLlotest word 2B', 'heLlotest word 2', 'heLloTHIRDTESTWORDA', 'heLloTHIRDTESTWORDB', 'heLloTHIRDTESTWORD', 'worLdtest1A', 'worLdtest1B', 'worLdtest1', 'worLdtest word 2A', 'worLdtest word 2B', 'worLdtest word 2', 'worLdTHIRDTESTWORDA', 'worLdTHIRDTESTWORDB', 'worLdTHIRDTESTWORD'] result = list(chain.get_words()) self.assertEqual(sorted(result), sorted(truth_words)) self.assertEqual(len(result), chain.count_words()) rules = chain.get_rules() self.assert_hashcat_result(truth_words, rules, basewords) self.assertTrue(chain.check_hashcat_compatible()) rules_truth = '''$t$e$s$t$1$A $t$e$s$t$ $w$o$r$d$ $2$A $T$H$I$R$D$T$E$S$T$W$O$R$D$A $t$e$s$t$1$B $t$e$s$t$ $w$o$r$d$ $2$B $T$H$I$R$D$T$E$S$T$W$O$R$D$B $t$e$s$t$1: $t$e$s$t$ $w$o$r$d$ $2: $T$H$I$R$D$T$E$S$T$W$O$R$D: ''' self.assertEqual(rules_truth, rules)
def test_nothing_basenode_chain(self): chain = model.Chain() node = model.BaseNode(is_root=True) attr = model.NothingAdderAttr() node.add_attr(attr) chain.add_node(node) node = model.AddNode(prepend=True) range_ = [5, 10] attr = model.RangeAttr(start=range_[0], end=range_[1]) node.add_attr(attr) chain.add_node(node) result = list(chain.get_words()) truth = list(map(str, range(*range_))) self.assertEqual(sorted(result), sorted(truth)) self.assertEqual(len(result), chain.count_words()) self.assertEqual(len('\n'.join(result)+'\n'), chain.count_bytes()) self.assertTrue(chain.check_hashcat_compatible())
node.add_attr(attr) chain.add_node(node) node = model.MutateNode(is_case=True) node.add_attr(model.CaseAttr(type_='First', case='Uppercase')) node.add_attr(model.CaseAttr(type_='All', case='Lowercase')) node.add_attr(model.NothingMutatorAttr()) chain.add_node(node) node = model.MutateNode() attr = model.SubstitutionAttr(type_='All', checked_vals=['l -> i', 'l -> 1', 'd -> b'], all_together=False) #node.add_attr(model.NothingMutatorAttr()) # differs from hashcat when this is missing node.add_attr(attr) chain.add_node(node) node = model.AddNode() node.add_attr(model.RangeAttr(0, 3)) chain.add_node(node) truth_words = [#'Hello', 'heLlo', 'hello', 'World', 'worLd', 'world', 'Heiio0', 'heiio0', 'Heiio1', 'heiio1', 'Heiio2', 'heiio2', 'He11o0', 'he11o0', 'He11o1', 'he11o1', 'He11o2', 'he11o2', 'Worid0', 'worid0', 'Worid1', 'worid1', 'Worid2', 'worid2', 'Wor1d0', 'wor1d0', 'Wor1d1', 'wor1d1', 'Wor1d2', 'wor1d2', 'Worlb0', 'worLb0', 'Worlb1', 'worLb1', 'Worlb2', 'worLb2', 'worlb0', 'worlb1', 'worlb2'] result = list(chain.get_words()) self.assertEqual(sorted(truth_words), sorted(set(result))) #self.assertEqual(9, chain.count_words()) #self.assertEqual(len('\n'.join(result)+'\n'), chain.count_bytes())