1use itertools::Itertools;
2use bimap::btree::BiBTreeMap;
3
4pub fn split_bytes_by_characters_representation(encoding: &Alphabet, text: Vec<u8>) -> Vec<Vec<u8>> {
13 let mut set_of_chars: Vec<Vec<u8>> = vec![];
14
15 let mut stack_of_chars = vec![];
16 for opcode in text {
17 stack_of_chars.push(opcode);
18 if encoding.encoding.contains_right(&stack_of_chars) {
19 set_of_chars.push(stack_of_chars);
20 stack_of_chars = vec![];
21 } else {
22 stack_of_chars.push(opcode);
23 }
24 }
25
26 set_of_chars
27}
28
29pub fn uniffy_opcode_group(text: Vec<Vec<u8>>) -> Vec<u8> {
30 text.concat()
31}
32
33pub const PRINTABLE: &'static str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c";
34pub const UU_ENCODING_ALPHABET: &'static str = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`";
36
37#[derive(PartialEq, Eq)]
38#[derive(Debug)]
39#[derive(Clone)]
40pub struct Encoding {
41 pub str: String,
42 pub bytes: Vec<u8>,
43}
44
45#[derive(Clone)]
46pub struct Alphabet {
47 pub encoding: BiBTreeMap<String, Vec<u8>>,
49}
50
51impl Alphabet {
52 pub fn new(encoding: Vec<Encoding>) -> Self {
53 let encoding = encoding.into_iter().map(|e| (e.str, e.bytes))
54 .collect::<BiBTreeMap<_, _>>();
55 Alphabet {
56 encoding,
57 }
58 }
59
60 pub fn new_empty() -> Self {
61 Alphabet {
62 encoding: BiBTreeMap::new(),
63 }
64 }
65
66 pub fn ascii_printable_only_encoding(&mut self) -> Self {
68 self.encoding = BiBTreeMap::from_iter(vec![
69 (String::from(" "), vec![0x20]),
70 (String::from("!"), vec![0x21]),
71 (String::from("\""), vec![0x22]),
72 (String::from("#"), vec![0x23]),
73 (String::from("$"), vec![0x24]),
74 (String::from("%"), vec![0x25]),
75 (String::from("&"), vec![0x26]),
76 (String::from("'"), vec![0x27]),
77 (String::from("("), vec![0x28]),
78 (String::from(")"), vec![0x29]),
79 (String::from("*"), vec![0x2a]),
80 (String::from("+"), vec![0x2b]),
81 (String::from(","), vec![0x2c]),
82 (String::from("-"), vec![0x2d]),
83 (String::from("."), vec![0x2e]),
84 (String::from("/"), vec![0x2f]),
85 (String::from("0"), vec![0x30]),
86 (String::from("1"), vec![0x31]),
87 (String::from("2"), vec![0x32]),
88 (String::from("3"), vec![0x33]),
89 (String::from("4"), vec![0x34]),
90 (String::from("5"), vec![0x35]),
91 (String::from("6"), vec![0x36]),
92 (String::from("7"), vec![0x37]),
93 (String::from("8"), vec![0x38]),
94 (String::from("9"), vec![0x39]),
95 (String::from(":"), vec![0x3a]),
96 (String::from(";"), vec![0x3b]),
97 (String::from("<"), vec![0x3c]),
98 (String::from("="), vec![0x3d]),
99 (String::from(">"), vec![0x3e]),
100 (String::from("?"), vec![0x3f]),
101 (String::from("@"), vec![0x40]),
102 (String::from("A"), vec![0x41]),
103 (String::from("B"), vec![0x42]),
104 (String::from("C"), vec![0x43]),
105 (String::from("D"), vec![0x44]),
106 (String::from("E"), vec![0x45]),
107 (String::from("F"), vec![0x46]),
108 (String::from("G"), vec![0x47]),
109 (String::from("H"), vec![0x48]),
110 (String::from("I"), vec![0x49]),
111 (String::from("J"), vec![0x4a]),
112 (String::from("K"), vec![0x4b]),
113 (String::from("L"), vec![0x4c]),
114 (String::from("M"), vec![0x4d]),
115 (String::from("N"), vec![0x4e]),
116 (String::from("O"), vec![0x4f]),
117 (String::from("P"), vec![0x50]),
118 (String::from("Q"), vec![0x51]),
119 (String::from("R"), vec![0x52]),
120 (String::from("S"), vec![0x53]),
121 (String::from("T"), vec![0x54]),
122 (String::from("U"), vec![0x55]),
123 (String::from("V"), vec![0x56]),
124 (String::from("W"), vec![0x57]),
125 (String::from("X"), vec![0x58]),
126 (String::from("Y"), vec![0x59]),
127 (String::from("Z"), vec![0x5a]),
128 (String::from("["), vec![0x5b]),
129 (String::from("\\"), vec![0x5c]),
130 (String::from("]"), vec![0x5d]),
131 (String::from("^"), vec![0x5e]),
132 (String::from("_"), vec![0x5f]),
133 (String::from("`"), vec![0x60]),
134 (String::from("a"), vec![0x61]),
135 (String::from("b"), vec![0x62]),
136 (String::from("c"), vec![0x63]),
137 (String::from("d"), vec![0x64]),
138 (String::from("e"), vec![0x65]),
139 (String::from("f"), vec![0x66]),
140 (String::from("g"), vec![0x67]),
141 (String::from("h"), vec![0x68]),
142 (String::from("i"), vec![0x69]),
143 (String::from("j"), vec![0x6a]),
144 (String::from("k"), vec![0x6b]),
145 (String::from("l"), vec![0x6c]),
146 (String::from("m"), vec![0x6d]),
147 (String::from("n"), vec![0x6e]),
148 (String::from("o"), vec![0x6f]),
149 (String::from("p"), vec![0x70]),
150 (String::from("q"), vec![0x71]),
151 (String::from("r"), vec![0x72]),
152 (String::from("s"), vec![0x73]),
153 (String::from("t"), vec![0x74]),
154 (String::from("u"), vec![0x75]),
155 (String::from("v"), vec![0x76]),
156 (String::from("w"), vec![0x77]),
157 (String::from("x"), vec![0x78]),
158 (String::from("y"), vec![0x79]),
159 (String::from("z"), vec![0x7a]),
160 (String::from("{"), vec![0x7b]),
161 (String::from("|"), vec![0x7c]),
162 (String::from("}"), vec![0x7d]),
163 (String::from("~"), vec![0x7e])]);
164
165 let encoding = self.encoding.clone();
166
167 Alphabet {
168 encoding: encoding
169 }
170 }
171
172 pub fn ascii_encoding(&mut self) -> Self {
173 let mut encoding = BiBTreeMap::new();
174 encoding.insert(String::from("\x00"), vec![0x00]);
175 encoding.insert(String::from("\x01"), vec![0x01]);
176 encoding.insert(String::from("\x02"), vec![0x02]);
177 encoding.insert(String::from("\x03"), vec![0x03]);
178 encoding.insert(String::from("\x04"), vec![0x04]);
179 encoding.insert(String::from("\x05"), vec![0x05]);
180 encoding.insert(String::from("\x06"), vec![0x06]);
181 encoding.insert(String::from("\x07"), vec![0x07]);
182 encoding.insert(String::from("\x08"), vec![0x08]);
183 encoding.insert(String::from("\x09"), vec![0x09]);
184 encoding.insert(String::from("\x0a"), vec![0x0a]);
185 encoding.insert(String::from("\x0b"), vec![0x0b]);
186 encoding.insert(String::from("\x0c"), vec![0x0c]);
187 encoding.insert(String::from("\x0d"), vec![0x0d]);
188 encoding.insert(String::from("\x0e"), vec![0x0e]);
189 encoding.insert(String::from("\x0f"), vec![0x0f]);
190 encoding.insert(String::from("\x10"), vec![0x10]);
191 encoding.insert(String::from("\x11"), vec![0x11]);
192 encoding.insert(String::from("\x12"), vec![0x12]);
193 encoding.insert(String::from("\x13"), vec![0x13]);
194 encoding.insert(String::from("\x14"), vec![0x14]);
195 encoding.insert(String::from("\x15"), vec![0x15]);
196 encoding.insert(String::from("\x16"), vec![0x16]);
197 encoding.insert(String::from("\x17"), vec![0x17]);
198 encoding.insert(String::from("\x18"), vec![0x18]);
199 encoding.insert(String::from("\x19"), vec![0x19]);
200 encoding.insert(String::from("\x1a"), vec![0x1a]);
201 encoding.insert(String::from("\x1b"), vec![0x1b]);
202 encoding.insert(String::from("\x1c"), vec![0x1c]);
203 encoding.insert(String::from("\x1d"), vec![0x1d]);
204 encoding.insert(String::from("\x1e"), vec![0x1e]);
205 encoding.insert(String::from("\x1f"), vec![0x1f]);
206 encoding.insert(String::from(" "), vec![0x20]);
207 encoding.insert(String::from("!"), vec![0x21]);
208 encoding.insert(String::from("\""), vec![0x22]);
209 encoding.insert(String::from("#"), vec![0x23]);
210 encoding.insert(String::from("$"), vec![0x24]);
211 encoding.insert(String::from("%"), vec![0x25]);
212 encoding.insert(String::from("&"), vec![0x26]);
213 encoding.insert(String::from("'"), vec![0x27]);
214 encoding.insert(String::from("("), vec![0x28]);
215 encoding.insert(String::from(")"), vec![0x29]);
216 encoding.insert(String::from("*"), vec![0x2a]);
217 encoding.insert(String::from("+"), vec![0x2b]);
218 encoding.insert(String::from(","), vec![0x2c]);
219 encoding.insert(String::from("-"), vec![0x2d]);
220 encoding.insert(String::from("."), vec![0x2e]);
221 encoding.insert(String::from("/"), vec![0x2f]);
222 encoding.insert(String::from("0"), vec![0x30]);
223 encoding.insert(String::from("1"), vec![0x31]);
224 encoding.insert(String::from("2"), vec![0x32]);
225 encoding.insert(String::from("3"), vec![0x33]);
226 encoding.insert(String::from("4"), vec![0x34]);
227 encoding.insert(String::from("5"), vec![0x35]);
228 encoding.insert(String::from("6"), vec![0x36]);
229 encoding.insert(String::from("7"), vec![0x37]);
230 encoding.insert(String::from("8"), vec![0x38]);
231 encoding.insert(String::from("9"), vec![0x39]);
232 encoding.insert(String::from(":"), vec![0x3a]);
233 encoding.insert(String::from(";"), vec![0x3b]);
234 encoding.insert(String::from("<"), vec![0x3c]);
235 encoding.insert(String::from("="), vec![0x3d]);
236 encoding.insert(String::from(">"), vec![0x3e]);
237 encoding.insert(String::from("?"), vec![0x3f]);
238 encoding.insert(String::from("@"), vec![0x40]);
239 encoding.insert(String::from("A"), vec![0x41]);
240 encoding.insert(String::from("B"), vec![0x42]);
241 encoding.insert(String::from("C"), vec![0x43]);
242 encoding.insert(String::from("D"), vec![0x44]);
243 encoding.insert(String::from("E"), vec![0x45]);
244 encoding.insert(String::from("F"), vec![0x46]);
245 encoding.insert(String::from("G"), vec![0x47]);
246 encoding.insert(String::from("H"), vec![0x48]);
247 encoding.insert(String::from("I"), vec![0x49]);
248 encoding.insert(String::from("J"), vec![0x4a]);
249 encoding.insert(String::from("K"), vec![0x4b]);
250 encoding.insert(String::from("L"), vec![0x4c]);
251 encoding.insert(String::from("M"), vec![0x4d]);
252 encoding.insert(String::from("N"), vec![0x4e]);
253 encoding.insert(String::from("O"), vec![0x4f]);
254 encoding.insert(String::from("P"), vec![0x50]);
255 encoding.insert(String::from("Q"), vec![0x51]);
256 encoding.insert(String::from("R"), vec![0x52]);
257 encoding.insert(String::from("S"), vec![0x53]);
258 encoding.insert(String::from("T"), vec![0x54]);
259 encoding.insert(String::from("U"), vec![0x55]);
260 encoding.insert(String::from("V"), vec![0x56]);
261 encoding.insert(String::from("W"), vec![0x57]);
262 encoding.insert(String::from("X"), vec![0x58]);
263 encoding.insert(String::from("Y"), vec![0x59]);
264 encoding.insert(String::from("Z"), vec![0x5a]);
265 encoding.insert(String::from("["), vec![0x5b]);
266 encoding.insert(String::from("\\"), vec![0x5c]);
267 encoding.insert(String::from("]"), vec![0x5d]);
268 encoding.insert(String::from("^"), vec![0x5e]);
269 encoding.insert(String::from("_"), vec![0x5f]);
270 encoding.insert(String::from("`"), vec![0x60]);
271 encoding.insert(String::from("a"), vec![0x61]);
272 encoding.insert(String::from("b"), vec![0x62]);
273 encoding.insert(String::from("c"), vec![0x63]);
274 encoding.insert(String::from("d"), vec![0x64]);
275 encoding.insert(String::from("e"), vec![0x65]);
276 encoding.insert(String::from("f"), vec![0x66]);
277 encoding.insert(String::from("g"), vec![0x67]);
278 encoding.insert(String::from("h"), vec![0x68]);
279 encoding.insert(String::from("i"), vec![0x69]);
280 encoding.insert(String::from("j"), vec![0x6a]);
281 encoding.insert(String::from("k"), vec![0x6b]);
282 encoding.insert(String::from("l"), vec![0x6c]);
283 encoding.insert(String::from("m"), vec![0x6d]);
284 encoding.insert(String::from("n"), vec![0x6e]);
285 encoding.insert(String::from("o"), vec![0x6f]);
286 encoding.insert(String::from("p"), vec![0x70]);
287 encoding.insert(String::from("q"), vec![0x71]);
288 encoding.insert(String::from("r"), vec![0x72]);
289 encoding.insert(String::from("s"), vec![0x73]);
290 encoding.insert(String::from("t"), vec![0x74]);
291 encoding.insert(String::from("u"), vec![0x75]);
292 encoding.insert(String::from("v"), vec![0x76]);
293 encoding.insert(String::from("w"), vec![0x77]);
294 encoding.insert(String::from("x"), vec![0x78]);
295 encoding.insert(String::from("y"), vec![0x79]);
296 encoding.insert(String::from("z"), vec![0x7a]);
297 encoding.insert(String::from("{"), vec![0x7b]);
298 encoding.insert(String::from("|"), vec![0x7c]);
299 encoding.insert(String::from("}"), vec![0x7d]);
300 encoding.insert(String::from("~"), vec![0x7e]);
301 encoding.insert(String::from("\x7f"), vec![0x7f]);
302 encoding.insert(String::from("\\u128"), vec![0x80]);
303
304
305 self.encoding = encoding.clone();
306
307 Alphabet {
308 encoding: encoding
309 }
310 }
311
312 pub fn pokered_charset_encoding(&mut self) -> Self {
313 let mut encoding = BiBTreeMap::new();
314 encoding.insert(String::from("<NULL>"), vec![0x00]);
315 encoding.insert(String::from("<PAGE>"), vec![0x49]);
316 encoding.insert(String::from("<PKMN>"), vec![0x4a]);
317
318 self.encoding = encoding.clone();
319
320 Alphabet {
321 encoding: encoding
322 }
323 }
324
325 pub fn uppercase_no_space_ascii_alphabet_encoding(&mut self) -> Self {
326 let mut encoding = BiBTreeMap::new();
327 encoding.insert(String::from("A"), vec![0x41]);
328 encoding.insert(String::from("B"), vec![0x42]);
329 encoding.insert(String::from("C"), vec![0x43]);
330 encoding.insert(String::from("D"), vec![0x44]);
331 encoding.insert(String::from("E"), vec![0x45]);
332 encoding.insert(String::from("F"), vec![0x46]);
333 encoding.insert(String::from("G"), vec![0x47]);
334 encoding.insert(String::from("H"), vec![0x48]);
335 encoding.insert(String::from("I"), vec![0x49]);
336 encoding.insert(String::from("J"), vec![0x4a]);
337 encoding.insert(String::from("K"), vec![0x4b]);
338 encoding.insert(String::from("L"), vec![0x4c]);
339 encoding.insert(String::from("M"), vec![0x4d]);
340 encoding.insert(String::from("N"), vec![0x4e]);
341 encoding.insert(String::from("O"), vec![0x4f]);
342 encoding.insert(String::from("P"), vec![0x50]);
343 encoding.insert(String::from("Q"), vec![0x51]);
344 encoding.insert(String::from("R"), vec![0x52]);
345 encoding.insert(String::from("S"), vec![0x53]);
346 encoding.insert(String::from("T"), vec![0x54]);
347 encoding.insert(String::from("U"), vec![0x55]);
348 encoding.insert(String::from("V"), vec![0x56]);
349 encoding.insert(String::from("W"), vec![0x57]);
350 encoding.insert(String::from("X"), vec![0x58]);
351 encoding.insert(String::from("Y"), vec![0x59]);
352 encoding.insert(String::from("Z"), vec![0x5a]);
353
354 self.encoding = encoding.clone();
355
356 Alphabet {
357 encoding: encoding
358 }
359 }
360
361 pub fn intel_x86_32_encoding(&mut self) -> Self {
362 let mut encoding = BiBTreeMap::new();
363 encoding.insert(String::from("mov rax, rax"), vec![0x00]);
364 encoding.insert(String::from("mov rax, rbx"), vec![0x01]);
365
366 self.encoding = encoding.clone();
367
368 Alphabet {
369 encoding: encoding
370 }
371 }
372
373 pub fn unknow_opcodes(&mut self) -> Self {
377 let mut encoding = BiBTreeMap::new();
378 for i in 0..255 {
379 let mut invalid_instruction = String::from("invalid");
380 invalid_instruction.push_str(&i.to_string());
381 encoding.insert(invalid_instruction, vec![i]);
382 }
383
384 self.encoding = encoding.clone();
385
386 Alphabet {
387 encoding: encoding
388 }
389 }
390
391
392 pub fn full_hexadecimal_alphabet() -> Self {
399 let mut encoding = BiBTreeMap::new();
400 encoding.insert(String::from("00"), vec![0x00]);
401 encoding.insert(String::from("01"), vec![0x01]);
402 encoding.insert(String::from("02"), vec![0x02]);
403 encoding.insert(String::from("03"), vec![0x03]);
404 encoding.insert(String::from("04"), vec![0x04]);
405 encoding.insert(String::from("05"), vec![0x05]);
406 encoding.insert(String::from("06"), vec![0x06]);
407 encoding.insert(String::from("07"), vec![0x07]);
408 encoding.insert(String::from("08"), vec![0x08]);
409 encoding.insert(String::from("09"), vec![0x09]);
410 encoding.insert(String::from("0a"), vec![0x0a]);
411 encoding.insert(String::from("0b"), vec![0x0b]);
412 encoding.insert(String::from("0c"), vec![0x0c]);
413 encoding.insert(String::from("0d"), vec![0x0d]);
414 encoding.insert(String::from("0e"), vec![0x0e]);
415 encoding.insert(String::from("0f"), vec![0x0f]);
416
417 encoding.insert(String::from("10"), vec![0x10]);
418 encoding.insert(String::from("11"), vec![0x11]);
419 encoding.insert(String::from("12"), vec![0x12]);
420 encoding.insert(String::from("13"), vec![0x13]);
421 encoding.insert(String::from("14"), vec![0x14]);
422 encoding.insert(String::from("15"), vec![0x15]);
423 encoding.insert(String::from("16"), vec![0x16]);
424 encoding.insert(String::from("17"), vec![0x17]);
425 encoding.insert(String::from("18"), vec![0x18]);
426 encoding.insert(String::from("19"), vec![0x19]);
427 encoding.insert(String::from("1a"), vec![0x1a]);
428 encoding.insert(String::from("1b"), vec![0x1b]);
429 encoding.insert(String::from("1c"), vec![0x1c]);
430 encoding.insert(String::from("1d"), vec![0x1d]);
431 encoding.insert(String::from("1e"), vec![0x1e]);
432 encoding.insert(String::from("1f"), vec![0x1f]);
433
434 encoding.insert(String::from("20"), vec![0x20]);
435 encoding.insert(String::from("21"), vec![0x21]);
436 encoding.insert(String::from("22"), vec![0x22]);
437 encoding.insert(String::from("23"), vec![0x23]);
438 encoding.insert(String::from("24"), vec![0x24]);
439 encoding.insert(String::from("25"), vec![0x25]);
440 encoding.insert(String::from("26"), vec![0x26]);
441 encoding.insert(String::from("27"), vec![0x27]);
442 encoding.insert(String::from("28"), vec![0x28]);
443 encoding.insert(String::from("29"), vec![0x29]);
444 encoding.insert(String::from("2a"), vec![0x2a]);
445 encoding.insert(String::from("2b"), vec![0x2b]);
446 encoding.insert(String::from("2c"), vec![0x2c]);
447 encoding.insert(String::from("2d"), vec![0x2d]);
448 encoding.insert(String::from("2e"), vec![0x2e]);
449 encoding.insert(String::from("2f"), vec![0x2f]);
450
451 encoding.insert(String::from("30"), vec![0x30]);
452 encoding.insert(String::from("31"), vec![0x31]);
453 encoding.insert(String::from("32"), vec![0x32]);
454 encoding.insert(String::from("33"), vec![0x33]);
455 encoding.insert(String::from("34"), vec![0x34]);
456 encoding.insert(String::from("35"), vec![0x35]);
457 encoding.insert(String::from("36"), vec![0x36]);
458 encoding.insert(String::from("37"), vec![0x37]);
459 encoding.insert(String::from("38"), vec![0x38]);
460 encoding.insert(String::from("39"), vec![0x39]);
461 encoding.insert(String::from("3a"), vec![0x3a]);
462 encoding.insert(String::from("3b"), vec![0x3b]);
463 encoding.insert(String::from("3c"), vec![0x3c]);
464 encoding.insert(String::from("3d"), vec![0x3d]);
465 encoding.insert(String::from("3e"), vec![0x3e]);
466 encoding.insert(String::from("3f"), vec![0x3f]);
467
468 encoding.insert(String::from("40"), vec![0x40]);
469 encoding.insert(String::from("41"), vec![0x41]);
470 encoding.insert(String::from("42"), vec![0x42]);
471 encoding.insert(String::from("43"), vec![0x43]);
472 encoding.insert(String::from("44"), vec![0x44]);
473 encoding.insert(String::from("45"), vec![0x45]);
474 encoding.insert(String::from("46"), vec![0x46]);
475 encoding.insert(String::from("47"), vec![0x47]);
476 encoding.insert(String::from("48"), vec![0x48]);
477 encoding.insert(String::from("49"), vec![0x49]);
478 encoding.insert(String::from("4a"), vec![0x4a]);
479 encoding.insert(String::from("4b"), vec![0x4b]);
480 encoding.insert(String::from("4c"), vec![0x4c]);
481 encoding.insert(String::from("4d"), vec![0x4d]);
482 encoding.insert(String::from("4e"), vec![0x4e]);
483 encoding.insert(String::from("4f"), vec![0x4f]);
484
485 encoding.insert(String::from("50"), vec![0x50]);
486 encoding.insert(String::from("51"), vec![0x51]);
487 encoding.insert(String::from("52"), vec![0x52]);
488 encoding.insert(String::from("53"), vec![0x53]);
489 encoding.insert(String::from("54"), vec![0x54]);
490 encoding.insert(String::from("55"), vec![0x55]);
491 encoding.insert(String::from("56"), vec![0x56]);
492 encoding.insert(String::from("57"), vec![0x57]);
493 encoding.insert(String::from("58"), vec![0x58]);
494 encoding.insert(String::from("59"), vec![0x59]);
495 encoding.insert(String::from("5a"), vec![0x5a]);
496 encoding.insert(String::from("5b"), vec![0x5b]);
497 encoding.insert(String::from("5c"), vec![0x5c]);
498 encoding.insert(String::from("5d"), vec![0x5d]);
499 encoding.insert(String::from("5e"), vec![0x5e]);
500 encoding.insert(String::from("5f"), vec![0x5f]);
501
502 encoding.insert(String::from("60"), vec![0x60]);
503 encoding.insert(String::from("61"), vec![0x61]);
504 encoding.insert(String::from("62"), vec![0x62]);
505 encoding.insert(String::from("63"), vec![0x63]);
506 encoding.insert(String::from("64"), vec![0x64]);
507 encoding.insert(String::from("65"), vec![0x65]);
508 encoding.insert(String::from("66"), vec![0x66]);
509 encoding.insert(String::from("67"), vec![0x67]);
510 encoding.insert(String::from("68"), vec![0x68]);
511 encoding.insert(String::from("69"), vec![0x69]);
512 encoding.insert(String::from("6a"), vec![0x6a]);
513 encoding.insert(String::from("6b"), vec![0x6b]);
514 encoding.insert(String::from("6c"), vec![0x6c]);
515 encoding.insert(String::from("6d"), vec![0x6d]);
516 encoding.insert(String::from("6e"), vec![0x6e]);
517 encoding.insert(String::from("6f"), vec![0x6f]);
518
519 encoding.insert(String::from("70"), vec![0x70]);
520 encoding.insert(String::from("71"), vec![0x71]);
521 encoding.insert(String::from("72"), vec![0x72]);
522 encoding.insert(String::from("73"), vec![0x73]);
523 encoding.insert(String::from("74"), vec![0x74]);
524 encoding.insert(String::from("75"), vec![0x75]);
525 encoding.insert(String::from("76"), vec![0x76]);
526 encoding.insert(String::from("77"), vec![0x77]);
527 encoding.insert(String::from("78"), vec![0x78]);
528 encoding.insert(String::from("79"), vec![0x79]);
529 encoding.insert(String::from("7a"), vec![0x7a]);
530 encoding.insert(String::from("7b"), vec![0x7b]);
531 encoding.insert(String::from("7c"), vec![0x7c]);
532 encoding.insert(String::from("7d"), vec![0x7d]);
533 encoding.insert(String::from("7e"), vec![0x7e]);
534 encoding.insert(String::from("7f"), vec![0x7f]);
535
536 encoding.insert(String::from("80"), vec![0x80]);
537 encoding.insert(String::from("81"), vec![0x81]);
538 encoding.insert(String::from("82"), vec![0x82]);
539 encoding.insert(String::from("83"), vec![0x83]);
540 encoding.insert(String::from("84"), vec![0x84]);
541 encoding.insert(String::from("85"), vec![0x85]);
542 encoding.insert(String::from("86"), vec![0x86]);
543 encoding.insert(String::from("87"), vec![0x87]);
544 encoding.insert(String::from("88"), vec![0x88]);
545 encoding.insert(String::from("89"), vec![0x89]);
546 encoding.insert(String::from("8a"), vec![0x8a]);
547 encoding.insert(String::from("8b"), vec![0x8b]);
548 encoding.insert(String::from("8c"), vec![0x8c]);
549 encoding.insert(String::from("8d"), vec![0x8d]);
550 encoding.insert(String::from("8e"), vec![0x8e]);
551 encoding.insert(String::from("8f"), vec![0x8f]);
552
553 encoding.insert(String::from("90"), vec![0x90]);
554 encoding.insert(String::from("91"), vec![0x91]);
555 encoding.insert(String::from("92"), vec![0x92]);
556 encoding.insert(String::from("93"), vec![0x93]);
557 encoding.insert(String::from("94"), vec![0x94]);
558 encoding.insert(String::from("95"), vec![0x95]);
559 encoding.insert(String::from("96"), vec![0x96]);
560 encoding.insert(String::from("97"), vec![0x97]);
561 encoding.insert(String::from("98"), vec![0x98]);
562 encoding.insert(String::from("99"), vec![0x99]);
563 encoding.insert(String::from("9a"), vec![0x9a]);
564 encoding.insert(String::from("9b"), vec![0x9b]);
565 encoding.insert(String::from("9c"), vec![0x9c]);
566 encoding.insert(String::from("9d"), vec![0x9d]);
567 encoding.insert(String::from("9e"), vec![0x9e]);
568 encoding.insert(String::from("9f"), vec![0x9f]);
569
570 encoding.insert(String::from("a0"), vec![0xa0]);
571 encoding.insert(String::from("a1"), vec![0xa1]);
572 encoding.insert(String::from("a2"), vec![0xa2]);
573 encoding.insert(String::from("a3"), vec![0xa3]);
574 encoding.insert(String::from("a4"), vec![0xa4]);
575 encoding.insert(String::from("a5"), vec![0xa5]);
576 encoding.insert(String::from("a6"), vec![0xa6]);
577 encoding.insert(String::from("a7"), vec![0xa7]);
578 encoding.insert(String::from("a8"), vec![0xa8]);
579 encoding.insert(String::from("a9"), vec![0xa9]);
580 encoding.insert(String::from("aa"), vec![0xaa]);
581 encoding.insert(String::from("ab"), vec![0xab]);
582 encoding.insert(String::from("ac"), vec![0xac]);
583 encoding.insert(String::from("ad"), vec![0xad]);
584 encoding.insert(String::from("ae"), vec![0xae]);
585 encoding.insert(String::from("af"), vec![0xaf]);
586
587 encoding.insert(String::from("b0"), vec![0xb0]);
588 encoding.insert(String::from("b1"), vec![0xb1]);
589 encoding.insert(String::from("b2"), vec![0xb2]);
590 encoding.insert(String::from("b3"), vec![0xb3]);
591 encoding.insert(String::from("b4"), vec![0xb4]);
592 encoding.insert(String::from("b5"), vec![0xb5]);
593 encoding.insert(String::from("b6"), vec![0xb6]);
594 encoding.insert(String::from("b7"), vec![0xb7]);
595 encoding.insert(String::from("b8"), vec![0xb8]);
596 encoding.insert(String::from("b9"), vec![0xb9]);
597 encoding.insert(String::from("ba"), vec![0xba]);
598 encoding.insert(String::from("bb"), vec![0xbb]);
599 encoding.insert(String::from("bc"), vec![0xbc]);
600 encoding.insert(String::from("bd"), vec![0xbd]);
601 encoding.insert(String::from("be"), vec![0xbe]);
602 encoding.insert(String::from("bf"), vec![0xbf]);
603
604 encoding.insert(String::from("c0"), vec![0xc0]);
605 encoding.insert(String::from("c1"), vec![0xc1]);
606 encoding.insert(String::from("c2"), vec![0xc2]);
607 encoding.insert(String::from("c3"), vec![0xc3]);
608 encoding.insert(String::from("c4"), vec![0xc4]);
609 encoding.insert(String::from("c5"), vec![0xc5]);
610 encoding.insert(String::from("c6"), vec![0xc6]);
611 encoding.insert(String::from("c7"), vec![0xc7]);
612 encoding.insert(String::from("c8"), vec![0xc8]);
613 encoding.insert(String::from("c9"), vec![0xc9]);
614 encoding.insert(String::from("ca"), vec![0xca]);
615 encoding.insert(String::from("cb"), vec![0xcb]);
616 encoding.insert(String::from("cc"), vec![0xcc]);
617 encoding.insert(String::from("cd"), vec![0xcd]);
618 encoding.insert(String::from("ce"), vec![0xce]);
619 encoding.insert(String::from("cf"), vec![0xcf]);
620
621 encoding.insert(String::from("d0"), vec![0xd0]);
622 encoding.insert(String::from("d1"), vec![0xd1]);
623 encoding.insert(String::from("d2"), vec![0xd2]);
624 encoding.insert(String::from("d3"), vec![0xd3]);
625 encoding.insert(String::from("d4"), vec![0xd4]);
626 encoding.insert(String::from("d5"), vec![0xd5]);
627 encoding.insert(String::from("d6"), vec![0xd6]);
628 encoding.insert(String::from("d7"), vec![0xd7]);
629 encoding.insert(String::from("d8"), vec![0xd8]);
630 encoding.insert(String::from("d9"), vec![0xd9]);
631 encoding.insert(String::from("da"), vec![0xda]);
632 encoding.insert(String::from("db"), vec![0xdb]);
633 encoding.insert(String::from("dc"), vec![0xdc]);
634 encoding.insert(String::from("dd"), vec![0xdd]);
635 encoding.insert(String::from("de"), vec![0xde]);
636 encoding.insert(String::from("df"), vec![0xdf]);
637
638 encoding.insert(String::from("e0"), vec![0xe0]);
639 encoding.insert(String::from("e1"), vec![0xe1]);
640 encoding.insert(String::from("e2"), vec![0xe2]);
641 encoding.insert(String::from("e3"), vec![0xe3]);
642 encoding.insert(String::from("e4"), vec![0xe4]);
643 encoding.insert(String::from("e5"), vec![0xe5]);
644 encoding.insert(String::from("e6"), vec![0xe6]);
645 encoding.insert(String::from("e7"), vec![0xe7]);
646 encoding.insert(String::from("e8"), vec![0xe8]);
647 encoding.insert(String::from("e9"), vec![0xe9]);
648 encoding.insert(String::from("ea"), vec![0xea]);
649 encoding.insert(String::from("eb"), vec![0xeb]);
650 encoding.insert(String::from("ec"), vec![0xec]);
651 encoding.insert(String::from("ed"), vec![0xed]);
652 encoding.insert(String::from("ee"), vec![0xee]);
653 encoding.insert(String::from("ef"), vec![0xef]);
654
655 encoding.insert(String::from("f0"), vec![0xf0]);
656 encoding.insert(String::from("f1"), vec![0xf1]);
657 encoding.insert(String::from("f2"), vec![0xf2]);
658 encoding.insert(String::from("f3"), vec![0xf3]);
659 encoding.insert(String::from("f4"), vec![0xf4]);
660 encoding.insert(String::from("f5"), vec![0xf5]);
661 encoding.insert(String::from("f6"), vec![0xf6]);
662 encoding.insert(String::from("f7"), vec![0xf7]);
663 encoding.insert(String::from("f8"), vec![0xf8]);
664 encoding.insert(String::from("f9"), vec![0xf9]);
665 encoding.insert(String::from("fa"), vec![0xfa]);
666 encoding.insert(String::from("fb"), vec![0xfb]);
667 encoding.insert(String::from("fc"), vec![0xfc]);
668 encoding.insert(String::from("fd"), vec![0xfd]);
669 encoding.insert(String::from("fe"), vec![0xfe]);
670 encoding.insert(String::from("ff"), vec![0xff]);
671
672 Alphabet {
673 encoding: encoding
674 }
675 }
676
677
678
679 pub fn hexadecimal_ascii_lowercase_sixteen_bits_alphabet() -> Self {
686 let mut encoding = BiBTreeMap::new();
687 encoding.insert(String::from("0"), vec![0x30]);
688 encoding.insert(String::from("1"), vec![0x31]);
689 encoding.insert(String::from("2"), vec![0x32]);
690 encoding.insert(String::from("3"), vec![0x33]);
691 encoding.insert(String::from("4"), vec![0x34]);
692 encoding.insert(String::from("5"), vec![0x35]);
693 encoding.insert(String::from("6"), vec![0x36]);
694 encoding.insert(String::from("7"), vec![0x37]);
695 encoding.insert(String::from("8"), vec![0x38]);
696 encoding.insert(String::from("9"), vec![0x39]);
697 encoding.insert(String::from("a"), vec![0x61]);
698 encoding.insert(String::from("b"), vec![0x62]);
699 encoding.insert(String::from("c"), vec![0x63]);
700 encoding.insert(String::from("d"), vec![0x64]);
701 encoding.insert(String::from("e"), vec![0x65]);
702 encoding.insert(String::from("f"), vec![0x66]);
703
704 Alphabet {
707 encoding: encoding
708 }
709 }
710
711
712 pub fn extended_ascii_encoding(&mut self) -> Self {
720 let mut encoding = BiBTreeMap::new();
721 encoding.insert(String::from("\x00"), vec![0x00]);
722 encoding.insert(String::from("\x01"), vec![0x01]);
723 encoding.insert(String::from("\x02"), vec![0x02]);
724 encoding.insert(String::from("\x03"), vec![0x03]);
725 encoding.insert(String::from("\x04"), vec![0x04]);
726 encoding.insert(String::from("\x05"), vec![0x05]);
727 encoding.insert(String::from("\x06"), vec![0x06]);
728 encoding.insert(String::from("\x07"), vec![0x07]);
729 encoding.insert(String::from("\x08"), vec![0x08]);
730 encoding.insert(String::from("\x09"), vec![0x09]);
731 encoding.insert(String::from("\x0a"), vec![0x0a]);
732 encoding.insert(String::from("\x0b"), vec![0x0b]);
733 encoding.insert(String::from("\x0c"), vec![0x0c]);
734 encoding.insert(String::from("\x0d"), vec![0x0d]);
735 encoding.insert(String::from("\x0e"), vec![0x0e]);
736 encoding.insert(String::from("\x0f"), vec![0x0f]);
737 encoding.insert(String::from("\x10"), vec![0x10]);
738 encoding.insert(String::from("\x11"), vec![0x11]);
739 encoding.insert(String::from("\x12"), vec![0x12]);
740 encoding.insert(String::from("\x13"), vec![0x13]);
741 encoding.insert(String::from("\x14"), vec![0x14]);
742 encoding.insert(String::from("\x15"), vec![0x15]);
743 encoding.insert(String::from("\x16"), vec![0x16]);
744 encoding.insert(String::from("\x17"), vec![0x17]);
745 encoding.insert(String::from("\x18"), vec![0x18]);
746 encoding.insert(String::from("\x19"), vec![0x19]);
747 encoding.insert(String::from("\x1a"), vec![0x1a]);
748 encoding.insert(String::from("\x1b"), vec![0x1b]);
749 encoding.insert(String::from("\x1c"), vec![0x1c]);
750 encoding.insert(String::from("\x1d"), vec![0x1d]);
751 encoding.insert(String::from("\x1e"), vec![0x1e]);
752 encoding.insert(String::from("\x1f"), vec![0x1f]);
753 encoding.insert(String::from(" "), vec![0x20]);
754 encoding.insert(String::from("!"), vec![0x21]);
755 encoding.insert(String::from("\""), vec![0x22]);
756 encoding.insert(String::from("#"), vec![0x23]);
757 encoding.insert(String::from("$"), vec![0x24]);
758 encoding.insert(String::from("%"), vec![0x25]);
759 encoding.insert(String::from("&"), vec![0x26]);
760 encoding.insert(String::from("'"), vec![0x27]);
761 encoding.insert(String::from("("), vec![0x28]);
762 encoding.insert(String::from(")"), vec![0x29]);
763 encoding.insert(String::from("*"), vec![0x2a]);
764 encoding.insert(String::from("+"), vec![0x2b]);
765 encoding.insert(String::from(","), vec![0x2c]);
766 encoding.insert(String::from("-"), vec![0x2d]);
767 encoding.insert(String::from("."), vec![0x2e]);
768 encoding.insert(String::from("/"), vec![0x2f]);
769 encoding.insert(String::from("0"), vec![0x30]);
770 encoding.insert(String::from("1"), vec![0x31]);
771 encoding.insert(String::from("2"), vec![0x32]);
772 encoding.insert(String::from("3"), vec![0x33]);
773 encoding.insert(String::from("4"), vec![0x34]);
774 encoding.insert(String::from("5"), vec![0x35]);
775 encoding.insert(String::from("6"), vec![0x36]);
776 encoding.insert(String::from("7"), vec![0x37]);
777 encoding.insert(String::from("8"), vec![0x38]);
778 encoding.insert(String::from("9"), vec![0x39]);
779 encoding.insert(String::from(":"), vec![0x3a]);
780 encoding.insert(String::from(";"), vec![0x3b]);
781 encoding.insert(String::from("<"), vec![0x3c]);
782 encoding.insert(String::from("="), vec![0x3d]);
783 encoding.insert(String::from(">"), vec![0x3e]);
784 encoding.insert(String::from("?"), vec![0x3f]);
785 encoding.insert(String::from("@"), vec![0x40]);
786 encoding.insert(String::from("A"), vec![0x41]);
787 encoding.insert(String::from("B"), vec![0x42]);
788 encoding.insert(String::from("C"), vec![0x43]);
789 encoding.insert(String::from("D"), vec![0x44]);
790 encoding.insert(String::from("E"), vec![0x45]);
791 encoding.insert(String::from("F"), vec![0x46]);
792 encoding.insert(String::from("G"), vec![0x47]);
793 encoding.insert(String::from("H"), vec![0x48]);
794 encoding.insert(String::from("I"), vec![0x49]);
795 encoding.insert(String::from("J"), vec![0x4a]);
796 encoding.insert(String::from("K"), vec![0x4b]);
797 encoding.insert(String::from("L"), vec![0x4c]);
798 encoding.insert(String::from("M"), vec![0x4d]);
799 encoding.insert(String::from("N"), vec![0x4e]);
800 encoding.insert(String::from("O"), vec![0x4f]);
801 encoding.insert(String::from("P"), vec![0x50]);
802 encoding.insert(String::from("Q"), vec![0x51]);
803 encoding.insert(String::from("R"), vec![0x52]);
804 encoding.insert(String::from("S"), vec![0x53]);
805 encoding.insert(String::from("T"), vec![0x54]);
806 encoding.insert(String::from("U"), vec![0x55]);
807 encoding.insert(String::from("V"), vec![0x56]);
808 encoding.insert(String::from("W"), vec![0x57]);
809 encoding.insert(String::from("X"), vec![0x58]);
810 encoding.insert(String::from("Y"), vec![0x59]);
811 encoding.insert(String::from("Z"), vec![0x5a]);
812 encoding.insert(String::from("["), vec![0x5b]);
813 encoding.insert(String::from("\\"), vec![0x5c]);
814 encoding.insert(String::from("]"), vec![0x5d]);
815 encoding.insert(String::from("^"), vec![0x5e]);
816 encoding.insert(String::from("_"), vec![0x5f]);
817 encoding.insert(String::from("`"), vec![0x60]);
818 encoding.insert(String::from("a"), vec![0x61]);
819 encoding.insert(String::from("b"), vec![0x62]);
820 encoding.insert(String::from("c"), vec![0x63]);
821 encoding.insert(String::from("d"), vec![0x64]);
822 encoding.insert(String::from("e"), vec![0x65]);
823 encoding.insert(String::from("f"), vec![0x66]);
824 encoding.insert(String::from("g"), vec![0x67]);
825 encoding.insert(String::from("h"), vec![0x68]);
826 encoding.insert(String::from("i"), vec![0x69]);
827 encoding.insert(String::from("j"), vec![0x6a]);
828 encoding.insert(String::from("k"), vec![0x6b]);
829 encoding.insert(String::from("l"), vec![0x6c]);
830 encoding.insert(String::from("m"), vec![0x6d]);
831 encoding.insert(String::from("n"), vec![0x6e]);
832 encoding.insert(String::from("o"), vec![0x6f]);
833 encoding.insert(String::from("p"), vec![0x70]);
834 encoding.insert(String::from("q"), vec![0x71]);
835 encoding.insert(String::from("r"), vec![0x72]);
836 encoding.insert(String::from("s"), vec![0x73]);
837 encoding.insert(String::from("t"), vec![0x74]);
838 encoding.insert(String::from("u"), vec![0x75]);
839 encoding.insert(String::from("v"), vec![0x76]);
840 encoding.insert(String::from("w"), vec![0x77]);
841 encoding.insert(String::from("x"), vec![0x78]);
842 encoding.insert(String::from("y"), vec![0x79]);
843 encoding.insert(String::from("z"), vec![0x7a]);
844 encoding.insert(String::from("{"), vec![0x7b]);
845 encoding.insert(String::from("|"), vec![0x7c]);
846 encoding.insert(String::from("}"), vec![0x7d]);
847 encoding.insert(String::from("~"), vec![0x7e]);
848 encoding.insert(String::from("\x7f"), vec![0x7f]);
849 encoding.insert(String::from("€"), vec![0x80]);self.encoding = encoding.clone();
853
854 Alphabet {
855 encoding: encoding
856 }
857 }
858
859 pub fn get_encoding(&self) -> Vec<Encoding> {
860 self.encoding.iter()
861 .map(|(str, bytes)| Encoding { str: str.clone(), bytes: bytes.clone() })
862 .collect_vec()
863 }
864
865 pub fn decode(&self, encoded: Vec<u8>) -> Vec<Encoding> {
885 let mut alway_iterate = 0;
886 let mut iterate_foreach_character_decoded = 0;
887 let mut out: Vec<Encoding> = vec![];
888 while iterate_foreach_character_decoded < encoded.len() {
889 let part: Vec<u8> = encoded[iterate_foreach_character_decoded..alway_iterate].to_vec();
890 match self.encoding.contains_right(&part) {
891 true => {
892 let decoded = self.encoding.get_by_right(&part);
893 out.push(Encoding{str: String::from(decoded.unwrap()),
894 bytes: part});
895 iterate_foreach_character_decoded += 1;
896 },
897 false => {
898
899 }
900 }
901 alway_iterate += 1;
902 }
903
904 out
905 }
906}
907
908