1use std::collections::{BTreeMap, VecDeque};
2
3use crate::cryptors::enigma::EnigmaArgs;
4
5#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
8#[serde(tag = "name", deny_unknown_fields)]
9pub enum CLICryptor {
10 Vigenere(VigenereArgs),
11 Cut(NumberArgs),
12 Caesar(NumberArgs),
13 Transpose(NumberArgs),
14 AtBash,
15 Reverse,
16 Swap(SwapArgs),
17 Join,
18 Colors(StringArgs),
19 IndexCrypt(StringArgs),
20 Permute(CLIPermuteArgs),
21 Enigma(EnigmaArgs),
22 }
24
25#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
26#[serde(tag = "name", deny_unknown_fields)]
27pub enum Cryptor {
28 Vigenere(VigenereArgs),
29 Cut(NumberArgs),
30 Caesar(NumberArgs),
31 Transpose(NumberArgs),
32 AtBash,
33 Reverse,
34 Swap(SwapArgs),
35 Join,
36 Colors(StringArgs),
37 Permute(PermuteArgs),
39 Enigma(EnigmaArgs),
40 }
42
43#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
44#[serde(tag = "name", deny_unknown_fields)]
45pub enum CryptorBase {
46 Vigenere,
47 Cut,
48 Caesar,
49 Transpose,
50 AtBash,
51 Reverse,
52 Swap,
53 Join,
54 IndexCrypt,
55 Permute,
56 Enigma,
57}
58
59#[derive(
60 Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone, Copy,
61)]
62#[serde(tag = "name", deny_unknown_fields)]
63pub enum CryptorTypeWithArgs {
64 Vigenere,
65 Cut,
66 Caesar,
67 Transpose,
68 Swap,
69 Colors,
70 IndexCrypt,
71 Permute,
72 Enigma,
73}
74
75#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
76#[serde(tag = "name", deny_unknown_fields)]
77pub enum BruteForceCryptor {
78 Vigenere(BruteForceVigenereArgs),
79 Cut,
80 Caesar,
81 Transpose,
82 AtBash,
83 Reverse,
84 Swap,
85 Join,
86 Permute(BruteForcePermuteArgs),
88 Enigma,
89 Reuse(CryptorBase),
90}
91#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone, Copy)]
92pub enum CryptorTypeWithBruteForceArgs {
93 Vigenere,
94 Permute,
95 Reuse,
96}
97
98#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone)]
99pub enum BruteForceState {
100 Vigenere(VigenereBruteForceState),
101 Cut(NumberArgs),
102 Caesar(NumberArgs),
103 Transpose(NumberArgs),
104 AtBash,
105 Reverse,
106 Swap(SwapArgs),
107 Join,
108 Permute(PermuteBruteForceState),
110 Enigma(EnigmaArgs),
111 Reuse(CryptorBase),
112}
113#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone)]
114pub struct VigenereBruteForceState {
115 pub brute_force_args: BruteForceVigenereArgs,
116 pub args: VigenereArgs,
117}
118#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone)]
119pub struct PermuteBruteForceState {
120 pub brute_force_args: BruteForcePermuteArgs,
121 pub args: PermuteArgs,
122}
123
124#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
125pub struct VigenereArgs {
126 pub key: String,
127 pub alphabet: String,
128}
129
130#[derive(
131 Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone, Copy,
132)]
133pub struct BruteForceVigenereArgs {
134 pub alphabet_depth: usize,
135 pub key_depth: usize,
136}
137
138#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
139pub struct SwapArgs {
140 pub order: Vec<u8>,
141}
142
143#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
144pub struct PermuteArgs {
145 pub permutations: BTreeMap<char, char>,
146 pub reversed_permutations: BTreeMap<char, char>,
147}
148
149#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
150pub struct CLIPermuteArgs {
151 pub permutations: Vec<(char, char)>,
152}
153
154#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
155pub struct BruteForcePermuteArgs {
156 pub max_permutations: usize,
157}
158
159#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone)]
160pub struct StringArgs {
161 pub letters: String,
162}
163
164#[derive(
165 Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, PartialOrd, Ord, Clone, Copy,
166)]
167pub struct NumberArgs {
168 pub number: usize,
169}
170
171#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone)]
172pub struct CacheArgs {
173 pub path: String,
174 pub md5_string: String,
175 pub md5_clues: String,
176}
177
178#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone)]
179pub struct HitLine {
180 pub args: Vec<Cryptor>,
181 pub result: String,
182}
183
184#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone, PartialOrd, Ord)]
185pub struct DoneLine {
186 pub combinations: String,
187 pub args: Option<String>,
188}
189
190#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone, PartialOrd, Ord)]
191pub struct PartialLine {
192 pub cryptor: CLICryptor,
193 pub tail: VecDeque<BruteForceCryptor>,
194}
195
196#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone, PartialOrd, Ord)]
197pub struct SerializablePartialLine {
198 pub tail: VecDeque<String>,
199}
200
201#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone, PartialOrd, Ord)]
202pub struct SerializablePartialLine2 {
203 pub cryptor: String,
204 pub tail: VecDeque<BruteForceCryptor>,
205}
206
207#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone, PartialOrd, Ord)]
208pub struct SerializablePartialLine3 {
209 pub cryptor: String,
210 pub tail: Vec<String>,
211}
212
213#[derive(Debug, serde::Deserialize, serde::Serialize, Eq, PartialEq, Clone, PartialOrd, Ord)]
214pub enum FuzzerRule {
215 UniqueLetters,
216 EvenCount,
217 SortedLettersByPair,
218}