コード例 #1
0
ファイル: test_j_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_compute_1(self):
        """compute()"""
        """
            Test without blow up patterns
        """
        hyfa = JHybridFA()
        
        parser = pcre_parser()
        hyfa.set_parser(parser)
        hyfa.load_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_compute_1.re")
        
        hyfa.compute()
        
        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        parser = pcre_parser()
        parser.load_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_compute_1.re")
        dfa = b_dfa()
        dfa.create_by_parser(parser)
        dfa.compute()
        
        a = hyfa.dfa.get_automaton(False)
        b = dfa.get_automaton(False)
        
        # Test without blow up patterns
        self.assertEqual(a.states.keys(), b.states.keys())
        self.assertEqual(a.alphabet, b.alphabet)
        self.assertEqual(a.start, b.start)
        self.assertEqual(a.final, b.final)
        self.assertEqual(a.transitions, b.transitions)
        self.assertTrue(a.Flags['Hybrid FA - DFA part'])
        self.assertTrue(a.Flags['Deterministic'])
        self.assertEqual(len(hyfa.nfas), 0)
        self.assertEqual(hyfa.tran_aut, {})
コード例 #2
0
ファイル: test_j_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_search_4(self):
        """search()"""
        """
            Test with many regular expression where computed automaton
            has many NFA parts.
            Compares results of searching in computed Hybrid FA with
            regular NFA automaton searching.
        """
        parser = pcre_parser()
        parser.load_file(aux_func.getPatternMatchDir() + "/rules/Moduly/web-cgi.rules.pcre")

        nfa_aut = b_nfa()
        nfa_aut.create_by_parser(parser)
        nfa_aut.compute()
        
        parser = pcre_parser()
        
        hyfa = JHybridFA()
        hyfa.set_parser(parser)
        hyfa.load_file(aux_func.getPatternMatchDir() + "/rules/Moduly/web-cgi.rules.pcre")
        
        hyfa.compute()

        input_data = "/awstats.pl?---configdir=| /calendar-admin.pl /db4web_c.exe/aaaa:  /itemid=123f  /ShellExample.cgi?*"
        self.assertEqual(nfa_aut.search(input_data), hyfa.search(input_data))
コード例 #3
0
ファイル: test_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_search_3(self):
        """search()"""
        """
            Test with many regular expression where computed automaton
            has many NFA parts.
            Compares results of searching in computed Hybrid FA with
            regular NFA automaton searching.
        """
        parser = pcre_parser()
        parser.load_file(aux_func.getPatternMatchDir() +
                         "/rules/Snort/web-cgi.rules.pcre")

        nfa_aut = b_nfa()
        nfa_aut.create_by_parser(parser)
        nfa_aut.compute()

        parser = pcre_parser()
        parser.load_file(aux_func.getPatternMatchDir() +
                         "/rules/Snort/web-cgi.rules.pcre")

        hyfa = hybrid_fa()
        hyfa.create_by_parser(parser)

        hyfa.set_special_min_depth(2)
        hyfa.set_max_head_size(0)
        hyfa.set_max_tx(0)

        hyfa.compute()

        input_data = "/awstats.pl?---configdir=| /calendar-admin.pl /db4web_c.exe/aaaa:  /itemid=123f  /ShellExample.cgi?aaaaa*"
        self.assertEqual(nfa_aut.search(input_data), hyfa.search(input_data))
コード例 #4
0
ファイル: test_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_compute_4(self):
        """compute()"""
        """
            Test with more regular expressions, where computed automaton
            has has some NFA tails
        """

        hyfa = hybrid_fa()
        
        parser = pcre_parser()
        parser.load_file(aux_func.getPatternMatchDir() + "/algorithms/hybrid_fa/tests_data/test_compute_4_pattern.re")
        hyfa.create_by_parser(parser)
        
        hyfa.set_special_min_depth(2)
        hyfa.set_max_head_size(-1)
        hyfa.set_max_tx(-1)

        hyfa.compute()

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        hd = hyfa.dfa.get_automaton()
        hn0 = hyfa.nfas[0].get_automaton()
        hn1 = hyfa.nfas[1].get_automaton()
        d = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/hybrid_fa/tests_data/test_compute_4_dfa.nfa_data")
        n0 = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/hybrid_fa/tests_data/test_compute_4_nfa0.nfa_data")
        n1 = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/hybrid_fa/tests_data/test_compute_4_nfa1.nfa_data")

        # test of DFA part
        self.assertEqual(hd.states.keys(), d.states.keys())
        self.assertEqual(hd.alphabet, d.alphabet)
        self.assertEqual(hd.start, d.start)
        self.assertTrue(len(hd.final) == 0)
        self.assertEqual(hd.transitions, d.transitions)
        self.assertTrue(hd.Flags['Hybrid FA - DFA part'])
        self.assertTrue(hd.Flags['Deterministic'])
        
        # two NFA tails
        self.assertEqual(len(hyfa.nfas), 2)
        self.assertEqual(hyfa.tran_aut, {0:4, 1:5})
        
        # test of NFA part #0
        self.assertEqual(hn0.states.keys(), n0.states.keys())
        self.assertEqual(hn0.alphabet, n0.alphabet)
        self.assertEqual(hn0.start, n0.start)
        self.assertEqual(hn0.final, n0.final)
        self.assertEqual(hn0.transitions, n0.transitions)
        self.assertTrue(hn0.Flags['Hybrid FA - one NFA part'])

        # test of NFA part #1
        self.assertEqual(hn1.states.keys(), n1.states.keys())
        self.assertEqual(hn1.alphabet, n1.alphabet)
        self.assertEqual(hn1.start, n1.start)
        self.assertEqual(hn1.final, n1.final)
        self.assertEqual(hn1.transitions, n1.transitions)
        self.assertTrue(hn1.Flags['Hybrid FA - one NFA part'])
コード例 #5
0
ファイル: test_j_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_compute_5(self):
        """compute()"""
        """
            Test where are more blow up REs
        """
        hyfa = JHybridFA()
        
        parser = pcre_parser()
        hyfa.set_parser(parser)
        hyfa.load_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_compute_5.re")
        
        hyfa.compute()
        
        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        hd = hyfa.dfa.get_automaton(False)
        hn0 = hyfa.nfas[0].get_automaton(False)
        hn1 = hyfa.nfas[1].get_automaton(False)
        d = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_compute_5_dfa.nfa_data")
        n0 = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_compute_5_nfa0.nfa_data")
        n1 = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_compute_5_nfa1.nfa_data")

        # test where are more blow up REs
        # test of DFA part
        self.assertEqual(hd.states.keys(), d.states.keys())
        self.assertEqual(hd.alphabet, d.alphabet)
        self.assertEqual(hd.start, d.start)
        self.assertEqual(len(hd.final), 3)
        self.assertEqual(hd.transitions, d.transitions)
        self.assertTrue(hd.Flags['Hybrid FA - DFA part'])
        self.assertTrue(hd.Flags['Deterministic'])
        
        self.assertEqual(len(hyfa.nfas), 2)
        self.assertEqual({0:0, 1: 10}, hyfa.tran_aut)
        
        # test of NFA part #0
        self.assertEqual(hn0.states.keys(), n0.states.keys())
        self.assertEqual(hn0.alphabet, n0.alphabet)
        self.assertEqual(hn0.start, n0.start)
        self.assertEqual(hn0.final, n0.final)
        self.assertEqual(hn0.transitions, n0.transitions)
        self.assertTrue(hn0.Flags['Hybrid FA - one NFA part'])

        # test of NFA part #1
        self.assertEqual(hn1.states.keys(), n1.states.keys())
        self.assertEqual(hn1.alphabet, n1.alphabet)
        self.assertEqual(hn1.start, n1.start)
        self.assertEqual(hn1.final, n1.final)
        self.assertEqual(hn1.transitions, n1.transitions)
        self.assertTrue(hn1.Flags['Hybrid FA - one NFA part'])
