2 * Author......: Jens Steube <jens.steube@gmail.com>
6 #define RULES_PER_PLAIN_MIN 1
7 #define RULES_PER_PLAIN_MAX 99
8 #define RP_GEN_FUNC_MIN 1
9 #define RP_GEN_FUNC_MAX 4
11 #define LINE_SIG_LEN RP_GEN_FUNC_MAX * 2 + 1
15 #include "cpu_rules.h"
16 #include "rp_kernel_on_cpu.h"
18 void print_plain (char *plain
, int plain_len
)
22 u8
*plain_ptr
= (u8
*) plain
;
26 for (k
= 0; k
< plain_len
; k
++)
28 if ((plain_ptr
[k
] < 0x20) || (plain_ptr
[k
] > 0x7f))
40 for (k
= 0; k
< plain_len
; k
++)
42 printf ("%02x", plain_ptr
[k
]);
49 for (k
= 0; k
< plain_len
; k
++)
51 printf ("%c", plain_ptr
[k
]);
56 int main (int argc
, char **argv
)
60 char *rule_buf
= (char *) malloc (HCBUFSIZ
);
62 char *line_buf
= (char *) malloc (HCBUFSIZ
);
64 int rp_gen_func_min
= RP_GEN_FUNC_MIN
;
65 int rp_gen_func_max
= RP_GEN_FUNC_MAX
;
75 char *line_ptr
= fgets (line_buf
, HCBUFSIZ
- 1, fp
);
77 if (line_ptr
== NULL
) continue;
79 int line_len
= strlen (line_ptr
);
83 if (line_len
< 0) continue;
84 if (line_len
> PW_MAX
) continue;
86 memset (line_ptr
+ line_len
, 0, PW_MAX
- line_len
);
89 * generate random rule and apply it afterwards
96 max
= get_random_num (RULES_PER_PLAIN_MIN
, RULES_PER_PLAIN_MAX
);
105 for (i
= 0; i
< max
; i
++)
109 memset (rule_buf
, 0, BLOCK_SIZE
);
113 rule_len
= (int) generate_random_rule (rule_buf
, rp_gen_func_min
, rp_gen_func_max
);
117 strncpy (rule_buf
, argv
[1], HCBUFSIZ
- 1);
119 rule_len
= strlen (rule_buf
);
122 kernel_rule_t kernel_rule_buf
;
124 memset (&kernel_rule_buf
, 0, sizeof (kernel_rule_t
));
126 if (cpu_rule_to_kernel_rule (rule_buf
, rule_len
, &kernel_rule_buf
) == -1) continue;
129 char rule_buf_cpu
[BLOCK_SIZE
];
131 memset (rule_buf_cpu
, 0, BLOCK_SIZE
);
135 int out_len_cpu
= apply_rule_cpu (rule_buf
, rule_len
, line_ptr
, line_len
, rule_buf_cpu
);
137 if (max_len
>= 32) continue;
140 char rule_buf_kernel
[BLOCK_SIZE
];
142 memset (rule_buf_kernel
, 0, sizeof (rule_buf_kernel
));
144 memcpy (rule_buf_kernel
, line_buf
, line_len
);
146 u32
*plain_ptr
= (u32
*) rule_buf_kernel
;
148 int out_len_kernel
= apply_rules (kernel_rule_buf
.cmds
, &plain_ptr
[0], &plain_ptr
[4], line_len
);
154 if (out_len_cpu
>= 0 && out_len_cpu
< 32)
158 if (out_len_kernel
== out_len_cpu
)
160 if (memcmp (rule_buf_kernel
, rule_buf_cpu
, out_len_kernel
) == 0)
172 printf ("Rule: %s", rule_buf
);
175 int spaces
= LINE_SIG_LEN
- rule_len
;
177 if (rule_len
> 10) spaces
++;
178 if (rule_len
> 100) spaces
++;
180 while (spaces
--) printf (".");
185 print_plain (line_buf
, line_len
);
187 printf (" %i => ", line_len
);
190 print_plain (rule_buf_cpu
, out_len_cpu
);
192 printf (" %i vs ", out_len_cpu
);
195 print_plain (rule_buf_kernel
, out_len_kernel
);
197 printf (" %i\n", out_len_kernel
);