unkr/
models.rs

1use std::collections::{BTreeMap, VecDeque};
2
3use crate::cryptors::enigma::EnigmaArgs;
4
5// This module is pure enum aberrations
6
7#[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    //   Reuse(CryptorBase),
23}
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    //IndexCrypt(StringArgs),
38    Permute(PermuteArgs),
39    Enigma(EnigmaArgs),
40    //   Reuse(CryptorBase),
41}
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    //  IndexCrypt,
87    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    //    IndexCrypt(StringArgs),
109    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}