rp.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /**
  2. * Author......: Jens Steube <jens.steube@gmail.com>
  3. * License.....: MIT
  4. */
  5. #ifndef RP_H
  6. #define RP_H
  7. #define RP_RULE_BUFSIZ 0x100
  8. #define RULE_RC_SYNTAX_ERROR -1
  9. #define RULE_RC_REJECT_ERROR -2
  10. #define RULE_OP_MANGLE_NOOP ':'
  11. #define RULE_OP_MANGLE_LREST 'l'
  12. #define RULE_OP_MANGLE_UREST 'u'
  13. #define RULE_OP_MANGLE_LREST_UFIRST 'c'
  14. #define RULE_OP_MANGLE_UREST_LFIRST 'C'
  15. #define RULE_OP_MANGLE_TREST 't'
  16. #define RULE_OP_MANGLE_TOGGLE_AT 'T'
  17. #define RULE_OP_MANGLE_REVERSE 'r'
  18. #define RULE_OP_MANGLE_DUPEWORD 'd'
  19. #define RULE_OP_MANGLE_DUPEWORD_TIMES 'p'
  20. #define RULE_OP_MANGLE_REFLECT 'f'
  21. #define RULE_OP_MANGLE_ROTATE_LEFT '{'
  22. #define RULE_OP_MANGLE_ROTATE_RIGHT '}'
  23. #define RULE_OP_MANGLE_APPEND '$'
  24. #define RULE_OP_MANGLE_PREPEND '^'
  25. #define RULE_OP_MANGLE_DELETE_FIRST '['
  26. #define RULE_OP_MANGLE_DELETE_LAST ']'
  27. #define RULE_OP_MANGLE_DELETE_AT 'D'
  28. #define RULE_OP_MANGLE_EXTRACT 'x'
  29. #define RULE_OP_MANGLE_OMIT 'O'
  30. #define RULE_OP_MANGLE_INSERT 'i'
  31. #define RULE_OP_MANGLE_OVERSTRIKE 'o'
  32. #define RULE_OP_MANGLE_TRUNCATE_AT '\''
  33. #define RULE_OP_MANGLE_REPLACE 's'
  34. #define RULE_OP_MANGLE_PURGECHAR '@'
  35. #define RULE_OP_MANGLE_TOGGLECASE_REC 'a'
  36. #define RULE_OP_MANGLE_DUPECHAR_FIRST 'z'
  37. #define RULE_OP_MANGLE_DUPECHAR_LAST 'Z'
  38. #define RULE_OP_MANGLE_DUPECHAR_ALL 'q'
  39. #define RULE_OP_MANGLE_EXTRACT_MEMORY 'X'
  40. #define RULE_OP_MANGLE_APPEND_MEMORY '4'
  41. #define RULE_OP_MANGLE_PREPEND_MEMORY '6'
  42. #define RULE_OP_MEMORIZE_WORD 'M'
  43. #define RULE_OP_REJECT_LESS '<'
  44. #define RULE_OP_REJECT_GREATER '>'
  45. #define RULE_OP_REJECT_CONTAIN '!'
  46. #define RULE_OP_REJECT_NOT_CONTAIN '/'
  47. #define RULE_OP_REJECT_EQUAL_FIRST '('
  48. #define RULE_OP_REJECT_EQUAL_LAST ')'
  49. #define RULE_OP_REJECT_EQUAL_AT '='
  50. #define RULE_OP_REJECT_CONTAINS '%'
  51. #define RULE_OP_REJECT_MEMORY 'Q'
  52. /* hashcat only */
  53. #define RULE_OP_MANGLE_SWITCH_FIRST 'k'
  54. #define RULE_OP_MANGLE_SWITCH_LAST 'K'
  55. #define RULE_OP_MANGLE_SWITCH_AT '*'
  56. #define RULE_OP_MANGLE_CHR_SHIFTL 'L'
  57. #define RULE_OP_MANGLE_CHR_SHIFTR 'R'
  58. #define RULE_OP_MANGLE_CHR_INCR '+'
  59. #define RULE_OP_MANGLE_CHR_DECR '-'
  60. #define RULE_OP_MANGLE_REPLACE_NP1 '.'
  61. #define RULE_OP_MANGLE_REPLACE_NM1 ','
  62. #define RULE_OP_MANGLE_DUPEBLOCK_FIRST 'y'
  63. #define RULE_OP_MANGLE_DUPEBLOCK_LAST 'Y'
  64. #define RULE_OP_MANGLE_TITLE 'E'
  65. static const char grp_op_nop[] =
  66. {
  67. RULE_OP_MANGLE_LREST,
  68. RULE_OP_MANGLE_UREST,
  69. RULE_OP_MANGLE_LREST_UFIRST,
  70. RULE_OP_MANGLE_UREST_LFIRST,
  71. RULE_OP_MANGLE_TREST,
  72. RULE_OP_MANGLE_REVERSE,
  73. RULE_OP_MANGLE_DUPEWORD,
  74. RULE_OP_MANGLE_REFLECT,
  75. RULE_OP_MANGLE_DELETE_FIRST,
  76. RULE_OP_MANGLE_DELETE_LAST,
  77. RULE_OP_MANGLE_ROTATE_LEFT,
  78. RULE_OP_MANGLE_ROTATE_RIGHT,
  79. RULE_OP_MANGLE_SWITCH_FIRST,
  80. RULE_OP_MANGLE_SWITCH_LAST,
  81. RULE_OP_MANGLE_DUPECHAR_ALL,
  82. RULE_OP_MANGLE_TITLE,
  83. RULE_OP_MANGLE_APPEND_MEMORY,
  84. RULE_OP_MANGLE_PREPEND_MEMORY,
  85. };
  86. static const char grp_op_pos_p0[] =
  87. {
  88. RULE_OP_MANGLE_TOGGLE_AT,
  89. RULE_OP_MANGLE_DELETE_AT,
  90. RULE_OP_MANGLE_TRUNCATE_AT,
  91. RULE_OP_MANGLE_CHR_INCR,
  92. RULE_OP_MANGLE_CHR_DECR,
  93. RULE_OP_MANGLE_CHR_SHIFTL,
  94. RULE_OP_MANGLE_CHR_SHIFTR,
  95. RULE_OP_MANGLE_REPLACE_NP1,
  96. RULE_OP_MANGLE_REPLACE_NM1
  97. };
  98. static const char grp_op_pos_p1[] =
  99. {
  100. RULE_OP_MANGLE_DUPEWORD_TIMES,
  101. RULE_OP_MANGLE_DUPECHAR_FIRST,
  102. RULE_OP_MANGLE_DUPECHAR_LAST,
  103. RULE_OP_MANGLE_DUPEBLOCK_FIRST,
  104. RULE_OP_MANGLE_DUPEBLOCK_LAST
  105. };
  106. static const char grp_op_chr[] =
  107. {
  108. RULE_OP_MANGLE_APPEND,
  109. RULE_OP_MANGLE_PREPEND,
  110. RULE_OP_MANGLE_PURGECHAR
  111. };
  112. static const char grp_op_chr_chr[] =
  113. {
  114. RULE_OP_MANGLE_REPLACE
  115. };
  116. static const char grp_op_pos_chr[] =
  117. {
  118. RULE_OP_MANGLE_INSERT,
  119. RULE_OP_MANGLE_OVERSTRIKE
  120. };
  121. static const char grp_op_pos_pos0[] =
  122. {
  123. RULE_OP_MANGLE_SWITCH_AT
  124. };
  125. static const char grp_op_pos_pos1[] =
  126. {
  127. RULE_OP_MANGLE_EXTRACT
  128. };
  129. static const char grp_op_pos1_pos2_pos3[] =
  130. {
  131. RULE_OP_MANGLE_EXTRACT_MEMORY
  132. };
  133. static const char grp_pos[] =
  134. {
  135. '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B'
  136. };
  137. bool class_num (char c);
  138. bool class_lower (char c);
  139. bool class_upper (char c);
  140. bool class_alpha (char c);
  141. int generate_random_rule (char rule_buf[RP_RULE_BUFSIZ], uint32_t rp_gen_func_min, uint32_t rp_gen_func_max);
  142. int apply_rule (char *rule, int rule_len, char in[BLOCK_SIZE], int in_len, char out[BLOCK_SIZE]);
  143. #endif /* RP_H */