2 * Author......: Jens Steube <jens.steube@gmail.com>
8 #define RULES_PER_PLAIN_MIN 1
9 #define RULES_PER_PLAIN_MAX 99
10 #define RP_GEN_FUNC_MIN 1
11 #define RP_GEN_FUNC_MAX 4
13 #define LINE_SIG_LEN RP_GEN_FUNC_MAX * 2 + 1
17 #include "cpu_rules.h"
18 #include "rp_kernel_on_cpu.h"
20 void print_plain (char *plain
, int plain_len
)
24 u8
*plain_ptr
= (u8
*) plain
;
28 for (k
= 0; k
< plain_len
; k
++)
30 if ((plain_ptr
[k
] < 0x20) || (plain_ptr
[k
] > 0x7f))
42 for (k
= 0; k
< plain_len
; k
++)
44 printf ("%02x", plain_ptr
[k
]);
51 for (k
= 0; k
< plain_len
; k
++)
53 printf ("%c", plain_ptr
[k
]);
58 int main (int argc
, char **argv
)
62 char rule_buf
[BUFSIZ
];
64 int rp_gen_func_min
= RP_GEN_FUNC_MIN
;
65 int rp_gen_func_max
= RP_GEN_FUNC_MAX
;
75 char line_buf
[BUFSIZ
+ 1];
77 char *line_ptr
= fgets (line_buf
, BUFSIZ
, fp
);
79 if (line_ptr
== NULL
) continue;
81 int line_len
= strlen (line_ptr
);
85 if (line_len
< 0) continue;
86 if (line_len
> PW_MAX
) continue;
88 memset (line_ptr
+ line_len
, 0, PW_MAX
- line_len
);
91 * generate random rule and apply it afterwards
98 max
= get_random_num (RULES_PER_PLAIN_MIN
, RULES_PER_PLAIN_MAX
);
107 for (i
= 0; i
< max
; i
++)
111 memset (rule_buf
, 0, BLOCK_SIZE
);
115 rule_len
= (int) generate_random_rule (rule_buf
, rp_gen_func_min
, rp_gen_func_max
);
119 strncpy (rule_buf
, argv
[1], BUFSIZ
);
121 rule_len
= strlen (rule_buf
);
124 kernel_rule_t kernel_rule_buf
;
126 memset (&kernel_rule_buf
, 0, sizeof (kernel_rule_t
));
128 if (cpu_rule_to_kernel_rule (rule_buf
, rule_len
, &kernel_rule_buf
) == -1) continue;
131 char rule_buf_cpu
[BLOCK_SIZE
];
133 memset (rule_buf_cpu
, 0, BLOCK_SIZE
);
137 int out_len_cpu
= apply_rule_cpu (rule_buf
, rule_len
, line_ptr
, line_len
, rule_buf_cpu
);
139 if (max_len
>= 32) continue;
142 char rule_buf_kernel
[BLOCK_SIZE
];
144 memset (rule_buf_kernel
, 0, sizeof (rule_buf_kernel
));
146 memcpy (rule_buf_kernel
, line_buf
, line_len
);
148 u32
*plain_ptr
= (u32
*) rule_buf_kernel
;
150 int out_len_kernel
= apply_rules (kernel_rule_buf
.cmds
, &plain_ptr
[0], &plain_ptr
[4], line_len
);
156 if (out_len_cpu
>= 0 && out_len_cpu
< 32)
160 if (out_len_kernel
== out_len_cpu
)
162 if (memcmp (rule_buf_kernel
, rule_buf_cpu
, out_len_kernel
) == 0)
174 printf ("Rule: %s", rule_buf
);
177 int spaces
= LINE_SIG_LEN
- rule_len
;
179 if (rule_len
> 10) spaces
++;
180 if (rule_len
> 100) spaces
++;
182 while (spaces
--) printf (".");
187 print_plain (line_buf
, line_len
);
189 printf (" %i => ", line_len
);
192 print_plain (rule_buf_cpu
, out_len_cpu
);
194 printf (" %i vs ", out_len_cpu
);
197 print_plain (rule_buf_kernel
, out_len_kernel
);
199 printf (" %i\n", out_len_kernel
);