コード例 #6
0
ファイル: test_j_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_compute_4(self):
        """compute()"""
        """
            Test with more patterns where some are blow up
        """
        hyfa = JHybridFA()

        parser = pcre_parser()
        hyfa.set_parser(parser)
        hyfa.load_file(aux_func.getPatternMatchDir() +
                       "/algorithms/j_hybrid_fa/tests_data/test_compute_4.re")

        hyfa.compute()

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        hd = hyfa.dfa.get_automaton(False)
        hn0 = hyfa.nfas[0].get_automaton(False)
        d = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_hybrid_fa/tests_data/test_compute_4_dfa.nfa_data")
        n = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_hybrid_fa/tests_data/test_compute_4_nfa0.nfa_data")

        # Test with more patterns where some are blow up
        # test of DFA part
        self.assertEqual(hd.states.keys(), d.states.keys())
        self.assertEqual(hd.alphabet, d.alphabet)
        self.assertEqual(hd.start, d.start)
        self.assertEqual(len(hd.final), 2)
        self.assertEqual(hd.transitions, d.transitions)
        self.assertTrue(hd.Flags['Hybrid FA - DFA part'])
        self.assertTrue(hd.Flags['Deterministic'])

        self.assertEqual(len(hyfa.nfas), 1)
        self.assertEqual({0: 0}, hyfa.tran_aut)

        # test of NFA part #0
        self.assertEqual(hn0.states.keys(), n.states.keys())
        self.assertEqual(hn0.alphabet, n.alphabet)
        self.assertEqual(hn0.start, n.start)
        self.assertEqual(hn0.final, n.final)
        self.assertEqual(hn0.transitions, n.transitions)
        self.assertTrue(hn0.Flags['Hybrid FA - one NFA part'])
コード例 #7
0
ファイル: test_history_fa.py プロジェクト: 4sp1r3/appreal
    def test_report_memory_naive(self):
        """report_memory_naive()"""

        his_fa = history_fa()
        his_fa.compute(aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/his_fa_1.RE")

        self.assertTrue(his_fa.report_memory_naive() == 40)
コード例 #8
0
ファイル: test_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_search_2(self):
        """search()"""
        """
            Test with more regular expression where computed automaton
            has some NFA parts.
        """

        parser = pcre_parser()
        parser.load_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/hybrid_fa/tests_data/test_search_1_pattern.re")

        hyfa = hybrid_fa()
        hyfa.create_by_parser(parser)

        hyfa.set_special_min_depth(2)
        hyfa.set_max_head_size(-1)
        hyfa.set_max_tx(-1)

        hyfa.compute()

        self.assertTrue(hyfa.get_compute())

        ret = hyfa.search("abcd")
        self.assertEqual(ret, [1, 0])

        ret = hyfa.search("bce")
        self.assertEqual(ret, [0, 1])

        ret = hyfa.search("cdefgh")
        self.assertEqual(ret, [0, 0])
コード例 #9
0
ファイル: test_j_hybrid_fa.py プロジェクト: 4sp1r3/appreal
 def _test_search_1(self):
     """search()"""
     """
         Test with more regular expression where computed automaton
         has some NFA parts.
     """
     
     parser = pcre_parser()
     
     hyfa = JHybridFA()
     hyfa.load_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_search_1.re")
     hyfa.set_parser(parser)
   
     hyfa.compute()
     
     self.assertTrue(hyfa.get_compute())
     
     ret = hyfa.search("0123 uvwx")
     self.assertEqual(ret, [1,0,1,0])
     
     ret = hyfa.search("abcd abgggcd")
     self.assertEqual(ret, [0,1,0,1])
     
     ret = hyfa.search("aaaaa")
     self.assertEqual(ret, [0,0,0,0])
コード例 #10
0
ファイル: test_j_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_search_2(self):
        """search()"""
        """
            Test with more regular expression where are not blow up REs.
        """
        
        parser = pcre_parser()
        
        hyfa = JHybridFA()
        hyfa.load_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_search_2.re")
        hyfa.set_parser(parser)

        hyfa.compute()
        
        self.assertTrue(hyfa.get_compute())
        
        ret = hyfa.search("0123")
        self.assertEqual(ret, [1,0,0,0])
        
        ret = hyfa.search("uvwx")
        self.assertEqual(ret, [0,0,1,0])

        ret = hyfa.search("abcd uvwx")
        self.assertEqual(ret, [0,1,1,0])
        
        ret = hyfa.search("cdefgh")
        self.assertEqual(ret, [0,0,0,0])
コード例 #11
0
ファイル: test_j_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_search_3(self):
        """search()"""
        """
            Test with more REs where some have blow up patterns on his starts.
        """
        
        parser = pcre_parser()
        
        hyfa = JHybridFA()
        hyfa.load_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_search_3.re")
        hyfa.set_parser(parser)

        hyfa.compute()
        
        self.assertTrue(hyfa.get_compute())
        
        ret = hyfa.search("0123")
        self.assertEqual(ret, [1,0,0,0])
        
        ret = hyfa.search("uvwx")
        self.assertEqual(ret, [0,0,1,0])

        ret = hyfa.search("abcd uvwx")
        self.assertEqual(ret, [0,1,1,1])
        
        ret = hyfa.search("abcd agcd")
        self.assertEqual(ret, [0,1,0,1])
        
        ret = hyfa.search("cdefgh")
        self.assertEqual(ret, [0,0,0,0])
コード例 #12
0
ファイル: test_j_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_search_3(self):
        """search()"""
        """
            Test with more REs where some have blow up patterns on his starts.
        """

        parser = pcre_parser()

        hyfa = JHybridFA()
        hyfa.load_file(aux_func.getPatternMatchDir() +
                       "/algorithms/j_hybrid_fa/tests_data/test_search_3.re")
        hyfa.set_parser(parser)

        hyfa.compute()

        self.assertTrue(hyfa.get_compute())

        ret = hyfa.search("0123")
        self.assertEqual(ret, [1, 0, 0, 0])

        ret = hyfa.search("uvwx")
        self.assertEqual(ret, [0, 0, 1, 0])

        ret = hyfa.search("abcd uvwx")
        self.assertEqual(ret, [0, 1, 1, 1])

        ret = hyfa.search("abcd agcd")
        self.assertEqual(ret, [0, 1, 0, 1])

        ret = hyfa.search("cdefgh")
        self.assertEqual(ret, [0, 0, 0, 0])
コード例 #13
0
ファイル: test_j_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_search_2(self):
        """search()"""
        """
            Test with more regular expression where are not blow up REs.
        """

        parser = pcre_parser()

        hyfa = JHybridFA()
        hyfa.load_file(aux_func.getPatternMatchDir() +
                       "/algorithms/j_hybrid_fa/tests_data/test_search_2.re")
        hyfa.set_parser(parser)

        hyfa.compute()

        self.assertTrue(hyfa.get_compute())

        ret = hyfa.search("0123")
        self.assertEqual(ret, [1, 0, 0, 0])

        ret = hyfa.search("uvwx")
        self.assertEqual(ret, [0, 0, 1, 0])

        ret = hyfa.search("abcd uvwx")
        self.assertEqual(ret, [0, 1, 1, 0])

        ret = hyfa.search("cdefgh")
        self.assertEqual(ret, [0, 0, 0, 0])
コード例 #14
0
ファイル: test_j_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_search_1(self):
        """search()"""
        """
            Test with more regular expression where computed automaton
            has some NFA parts.
        """

        parser = pcre_parser()

        hyfa = JHybridFA()
        hyfa.load_file(aux_func.getPatternMatchDir() +
                       "/algorithms/j_hybrid_fa/tests_data/test_search_1.re")
        hyfa.set_parser(parser)

        hyfa.compute()

        self.assertTrue(hyfa.get_compute())

        ret = hyfa.search("0123 uvwx")
        self.assertEqual(ret, [1, 0, 1, 0])

        ret = hyfa.search("abcd abgggcd")
        self.assertEqual(ret, [0, 1, 0, 1])

        ret = hyfa.search("aaaaa")
        self.assertEqual(ret, [0, 0, 0, 0])
コード例 #15
0
ファイル: test_hybrid_fa.py プロジェクト: 4sp1r3/appreal
 def _test_search_2(self):
     """search()"""
     """
         Test with more regular expression where computed automaton
         has some NFA parts.
     """
     
     parser = pcre_parser()
     parser.load_file(aux_func.getPatternMatchDir() + "/algorithms/hybrid_fa/tests_data/test_search_1_pattern.re")
     
     hyfa = hybrid_fa()
     hyfa.create_by_parser(parser)
     
     hyfa.set_special_min_depth(2)
     hyfa.set_max_head_size(-1)
     hyfa.set_max_tx(-1)
     
     hyfa.compute()
     
     self.assertTrue(hyfa.get_compute())
     
     ret = hyfa.search("abcd")
     self.assertEqual(ret, [1,0])
     
     ret = hyfa.search("bce")
     self.assertEqual(ret, [0,1])
     
     ret = hyfa.search("cdefgh")
     self.assertEqual(ret, [0,0])
コード例 #16
0
    def test__replace_length_restriction_with_a_closure(self):
        """_replace_length_restriction_with_a_closure(NFA)"""
        # /ab.{4}cd /; test with an expression that contains .{4}
        par = pcre_parser(create_cnt_constr=True)
        par.set_text("/ab.{4}cd/")
        history = HistoryCountingFA()
        history.create_by_parser(par)
        history.remove_epsilons()
        NFA = history.get_automaton(True)
        NFA_without_cnt = history._replace_length_restriction_with_a_closure(
            NFA)
        copy = NFA_without_cnt

        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/history_counting_fa/test_data/test_data_1.nfa_data")

        self.assertTrue(history.flags_cnt == {4: "4"})

        self.assertTrue(
            sorted(copy.states.keys()) == sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
        self.assertTrue(copy.Flags == result.Flags)
コード例 #17
0
ファイル: test_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_compute_3(self):
        """compute()"""
        """
            Test with more regular expressions, where computed automaton
            has only DFA part without any NFA tails
        """

        parser = pcre_parser()
        parser.load_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/hybrid_fa/tests_data/test_compute_3_pattern.re")

        hyfa = hybrid_fa()
        hyfa.create_by_parser(parser)

        hyfa.set_special_min_depth(10)
        hyfa.set_max_head_size(-1)
        hyfa.set_max_tx(-1)
        hyfa.compute()

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        parser = pcre_parser()
        parser.load_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/hybrid_fa/tests_data/test_compute_3_pattern.re")

        dfa = b_dfa()
        dfa.create_by_parser(parser)
        dfa.determinise()

        hd = hyfa.dfa.get_automaton()
        d = dfa.get_automaton()

        # test of DFA part
        self.assertEqual(hd.states.keys(), d.states.keys())
        self.assertEqual(hd.alphabet, d.alphabet)
        self.assertEqual(hd.start, d.start)
        self.assertEqual(hd.final, d.final)
        self.assertEqual(hd.transitions, d.transitions)
        self.assertTrue(hd.Flags['Hybrid FA - DFA part'])
        self.assertTrue(hd.Flags['Deterministic'])

        # without NFA tails
        self.assertEqual(len(hyfa.nfas), 0)
        self.assertEqual(hyfa.tran_aut, {})
コード例 #18
0
ファイル: test_history_fa.py プロジェクト: vhavlena/appreal
    def test_report_memory_naive(self):
        """report_memory_naive()"""

        his_fa = history_fa()
        his_fa.compute(aux_func.getPatternMatchDir() +
                       "/algorithms/j_history_fa/test_data/his_fa_1.RE")

        self.assertTrue(his_fa.report_memory_naive() == 40)
コード例 #19
0
ファイル: test_j_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_compute_3(self):
        """compute()"""
        """
            Test with more patterns and one with blow up on start on RE
        """
        hyfa = JHybridFA()
        
        parser = pcre_parser()
        hyfa.set_parser(parser)
        hyfa.load_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_compute_3.re")
        
        hyfa.compute()
        
        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        hd = hyfa.dfa.get_automaton(False)
        hn0 = hyfa.nfas[0].get_automaton(False)
        d = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_compute_3_dfa.nfa_data")
        n = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_compute_3_nfa0.nfa_data")

        # Test with more patterns and one with blow up on start on RE
        # test of DFA part
        self.assertEqual(hd.states.keys().sort(), d.states.keys().sort())
        self.assertEqual(hd.alphabet, d.alphabet)
        self.assertEqual(hd.start, d.start)
        self.assertEqual(len(hd.final), 3)
        self.assertEqual(hd.transitions, d.transitions)
        self.assertTrue(hd.Flags['Hybrid FA - DFA part'])
        self.assertTrue(hd.Flags['Deterministic'])
        
        self.assertEqual(len(hyfa.nfas), 1)
        self.assertEqual(hyfa.tran_aut, {0: 8})
        
        # test of NFA part #0
        self.assertEqual(hn0.states.keys().sort(), n.states.keys().sort())
        self.assertEqual(hn0.alphabet, n.alphabet)
        self.assertEqual(hn0.start, n.start)
        self.assertEqual(hn0.final, n.final)
        self.assertEqual(hn0.transitions, n.transitions)
        self.assertTrue(hn0.Flags['Hybrid FA - one NFA part'])
コード例 #20
0
ファイル: test_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_compute_3(self):
        """compute()"""
        """
            Test with more regular expressions, where computed automaton
            has only DFA part without any NFA tails
        """

        parser = pcre_parser()
        parser.load_file(aux_func.getPatternMatchDir() + "/algorithms/hybrid_fa/tests_data/test_compute_3_pattern.re")

        hyfa = hybrid_fa()
        hyfa.create_by_parser(parser)
        
        hyfa.set_special_min_depth(10)
        hyfa.set_max_head_size(-1)
        hyfa.set_max_tx(-1)
        hyfa.compute()

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        parser = pcre_parser()
        parser.load_file(aux_func.getPatternMatchDir() + "/algorithms/hybrid_fa/tests_data/test_compute_3_pattern.re")
        
        dfa = b_dfa()
        dfa.create_by_parser(parser)
        dfa.determinise()

        hd = hyfa.dfa.get_automaton()
        d = dfa.get_automaton()

        # test of DFA part
        self.assertEqual(hd.states.keys(), d.states.keys())
        self.assertEqual(hd.alphabet, d.alphabet)
        self.assertEqual(hd.start, d.start)
        self.assertEqual(hd.final, d.final)
        self.assertEqual(hd.transitions, d.transitions)
        self.assertTrue(hd.Flags['Hybrid FA - DFA part'])
        self.assertTrue(hd.Flags['Deterministic'])

        # without NFA tails
        self.assertEqual(len(hyfa.nfas), 0)
        self.assertEqual(hyfa.tran_aut, {})
コード例 #21
0
ファイル: test_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_compute_2(self):
        """compute()"""
        """
            Test with one regular expression, where computed automaton
            has one NFA tail
        """

        hyfa = hybrid_fa()

        parser = pcre_parser()
        parser.set_text("/abcd/")
        hyfa.create_by_parser(parser)

        hyfa.set_special_min_depth(2)
        hyfa.set_max_head_size(-1)
        hyfa.set_max_tx(-1)

        hyfa.compute()

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        parser_dfa = pcre_parser()
        parser_dfa.set_text("/ab/")
        dfa = b_dfa()
        dfa.create_by_parser(parser_dfa)
        dfa.determinise()

        hd = hyfa.dfa.get_automaton()
        hn0 = hyfa.nfas[0].get_automaton()
        d = dfa.get_automaton()
        n = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/hybrid_fa/tests_data/test_compute_2_nfa0.nfa_data")

        # test on automaton where is one NFA tail
        # test of DFA part
        self.assertEqual(hd.states.keys(), d.states.keys())
        self.assertEqual(hd.alphabet, d.alphabet)
        self.assertEqual(hd.start, d.start)
        self.assertEqual(len(hd.final), 0)
        self.assertEqual(hd.transitions, d.transitions)
        self.assertTrue(hd.Flags['Hybrid FA - DFA part'])
        self.assertTrue(hd.Flags['Deterministic'])

        self.assertEqual(len(hyfa.nfas), 1)
        self.assertEqual(hyfa.tran_aut, {0: 2})

        # test of NFA part #0
        self.assertEqual(hn0.states.keys(), n.states.keys())
        self.assertEqual(hn0.alphabet, n.alphabet)
        self.assertEqual(hn0.start, n.start)
        self.assertEqual(hn0.final, n.final)
        self.assertEqual(hn0.transitions, n.transitions)
        self.assertTrue(hn0.Flags['Hybrid FA - one NFA part'])
コード例 #22
0
ファイル: clark_nfa.py プロジェクト: 4sp1r3/appreal
 def __init__(self, canonical = True, stride = 1, use_bram = False):
     """
         Class constructor.
     """
     nfa_reductions.nfa_reductions.__init__(self)
     # Set specific setting for strided automaton
     if stride > 1:
         self.width = stride * 8
         self.template = aux_func.getPatternMatchDir() + "/algorithms/clark_nfa/vhdl/clark_strided_nfa.vhd"
     # Set specific setting for clasic automaton
     else:
         self.width = 8
         self.template = aux_func.getPatternMatchDir() + "/algorithms/clark_nfa/vhdl/clark_nfa.vhd"
     # Set stride independent values
     self._statistic = dict()
     self._useBram = use_bram
     self._LUTInputs = 6
     self._luts = 0
     self.canonical = canonical
     self.stride = stride
コード例 #23
0
ファイル: test_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_compute_2(self):
        """compute()"""
        """
            Test with one regular expression, where computed automaton
            has one NFA tail
        """
        
        hyfa = hybrid_fa()
        
        parser = pcre_parser()
        parser.set_text("/abcd/")
        hyfa.create_by_parser(parser)
        
        hyfa.set_special_min_depth(2)
        hyfa.set_max_head_size(-1)
        hyfa.set_max_tx(-1)
        
        hyfa.compute()

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        parser_dfa = pcre_parser()
        parser_dfa.set_text("/ab/")
        dfa = b_dfa()
        dfa.create_by_parser(parser_dfa)
        dfa.determinise()

        hd = hyfa.dfa.get_automaton()
        hn0 = hyfa.nfas[0].get_automaton()
        d = dfa.get_automaton()
        n = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/hybrid_fa/tests_data/test_compute_2_nfa0.nfa_data")

        # test on automaton where is one NFA tail
        # test of DFA part
        self.assertEqual(hd.states.keys(), d.states.keys())
        self.assertEqual(hd.alphabet, d.alphabet)
        self.assertEqual(hd.start, d.start)
        self.assertEqual(len(hd.final), 0)
        self.assertEqual(hd.transitions, d.transitions)
        self.assertTrue(hd.Flags['Hybrid FA - DFA part'])
        self.assertTrue(hd.Flags['Deterministic'])
        
        self.assertEqual(len(hyfa.nfas), 1)
        self.assertEqual(hyfa.tran_aut, {0: 2})
        
        # test of NFA part #0
        self.assertEqual(hn0.states.keys(), n.states.keys())
        self.assertEqual(hn0.alphabet, n.alphabet)
        self.assertEqual(hn0.start, n.start)
        self.assertEqual(hn0.final, n.final)
        self.assertEqual(hn0.transitions, n.transitions)
        self.assertTrue(hn0.Flags['Hybrid FA - one NFA part'])
コード例 #24
0
ファイル: test_history_fa.py プロジェクト: vhavlena/appreal
    def test_save_to_file(self):
        """save_to_file()"""

        his_fa = history_fa()
        his_fa.compute(aux_func.getPatternMatchDir() +
                       "/algorithms/j_history_fa/test_data/his_fa_1.RE")
        his_fa.save_to_file(aux_func.getPatternMatchDir() +
                            "/algorithms/j_history_fa/test_data/save.dat")
        self.assertTrue(
            os.path.exists(aux_func.getPatternMatchDir() +
                           "/algorithms/j_history_fa/test_data/save.dat") ==
            True)
        f = open(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_history_fa/test_data/save.tmpl", "r")
        tmpl_content = f.read()
        f.close()
        f = open(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_history_fa/test_data/save.dat", "r")
        save_content = f.read()
        f.close()
        self.assertTrue(tmpl_content == save_content)
        aux_func.getstatusoutput(
            "rm -f " + aux_func.getPatternMatchDir() +
            "/algorithms/j_history_fa/test_data/save.dat", None)
コード例 #25
0
ファイル: clark_nfa.py プロジェクト: vhavlena/appreal
 def __init__(self, canonical=True, stride=1, use_bram=False):
     """
         Class constructor.
     """
     nfa_reductions.nfa_reductions.__init__(self)
     # Set specific setting for strided automaton
     if stride > 1:
         self.width = stride * 8
         self.template = aux_func.getPatternMatchDir(
         ) + "/algorithms/clark_nfa/vhdl/clark_strided_nfa.vhd"
     # Set specific setting for clasic automaton
     else:
         self.width = 8
         self.template = aux_func.getPatternMatchDir(
         ) + "/algorithms/clark_nfa/vhdl/clark_nfa.vhd"
     # Set stride independent values
     self._statistic = dict()
     self._useBram = use_bram
     self._LUTInputs = 6
     self._luts = 0
     self.canonical = canonical
     self.stride = stride
コード例 #26
0
ファイル: test_history_fa.py プロジェクト: vhavlena/appreal
    def test_compute(self):
        """compute()"""
        # Method compute(input_file_name):
        # Check the correctness of the logical machine output over
        # self.assertTrue on individual automaton items + focus on the
        # properties of H-FA (transitions, flags, counters)

        # 1) /abcd/ ; test with an expression that does not use properties
        # of History FA
        his_fa = history_fa()
        his_fa.compute(aux_func.getPatternMatchDir() +
                       "/algorithms/j_history_fa/test_data/his_fa_1.RE")
        copy = his_fa.get_automaton(False)
        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_history_fa/test_data/his_fa_1.nfa_data")

        self.assertTrue(
            sorted(copy.states.keys()) == sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
        self.assertTrue(copy.Flags == result.Flags)

        # 2) /ab.*cd/ ; test with an expression that contain .*
        his_fa = history_fa()
        his_fa.compute(aux_func.getPatternMatchDir() +
                       "/algorithms/j_history_fa/test_data/his_fa_2.RE")
        copy = his_fa.get_automaton(False)
        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_history_fa/test_data/his_fa_2.nfa_data")

        self.assertTrue(
            sorted(copy.states.keys()) == sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
        self.assertTrue(copy.Flags == result.Flags)

        # 3) /ab[^1234]*cd|efg/; test with an expression containing one
        # alternation [^1234]*, the second is not
        his_fa = history_fa()
        his_fa.compute(aux_func.getPatternMatchDir() +
                       "/algorithms/j_history_fa/test_data/his_fa_3.RE")
        copy = his_fa.get_automaton(False)
        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_history_fa/test_data/his_fa_3.nfa_data")

        self.assertTrue(
            sorted(copy.states.keys()) == sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
        self.assertTrue(copy.Flags == result.Flags)
コード例 #27
0
ファイル: test_j_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_compute_1(self):
        """compute()"""
        """
            Test without blow up patterns
        """
        hyfa = JHybridFA()

        parser = pcre_parser()
        hyfa.set_parser(parser)
        hyfa.load_file(aux_func.getPatternMatchDir() +
                       "/algorithms/j_hybrid_fa/tests_data/test_compute_1.re")

        hyfa.compute()

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        parser = pcre_parser()
        parser.load_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_hybrid_fa/tests_data/test_compute_1.re")
        dfa = b_dfa()
        dfa.create_by_parser(parser)
        dfa.compute()

        a = hyfa.dfa.get_automaton(False)
        b = dfa.get_automaton(False)

        # Test without blow up patterns
        self.assertEqual(a.states.keys(), b.states.keys())
        self.assertEqual(a.alphabet, b.alphabet)
        self.assertEqual(a.start, b.start)
        self.assertEqual(a.final, b.final)
        self.assertEqual(a.transitions, b.transitions)
        self.assertTrue(a.Flags['Hybrid FA - DFA part'])
        self.assertTrue(a.Flags['Deterministic'])
        self.assertEqual(len(hyfa.nfas), 0)
        self.assertEqual(hyfa.tran_aut, {})
コード例 #28
0
ファイル: test_j_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_report_memory_naive_2(self):
        """report_memory_naive()"""
        """
            Test with more regular expression where computed automaton
            has some NFA parts.
        """
        hyfa = JHybridFA()
        
        parser = pcre_parser()
        hyfa.set_parser(parser)
        hyfa.load_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_get_xxx_num_2.re")
        
        hyfa.compute()

        self.assertEqual(hyfa.report_memory_naive(), 390)
コード例 #29
0
ファイル: test_j_hybrid_fa.py プロジェクト: 4sp1r3/appreal
 def _test_get_trans_num_1(self):
     """get_state_num()"""
     """
         Test with more regular expression where computed automaton
         has only DFA part.
     """
     hyfa = JHybridFA()
     
     parser = pcre_parser()
     hyfa.set_parser(parser)
     hyfa.load_file(aux_func.getPatternMatchDir() + "/algorithms/j_hybrid_fa/tests_data/test_get_xxx_num_1.re")
     
     hyfa.compute()
     
     self.assertEqual(hyfa.get_trans_num(), 102)
コード例 #30
0
ファイル: test_ddfa.py プロジェクト: vhavlena/appreal
    def _test_compute3(self):
        # Get test directory
        tdir = aux_func.getPatternMatchDir() + "/algorithms/delay_dfa/"

        delay_dfa = DELAY_DFA()

        nfaData = nfa_data().load_from_file(tdir +
                                            "test_data/text_ddfa.nfa_data")

        delay_dfa.create_from_nfa_data(nfaData)
        delay_dfa.determinise()
        delay_dfa.compute(False)
        self.assertTrue(delay_dfa.get_compute())

        a = delay_dfa.get_automaton()
        b = nfa_data()

        b.add_symbols(b_Sym_char("a", "a", 0))
        b.add_symbols(b_Sym_char("b", "b", 1))
        b.add_symbols(b_Sym_char("c", "c", 2))
        b.add_symbols(b_Sym_char("d", "d", 3))
        b.add_symbols(DEF_SYMBOLS("default", 4))

        b.add_states(b_State(0, set()))
        b.add_states(b_State(1, set([0])))
        b.add_states(b_State(2, set()))
        b.add_states(b_State(3, set([0])))
        b.add_states(b_State(4, set([0])))
        b.start = 0
        b.final = set([1, 3, 4])

        b.add_transitions((0, 2, 0))
        b.add_transitions((0, 0, 1))
        b.add_transitions((0, 1, 2))
        b.add_transitions((0, 3, 3))
        b.add_transitions((1, 4, 0))
        b.add_transitions((2, 2, 4))
        b.add_transitions((2, 4, 0))
        b.add_transitions((3, 4, 0))
        b.add_transitions((4, 4, 0))

        self.assertEqual(a.states.keys(), b.states.keys())
        self.assertEqual(a.start, b.start)
        self.assertEqual(a.final, b.final)
        self.assertEqual(a.alphabet, b.alphabet)
        self.assertEqual(a.transitions, b.transitions)
        self.assertTrue(a.Flags["Delay DFA"])
コード例 #31
0
ファイル: test_j_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_get_trans_num_1(self):
        """get_state_num()"""
        """
            Test with more regular expression where computed automaton
            has only DFA part.
        """
        hyfa = JHybridFA()

        parser = pcre_parser()
        hyfa.set_parser(parser)
        hyfa.load_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_hybrid_fa/tests_data/test_get_xxx_num_1.re")

        hyfa.compute()

        self.assertEqual(hyfa.get_trans_num(), 102)
コード例 #32
0
ファイル: test_j_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_report_memory_naive_2(self):
        """report_memory_naive()"""
        """
            Test with more regular expression where computed automaton
            has some NFA parts.
        """
        hyfa = JHybridFA()

        parser = pcre_parser()
        hyfa.set_parser(parser)
        hyfa.load_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/j_hybrid_fa/tests_data/test_get_xxx_num_2.re")

        hyfa.compute()

        self.assertEqual(hyfa.report_memory_naive(), 390)
コード例 #33
0
ファイル: test_ddfa.py プロジェクト: 4sp1r3/appreal
 def _test_compute3(self):
     # Get test directory 
     tdir = aux_func.getPatternMatchDir() + "/algorithms/delay_dfa/"
     
     delay_dfa = DELAY_DFA()
     
     nfaData = nfa_data().load_from_file(tdir + "test_data/text_ddfa.nfa_data")
     
     delay_dfa.create_from_nfa_data(nfaData)
     delay_dfa.determinise()
     delay_dfa.compute(False)
     self.assertTrue(delay_dfa.get_compute())
     
     a = delay_dfa.get_automaton()
     b = nfa_data()
     
     b.add_symbols(b_Sym_char("a","a",0))
     b.add_symbols(b_Sym_char("b","b",1))
     b.add_symbols(b_Sym_char("c","c",2))
     b.add_symbols(b_Sym_char("d","d",3))
     b.add_symbols(DEF_SYMBOLS("default", 4))
     
     b.add_states(b_State(0,set()))
     b.add_states(b_State(1,set([0])))
     b.add_states(b_State(2,set()))
     b.add_states(b_State(3,set([0])))
     b.add_states(b_State(4,set([0])))
     b.start = 0
     b.final = set([1,3,4])
     
     b.add_transitions( (0,2,0) )
     b.add_transitions( (0,0,1) )
     b.add_transitions( (0,1,2) )
     b.add_transitions( (0,3,3) )
     b.add_transitions( (1,4,0) )
     b.add_transitions( (2,2,4) )
     b.add_transitions( (2,4,0) )
     b.add_transitions( (3,4,0) )
     b.add_transitions( (4,4,0) )
     
     self.assertEqual(a.states.keys(), b.states.keys())
     self.assertEqual(a.start, b.start)
     self.assertEqual(a.final, b.final)
     self.assertEqual(a.alphabet, b.alphabet)
     self.assertEqual(a.transitions, b.transitions)
     self.assertTrue(a.Flags["Delay DFA"])
コード例 #34
0
ファイル: test_history_fa.py プロジェクト: 4sp1r3/appreal
    def test_compute(self):
        """compute()"""
        # Method compute(input_file_name):
        # Check the correctness of the logical machine output over
        # self.assertTrue on individual automaton items + focus on the
        # properties of H-FA (transitions, flags, counters)

        # 1) /abcd/ ; test with an expression that does not use properties
        # of History FA
        his_fa = history_fa()
        his_fa.compute(aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/his_fa_1.RE")
        copy = his_fa.get_automaton(False)
        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/his_fa_1.nfa_data")

        self.assertTrue(sorted(copy.states.keys()) ==
            sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
        self.assertTrue(copy.Flags == result.Flags)

        # 2) /ab.*cd/ ; test with an expression that contain .*
        his_fa = history_fa()
        his_fa.compute(aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/his_fa_2.RE")
        copy = his_fa.get_automaton(False)
        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/his_fa_2.nfa_data")

        self.assertTrue(sorted(copy.states.keys()) ==
            sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
        self.assertTrue(copy.Flags == result.Flags)
        
        # 3) /ab[^1234]*cd|efg/; test with an expression containing one
        # alternation [^1234]*, the second is not        
        his_fa = history_fa()
        his_fa.compute(aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/his_fa_3.RE")
        copy = his_fa.get_automaton(False)
        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/his_fa_3.nfa_data")

        self.assertTrue(sorted(copy.states.keys()) ==
            sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
        self.assertTrue(copy.Flags == result.Flags)
コード例 #35
0
ファイル: test_hybrid_fa.py プロジェクト: 4sp1r3/appreal
    def _test_report_memory_naive_2(self):
        """report_memory_naive()"""
        """
            Test with more regular expression where computed automaton
            has some NFA parts.
        """
        hyfa = hybrid_fa()
        
        parser = pcre_parser()
        parser.load_file(aux_func.getPatternMatchDir() + "/algorithms/hybrid_fa/tests_data/test_get_state_num_2.re")
        hyfa.create_by_parser(parser)
        
        hyfa.set_special_min_depth(2)
        hyfa.set_max_head_size(-1)
        hyfa.set_max_tx(-1)

        hyfa.compute()

        self.assertEqual(hyfa.report_memory_naive(), 58)
コード例 #36
0
ファイル: test_history_fa.py プロジェクト: 4sp1r3/appreal
 def test_save_to_file(self):
     """save_to_file()"""
     
     his_fa = history_fa()
     his_fa.compute(aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/his_fa_1.RE")
     his_fa.save_to_file(aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/save.dat")
     self.assertTrue(os.path.exists(aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/save.dat") == True)
     f = open(aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/save.tmpl","r");
     tmpl_content = f.read()
     f.close()
     f = open(aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/save.dat","r");
     save_content = f.read()
     f.close()
     self.assertTrue(tmpl_content == save_content)
     aux_func.getstatusoutput("rm -f " + aux_func.getPatternMatchDir() + "/algorithms/j_history_fa/test_data/save.dat", None)
コード例 #37
0
ファイル: test_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_report_memory_naive_2(self):
        """report_memory_naive()"""
        """
            Test with more regular expression where computed automaton
            has some NFA parts.
        """
        hyfa = hybrid_fa()

        parser = pcre_parser()
        parser.load_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/hybrid_fa/tests_data/test_get_state_num_2.re")
        hyfa.create_by_parser(parser)

        hyfa.set_special_min_depth(2)
        hyfa.set_max_head_size(-1)
        hyfa.set_max_tx(-1)

        hyfa.compute()

        self.assertEqual(hyfa.report_memory_naive(), 58)
コード例 #38
0
ファイル: sindhu_prasana_nfa.py プロジェクト: 4sp1r3/appreal
 def __init__(self, stride = 1):
     """ 
         Class constructor.
     
         Experimantal extension for strided symbols added.
         
         :param stride: Number of characters accepted in one clock cycle.   \
                        Defaults to 1 char per CLK. Only powers of 2 are    \
                        supported.
         :type stride: int
     """
     nfa_reductions.nfa_reductions.__init__(self)
     # Set stride specific value
     self.width = 8 * stride
     # Set stride independent values
     self.template = aux_func.getPatternMatchDir() + "/algorithms/sindhu_prasana_nfa/vhdl/sindhu_prasana_nfa.vhd"
     self._statistic = dict()
     self._useBram = False
     self._LUTInputs = 6
     self._luts = 0
     self.stride = stride
コード例 #39
0
ファイル: test_ddfa.py プロジェクト: vhavlena/appreal
    def test_get_default_trans_num(self):
        """get_default_trans_num"""

        #Tests with regular expressions from test_compute

        delay_dfa1 = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text("/^abcd/")
        delay_dfa1.create_by_parser(parser)

        delay_dfa1.compute()
        self.assertTrue(delay_dfa1.get_compute())

        delay_dfa2 = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text("/^(a|b)+/")
        delay_dfa2.create_by_parser(parser)

        delay_dfa2.compute()
        self.assertTrue(delay_dfa2.get_compute())

        delay_dfa3 = DELAY_DFA()

        # Get test directory
        tdir = aux_func.getPatternMatchDir() + "/algorithms/delay_dfa/"

        nfaData = nfa_data().load_from_file(tdir +
                                            "test_data/text_ddfa.nfa_data")

        delay_dfa3.create_from_nfa_data(nfaData)
        delay_dfa3.determinise()
        delay_dfa3.compute(False)
        self.assertTrue(delay_dfa3.get_compute())

        self.assertEqual(delay_dfa1.get_default_trans_num(), 0)
        self.assertEqual(delay_dfa2.get_default_trans_num(), 1)
        self.assertEqual(delay_dfa3.get_default_trans_num(), 4)
コード例 #40
0
 def test_sb(self):
     """
         Tests the Sordis-Bispo algorithm.
     """
     # Create sourdis_bispo_nfa object
     cn = sourdis_bispo_nfa.sourdis_bispo_nfa()
     # Preprocess the REs
     preprocessed = cn.find_pcre_repetitions(
         aux_func.getPatternMatchDir() +
         "/algorithms/sourdis_bispo_nfa/test/tests/test.pcre")
     # Create parser - use default parser
     Test0 = parser.parser("pcre_parser")
     # Load REs
     Test0.set_text(preprocessed)
     # Parse RE and create NFA
     cn.create_by_parser(Test0)
     # Call the compute method
     cn.compute()
     # Create the simulation
     create_simulation(cn)
     # run the simulation
     run_simulation(self)
コード例 #41
0
 def __init__(self, stride=1):
     """ 
         Class constructor.
     
         Experimantal extension for strided symbols added.
         
         :param stride: Number of characters accepted in one clock cycle.   \
                        Defaults to 1 char per CLK. Only powers of 2 are    \
                        supported.
         :type stride: int
     """
     nfa_reductions.nfa_reductions.__init__(self)
     # Set stride specific value
     self.width = 8 * stride
     # Set stride independent values
     self.template = aux_func.getPatternMatchDir(
     ) + "/algorithms/sindhu_prasana_nfa/vhdl/sindhu_prasana_nfa.vhd"
     self._statistic = dict()
     self._useBram = False
     self._LUTInputs = 6
     self._luts = 0
     self.stride = stride
コード例 #42
0
ファイル: test_ddfa.py プロジェクト: 4sp1r3/appreal
 def test_get_default_trans_num(self):
     """get_default_trans_num"""
     
     #Tests with regular expressions from test_compute
     
     delay_dfa1 = DELAY_DFA()
     
     parser = pcre_parser()
     parser.set_text("/^abcd/")
     delay_dfa1.create_by_parser(parser)
     
     delay_dfa1.compute()
     self.assertTrue(delay_dfa1.get_compute())
     
     delay_dfa2 = DELAY_DFA()
     
     parser = pcre_parser()
     parser.set_text("/^(a|b)+/")
     delay_dfa2.create_by_parser(parser)
     
     delay_dfa2.compute()
     self.assertTrue(delay_dfa2.get_compute())
     
     delay_dfa3 = DELAY_DFA()
     
     # Get test directory 
     tdir = aux_func.getPatternMatchDir() + "/algorithms/delay_dfa/"
     
     nfaData = nfa_data().load_from_file(tdir + "test_data/text_ddfa.nfa_data")
     
     delay_dfa3.create_from_nfa_data(nfaData)
     delay_dfa3.determinise()
     delay_dfa3.compute(False)
     self.assertTrue(delay_dfa3.get_compute())
     
     self.assertEqual(delay_dfa1.get_default_trans_num(),0)
     self.assertEqual(delay_dfa2.get_default_trans_num(),1)
     self.assertEqual(delay_dfa3.get_default_trans_num(),4)
コード例 #43
0
    def test__replace_length_restriction_with_a_closure(self):
        """_replace_length_restriction_with_a_closure(NFA)"""
        # /ab.{4}cd /; test with an expression that contains .{4}
        par = pcre_parser(create_cnt_constr = True)
        par.set_text("/ab.{4}cd/")
        history = HistoryCountingFA()
        history.create_by_parser(par)
        history.remove_epsilons()
        NFA = history.get_automaton(True)
        NFA_without_cnt = history._replace_length_restriction_with_a_closure(NFA)
        copy = NFA_without_cnt

        result = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/history_counting_fa/test_data/test_data_1.nfa_data")

        self.assertTrue(history.flags_cnt == {4: "4"})

        self.assertTrue(sorted(copy.states.keys()) ==
            sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
        self.assertTrue(copy.Flags == result.Flags)
コード例 #44
0
ファイル: test_hybrid_fa.py プロジェクト: vhavlena/appreal
    def _test_compute_4(self):
        """compute()"""
        """
            Test with more regular expressions, where computed automaton
            has has some NFA tails
        """

        hyfa = hybrid_fa()

        parser = pcre_parser()
        parser.load_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/hybrid_fa/tests_data/test_compute_4_pattern.re")
        hyfa.create_by_parser(parser)

        hyfa.set_special_min_depth(2)
        hyfa.set_max_head_size(-1)
        hyfa.set_max_tx(-1)

        hyfa.compute()

        # self.get_compute() has to be True
        self.assertTrue(hyfa.get_compute())

        hd = hyfa.dfa.get_automaton()
        hn0 = hyfa.nfas[0].get_automaton()
        hn1 = hyfa.nfas[1].get_automaton()
        d = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/hybrid_fa/tests_data/test_compute_4_dfa.nfa_data")
        n0 = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/hybrid_fa/tests_data/test_compute_4_nfa0.nfa_data")
        n1 = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/hybrid_fa/tests_data/test_compute_4_nfa1.nfa_data")

        # test of DFA part
        self.assertEqual(hd.states.keys(), d.states.keys())
        self.assertEqual(hd.alphabet, d.alphabet)
        self.assertEqual(hd.start, d.start)
        self.assertTrue(len(hd.final) == 0)
        self.assertEqual(hd.transitions, d.transitions)
        self.assertTrue(hd.Flags['Hybrid FA - DFA part'])
        self.assertTrue(hd.Flags['Deterministic'])

        # two NFA tails
        self.assertEqual(len(hyfa.nfas), 2)
        self.assertEqual(hyfa.tran_aut, {0: 4, 1: 5})

        # test of NFA part #0
        self.assertEqual(hn0.states.keys(), n0.states.keys())
        self.assertEqual(hn0.alphabet, n0.alphabet)
        self.assertEqual(hn0.start, n0.start)
        self.assertEqual(hn0.final, n0.final)
        self.assertEqual(hn0.transitions, n0.transitions)
        self.assertTrue(hn0.Flags['Hybrid FA - one NFA part'])

        # test of NFA part #1
        self.assertEqual(hn1.states.keys(), n1.states.keys())
        self.assertEqual(hn1.alphabet, n1.alphabet)
        self.assertEqual(hn1.start, n1.start)
        self.assertEqual(hn1.final, n1.final)
        self.assertEqual(hn1.transitions, n1.transitions)
        self.assertTrue(hn1.Flags['Hybrid FA - one NFA part'])
コード例 #45
0
    def test_compute(self):
        """compute()"""
        # Check the correctness of the logical machine output over
        # self.assertTrue on individual items + focus on the properties
        # of HistoryCountingFA (transitions, flags, counters)

        # /abcd/; test with an expression that does not use properties
        # of HistoryCountingFA
        par = pcre_parser(create_cnt_constr=True)
        par.set_text("/abcd/")
        history = HistoryCountingFA()
        history.create_by_parser(par)
        history.remove_epsilons()
        NFA = history.get_automaton(True)

        history.determinise(create_table=True)

        history.compute(NFA)

        copy = history.get_automaton()

        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/history_counting_fa/test_data/test_data_2.nfa_data")

        self.assertTrue(
            sorted(copy.states.keys()) == sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)

        # /ab.{3}cd /; test with an expression that contains .{X}
        par = pcre_parser(create_cnt_constr=True)
        par.set_text("/ab.{3}cd/")
        history = HistoryCountingFA()
        history.create_by_parser(par)
        history.remove_epsilons()
        NFA = history.get_automaton(True)

        NFA_without_cnt = \
            history._replace_length_restriction_with_a_closure(NFA)
        NFA = history.get_automaton(True)
        history._automaton = NFA_without_cnt
        history.determinise(create_table=True)

        history.compute(NFA)

        copy = history.get_automaton()

        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/history_counting_fa/test_data/test_data_3.nfa_data")

        self.assertTrue(
            sorted(copy.states.keys()) == sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)

        # /ab[^1234]{3}cd|efg/; test with an expression containing one
        # alternation [^1234]{3}, the second is not
        par = pcre_parser(create_cnt_constr=True)
        par.set_text("/ab[^1234]{3}cd|efg/")
        history = HistoryCountingFA()
        history.create_by_parser(par)
        history.remove_epsilons()
        NFA = history.get_automaton(True)

        NFA_without_cnt = \
            history._replace_length_restriction_with_a_closure(NFA)
        NFA = history.get_automaton(True)
        history._automaton = NFA_without_cnt
        history.determinise(create_table=True)

        history.compute(NFA)

        copy = history.get_automaton()

        result = nfa_data().load_from_file(
            aux_func.getPatternMatchDir() +
            "/algorithms/history_counting_fa/test_data/test_data_4.nfa_data")

        self.assertTrue(
            sorted(copy.states.keys()) == sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
コード例 #46
0
    def test_compute(self):
        """compute()"""
        # Check the correctness of the logical machine output over
        # self.assertTrue on individual items + focus on the properties
        # of HistoryCountingFA (transitions, flags, counters)

        # /abcd/; test with an expression that does not use properties
        # of HistoryCountingFA
        par = pcre_parser(create_cnt_constr = True)
        par.set_text("/abcd/")
        history = HistoryCountingFA()
        history.create_by_parser(par)
        history.remove_epsilons()
        NFA = history.get_automaton(True)

        history.determinise(create_table = True)

        history.compute(NFA)

        copy = history.get_automaton()

        result = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/history_counting_fa/test_data/test_data_2.nfa_data")

        self.assertTrue(sorted(copy.states.keys()) ==
            sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)
        
        # /ab.{3}cd /; test with an expression that contains .{X}
        par = pcre_parser(create_cnt_constr = True)
        par.set_text("/ab.{3}cd/")
        history = HistoryCountingFA()
        history.create_by_parser(par)
        history.remove_epsilons()
        NFA = history.get_automaton(True)

        NFA_without_cnt = \
            history._replace_length_restriction_with_a_closure(NFA)
        NFA = history.get_automaton(True)
        history._automaton = NFA_without_cnt
        history.determinise(create_table = True)

        history.compute(NFA)

        copy = history.get_automaton()

        result = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/history_counting_fa/test_data/test_data_3.nfa_data")

        self.assertTrue(sorted(copy.states.keys()) ==
            sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)

        # /ab[^1234]{3}cd|efg/; test with an expression containing one
        # alternation [^1234]{3}, the second is not
        par = pcre_parser(create_cnt_constr = True)
        par.set_text("/ab[^1234]{3}cd|efg/")
        history = HistoryCountingFA()
        history.create_by_parser(par)
        history.remove_epsilons()
        NFA = history.get_automaton(True)

        NFA_without_cnt = \
            history._replace_length_restriction_with_a_closure(NFA)
        NFA = history.get_automaton(True)
        history._automaton = NFA_without_cnt
        history.determinise(create_table = True)

        history.compute(NFA)

        copy = history.get_automaton()

        result = nfa_data().load_from_file(aux_func.getPatternMatchDir() + "/algorithms/history_counting_fa/test_data/test_data_4.nfa_data")

        self.assertTrue(sorted(copy.states.keys()) ==
            sorted(result.states.keys()))
        self.assertTrue(copy.alphabet == result.alphabet)
        self.assertTrue(copy.start == result.start)
        self.assertTrue(copy.final == result.final)
        self.assertTrue(copy.transitions == result.transitions)