1#![allow(missing_docs)]
10#![allow(unused_must_use)]
11#![allow(dead_code)]
12#![allow(unused_imports)]
13#![allow(non_snake_case)]
14
15
16pub fn main()
23{
24 des_quick_start_main();
25 des_basic_operation_main();
26 des_encrypt_decrypt_u64_array_u64_main();
27}
28
29fn des_quick_start_main()
30{
31 des_quick_start_instantiation_with_key();
32 des_quick_start_instantiation_without_key();
33 des_quick_start_encryption_decryption_16_rounds();
34 des_quick_start_encryption_decryption_256_rounds();
35}
36
37fn des_quick_start_instantiation_with_key()
38{
39 println!("des_quick_start_instantiation_with_key()");
40 use cryptocol::symmetric::DES;
41
42 let key = 0x_1234567890ABCDEF_u64;
43 let mut _a_des = DES::new_with_key_u64(key);
44
45 let key = [0xEFu8, 0xCDu8, 0xABu8, 0x90u8, 0x78u8, 0x56u8, 0x34u8, 0x12u8];
46 let mut _a_des = DES::new_with_key(key);
47 println!("-------------------------------");
48}
49
50fn des_quick_start_instantiation_without_key()
51{
52 println!("des_quick_start_instantiation_without_key()");
53 use cryptocol::symmetric::DES;
54
55 let mut a_des = DES::new();
56 let key = 0x_1234567890ABCDEF_u64;
57 a_des.set_key_u64(key);
58
59 let mut a_des = DES::new();
60 let key = [0xEFu8, 0xCDu8, 0xABu8, 0x90u8, 0x78u8, 0x56u8, 0x34u8, 0x12u8];
61 a_des.set_key(key);
62 println!("-------------------------------");
63}
64
65fn des_quick_start_encryption_decryption_16_rounds()
66{
67 println!("des_quick_start_encryption_decryption_16_rounds()");
68 use std::io::Write;
69 use std::fmt::Write as _;
70 use cryptocol::symmetric::{ CBC_PKCS7, DES };
71
72 let mut a_des = DES::new_with_key([0xEFu8, 0xCDu8, 0xABu8, 0x90u8, 0x78u8, 0x56u8, 0x34u8, 0x12u8]);
73 let message = "In the beginning God created the heavens and the earth.";
74 println!("M =\t{}", message);
75 let iv = 0x_FEDCBA0987654321_u64;
76 println!("IV =\t{}", iv);
77 let mut cipher = Vec::<u8>::new();
78 a_des.encrypt_str_into_vec(iv, message, &mut cipher);
79 print!("C =\t");
80 for c in cipher.clone()
81 { print!("{:02X} ", c); }
82 println!();
83 let mut txt = String::new();
84 for c in cipher.clone()
85 { write!(txt, "{:02X} ", c); }
86 assert_eq!(txt, "4B B5 ED DC A0 58 7E 6D 6C 3B A2 00 38 C3 D4 29 42 B1 CF 0D E9 FA EA 11 11 6B C8 30 73 39 DD B7 3F 96 9B A3 76 05 34 7E 64 2F D4 CC B2 68 33 64 C5 9E EF 01 A9 4A FD 5B ");
87
88 let mut recovered = String::new();
89 a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
90 println!("B (16 rounds) =\t{}", recovered);
91 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
92 assert_eq!(recovered, message);
93 println!("-------------------------------");
94}
95
96fn des_quick_start_encryption_decryption_256_rounds()
97{
98 println!("des_quick_start_encryption_decryption_256_rounds()");
99 use std::io::Write;
100 use std::fmt::Write as _;
101 use cryptocol::symmetric::{ CBC_PKCS7, DES_Expanded };
102
103 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key([0xEFu8, 0xCDu8, 0xABu8, 0x90u8, 0x78u8, 0x56u8, 0x34u8, 0x12u8]);
104 let message = "In the beginning God created the heavens and the earth.";
105 println!("M =\t{}", message);
106 let iv = 0x_FEDCBA0987654321_u64;
107 println!("IV =\t{}", iv);
108 let mut cipher = Vec::<u8>::new();
109 a_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher);
110 print!("C =\t");
111 for c in cipher.clone()
112 { print!("{:02X} ", c); }
113 println!();
114 let mut txt = String::new();
115 for c in cipher.clone()
116 { write!(txt, "{:02X} ", c); }
117 assert_eq!(txt, "0B EA 6B BC 68 F9 B0 3E 7D AF DE 71 9C 08 AA 16 42 40 1C C8 DC 40 51 C6 8D D4 E7 D2 0B A4 F2 09 02 02 C2 6E 99 BC 9E 2A F4 11 7E 48 A7 ED 76 70 C6 9D C6 BD A6 9B 58 8B ");
118
119 let mut recovered = String::new();
120 a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
121 println!("B =\t{}", recovered);
122 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
123 assert_eq!(recovered, message);
124 println!("-------------------------------");
125}
126
127fn des_basic_operation_main()
128{
129 des_new();
130 des_new_with_key();
131 des_new_with_key_u64();
132 des_encryptor_with_key();
133 des_encryptor_with_key_u64();
134 des_decryptor_with_key();
135 des_decryptor_with_key_u64();
136 des_get_key();
137 des_get_key_u64();
138 des_set_key();
139 des_set_key_u64();
140 des_turn_inverse();
141 des_turn_encryptor();
142 des_turn_decryptor();
143}
144
145fn des_new()
146{
147 println!("des_new()");
148 use cryptocol::symmetric::DES;
149
150 let mut des = DES::new(); let plaintext = 0x1234567890ABCDEF_u64;
152 let ciphertext = des.encrypt_u64(plaintext);
153
154 println!("Plaintext:\t\t{:#018X}", plaintext);
155 println!("Ciphertext:\t\t{:#018X}", ciphertext);
156 assert_eq!(ciphertext, 0x1E32B46B44C69201_u64);
157
158 let cipher_cipher_text = des.encrypt_u64(ciphertext);
159 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
160 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
161 assert_eq!(cipher_cipher_text, plaintext); #[cfg(test)]
164 des_compile_fail_new();
165 println!("-------------------------------");
166}
167
168#[test]
169fn des_compile_fail_new()
170{
171 use cryptocol::symmetric::DES;
172 let des = DES::new();
173 #[cfg(compile_fail)] des.encrypt_u64(0x1E32B46B44C69201_u64);
175}
176
177fn des_new_with_key()
178{
179 println!("des_new_with_key()");
180 use cryptocol::symmetric::DES;
181
182 let mut des = DES::new_with_key([0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
184 let plaintext = 0x1234567890ABCDEF_u64;
185 let ciphertext = des.encrypt_u64(plaintext);
186
187 println!("Plaintext:\t\t{:#018X}", plaintext);
188 println!("Ciphertext:\t\t{:#018X}", ciphertext);
189 assert_eq!(ciphertext, 0x3B6041D76AF28F23_u64);
190
191 let cipher_cipher_text = des.encrypt_u64(ciphertext);
192 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
193 assert_eq!(cipher_cipher_text, 0x7C5AAE491DC1310D_u64);
194 assert_ne!(cipher_cipher_text, plaintext);
195 println!();
196
197 let mut des1 = DES::new_with_key([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
201 let mut des2 = DES::new_with_key([0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01]);
202
203 let plaintext = 0x1234567890ABCDEF_u64;
204 let ciphertext1 = des1.encrypt_u64(plaintext);
205 let ciphertext2 = des2.encrypt_u64(plaintext);
206
207 println!("Plaintext:\t\t{:#018X}", plaintext);
208 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
209 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
210 assert_eq!(ciphertext1, 0x1E32B46B44C69201_u64);
211 assert_eq!(ciphertext2, 0x1E32B46B44C69201_u64);
212 assert_eq!(ciphertext1, ciphertext2);
213
214 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
215 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
216 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
217 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
218 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
219 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
220 assert_eq!(cipher_cipher_text1, plaintext);
221 assert_eq!(cipher_cipher_text2, plaintext);
222 println!();
223 let mut des1 = DES::new_with_key([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
231 let mut des2 = DES::new_with_key([0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE]);
232 let plaintext = 0x1234567890ABCDEF_u64;
233 let ciphertext1 = des1.encrypt_u64(plaintext);
234 let ciphertext2 = des2.encrypt_u64(plaintext);
235
236 println!("Plaintext:\t\t{:#018X}", plaintext);
237 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
238 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
239 assert_eq!(ciphertext1, 0xA5997AB38BC07250_u64);
240 assert_eq!(ciphertext2, 0xA5997AB38BC07250_u64);
241 assert_eq!(ciphertext1, ciphertext2);
242
243 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
244 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
245 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
246 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
247 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
248 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
249 assert_eq!(cipher_cipher_text1, plaintext);
250 assert_eq!(cipher_cipher_text2, plaintext);
251 println!();
252 let mut des1 = DES::new_with_key([0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1]);
259 let mut des2 = DES::new_with_key([0xE1, 0xE1, 0xE1, 0xE1, 0xF0, 0xF0, 0xF0, 0xF0]);
260 let plaintext = 0x1234567890ABCDEF_u64;
261 let ciphertext1 = des1.encrypt_u64(plaintext);
262 let ciphertext2 = des2.encrypt_u64(plaintext);
263
264 println!("Plaintext:\t\t{:#018X}", plaintext);
265 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
266 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
267 assert_eq!(ciphertext1, 0x94CCA0201F033101_u64);
268 assert_eq!(ciphertext2, 0x94CCA0201F033101_u64);
269 assert_eq!(ciphertext1, ciphertext2);
270
271 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
272 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
273 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
274 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
275 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
276 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
277 assert_eq!(cipher_cipher_text1, plaintext);
278 assert_eq!(cipher_cipher_text2, plaintext);
279 println!();
280 let mut des1 = DES::new_with_key([0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E]);
287 let mut des2 = DES::new_with_key([0x1E, 0x1E, 0x1E, 0x1E, 0x0F, 0x0F, 0x0F, 0x0F]);
288 let plaintext = 0x1234567890ABCDEF_u64;
289 let ciphertext1 = des1.encrypt_u64(plaintext);
290 let ciphertext2 = des2.encrypt_u64(plaintext);
291
292 println!("Plaintext:\t\t{:#018X}", plaintext);
293 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
294 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
295 assert_eq!(ciphertext1, 0x4FB6397B5352DB0C_u64);
296 assert_eq!(ciphertext2, 0x4FB6397B5352DB0C_u64);
297 assert_eq!(ciphertext1, ciphertext2);
298
299 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
300 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
301 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
302 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
303 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
304 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
305 assert_eq!(cipher_cipher_text1, plaintext);
306 assert_eq!(cipher_cipher_text2, plaintext);
307 println!();
308 let mut des1 = DES::new_with_key([0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E]);
313 let mut des2 = DES::new_with_key([0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01]);
314
315 let plaintext = 0x1234567890ABCDEF_u64;
316 let ciphertext = des1.encrypt_u64(plaintext);
317 println!("Plaintext:\t\t{:#018X}", plaintext);
318 println!("Ciphertext:\t\t{:#018X}", ciphertext);
319 assert_eq!(ciphertext, 0xC2C71D736E97876C_u64);
320
321 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
322 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
323 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
324 assert_eq!(cipher_cipher_text, plaintext);
325
326 let ciphertext = des2.encrypt_u64(plaintext);
327 println!("Plaintext:\t\t{:#018X}", plaintext);
328 println!("Ciphertext:\t\t{:#018X}", ciphertext);
329 assert_eq!(ciphertext, 0x063A6E55466423D2_u64);
330
331 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
332 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
333 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
334 assert_eq!(cipher_cipher_text, plaintext);
335 println!();
336 let mut des1 = DES::new_with_key([0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1]);
340 let mut des2 = DES::new_with_key([0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01]);
341
342 let plaintext = 0x1234567890ABCDEF_u64;
343 let ciphertext = des1.encrypt_u64(plaintext);
344 println!("Plaintext:\t\t{:#018X}", plaintext);
345 println!("Ciphertext:\t\t{:#018X}", ciphertext);
346 assert_eq!(ciphertext, 0x85A63690E79AAA15_u64);
347
348 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
349 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
350 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
351 assert_eq!(cipher_cipher_text, plaintext);
352
353 let ciphertext = des2.encrypt_u64(plaintext);
354 println!("Plaintext:\t\t{:#018X}", plaintext);
355 println!("Ciphertext:\t\t{:#018X}", ciphertext);
356 assert_eq!(ciphertext, 0x15B721BBB44A12F5_u64);
357
358 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
359 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
360 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
361 assert_eq!(cipher_cipher_text, plaintext);
362 println!();
363 let mut des1 = DES::new_with_key([0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE]);
367 let mut des2 = DES::new_with_key([0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01]);
368
369 let plaintext = 0x1234567890ABCDEF_u64;
370 let ciphertext = des1.encrypt_u64(plaintext);
371 println!("Plaintext:\t\t{:#018X}", plaintext);
372 println!("Ciphertext:\t\t{:#018X}", ciphertext);
373 assert_eq!(ciphertext, 0xAE38CC9D9FA48581_u64);
374
375 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
376 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
377 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
378 assert_eq!(cipher_cipher_text, plaintext);
379
380 let ciphertext = des2.encrypt_u64(plaintext);
381 println!("Plaintext:\t\t{:#018X}", plaintext);
382 println!("Ciphertext:\t\t{:#018X}", ciphertext);
383 assert_eq!(ciphertext, 0x7EE95658A653960D_u64);
384
385 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
386 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
387 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
388 assert_eq!(cipher_cipher_text, plaintext);
389 println!();
390 let mut des1 = DES::new_with_key([0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1]);
394 let mut des2 = DES::new_with_key([0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E]);
395
396 let plaintext = 0x1234567890ABCDEF_u64;
397 let ciphertext = des1.encrypt_u64(plaintext);
398 println!("Plaintext:\t\t{:#018X}", plaintext);
399 println!("Ciphertext:\t\t{:#018X}", ciphertext);
400 assert_eq!(ciphertext, 0x81ECC05B173F793E_u64);
401
402 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
403 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
404 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
405 assert_eq!(cipher_cipher_text, plaintext);
406
407 let ciphertext = des2.encrypt_u64(plaintext);
408 println!("Plaintext:\t\t{:#018X}", plaintext);
409 println!("Ciphertext:\t\t{:#018X}", ciphertext);
410 assert_eq!(ciphertext, 0x4D0AD4DC147E4BDF_u64);
411
412 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
413 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
414 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
415 assert_eq!(cipher_cipher_text, plaintext);
416 println!();
417 let mut des1 = DES::new_with_key([0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE]);
421 let mut des2 = DES::new_with_key([0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E]);
422
423 let plaintext = 0x1234567890ABCDEF_u64;
424 let ciphertext = des1.encrypt_u64(plaintext);
425 println!("Plaintext:\t\t{:#018X}", plaintext);
426 println!("Ciphertext:\t\t{:#018X}", ciphertext);
427 assert_eq!(ciphertext, 0x59735490F84A0AD0_u64);
428
429 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
430 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
431 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
432 assert_eq!(cipher_cipher_text, plaintext);
433
434 let ciphertext = des2.encrypt_u64(plaintext);
435 println!("Plaintext:\t\t{:#018X}", plaintext);
436 println!("Ciphertext:\t\t{:#018X}", ciphertext);
437 assert_eq!(ciphertext, 0x79FD3CBFE57F4B0B_u64);
438
439 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
440 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
441 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
442 assert_eq!(cipher_cipher_text, plaintext);
443 println!();
444 let mut des1 = DES::new_with_key([0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE]);
448 let mut des2 = DES::new_with_key([0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1]);
449
450 let plaintext = 0x1234567890ABCDEF_u64;
451 let ciphertext = des1.encrypt_u64(plaintext);
452 println!("Plaintext:\t\t{:#018X}", plaintext);
453 println!("Ciphertext:\t\t{:#018X}", ciphertext);
454 assert_eq!(ciphertext, 0x27C83AAE29571889_u64);
455
456 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
457 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
458 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
459 assert_eq!(cipher_cipher_text, plaintext);
460
461 let ciphertext = des2.encrypt_u64(plaintext);
462 println!("Plaintext:\t\t{:#018X}", plaintext);
463 println!("Ciphertext:\t\t{:#018X}", ciphertext);
464 assert_eq!(ciphertext, 0xDE76DF630C033919_u64);
465
466 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
467 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
468 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
469 assert_eq!(cipher_cipher_text, plaintext);
470 #[cfg(test)]
473 des_compile_fail_new_with_key();
474 println!("-------------------------------");
475}
476
477#[test]
478fn des_compile_fail_new_with_key()
479{
480 use cryptocol::symmetric::DES;
481 let des = DES::new_with_key([0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
482 #[cfg(compile_fail)] des.encrypt_u64(0x1E32B46B44C69201_u64);
484}
485
486fn des_new_with_key_u64()
487{
488 println!("des_new_with_key_u64");
489 use cryptocol::symmetric::DES;
490
491 let mut des = DES::new_with_key_u64(0xEFCDAB9078563412);
493 let plaintext = 0x1234567890ABCDEF_u64;
494 let ciphertext = des.encrypt_u64(plaintext);
495
496 println!("Plaintext:\t\t{:#018X}", plaintext);
497 println!("Ciphertext:\t\t{:#018X}", ciphertext);
498 assert_eq!(ciphertext, 0x3B6041D76AF28F23_u64);
499
500 let cipher_cipher_text = des.encrypt_u64(ciphertext);
501 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
502 assert_eq!(cipher_cipher_text, 0x7C5AAE491DC1310D_u64);
503 assert_ne!(cipher_cipher_text, plaintext);
504 println!();
505
506 let mut des1 = DES::new_with_key_u64(0x0000000000000000);
509 let mut des2 = DES::new_with_key_u64(0x0101010101010101);
510
511 let plaintext = 0x1234567890ABCDEF_u64;
512 let ciphertext1 = des1.encrypt_u64(plaintext);
513 let ciphertext2 = des2.encrypt_u64(plaintext);
514
515 println!("Plaintext:\t\t{:#018X}", plaintext);
516 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
517 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
518 assert_eq!(ciphertext1, 0x1E32B46B44C69201_u64);
519 assert_eq!(ciphertext2, 0x1E32B46B44C69201_u64);
520 assert_eq!(ciphertext1, ciphertext2);
521
522 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
523 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
524 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
525 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
526 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
527 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
528 assert_eq!(cipher_cipher_text1, plaintext);
529 assert_eq!(cipher_cipher_text2, plaintext);
530 println!();
531 let mut des1 = DES::new_with_key_u64(0xFFFFFFFFFFFFFFFF);
536 let mut des2 = DES::new_with_key_u64(0xFEFEFEFEFEFEFEFE);
537 let plaintext = 0x1234567890ABCDEF_u64;
538 let ciphertext1 = des1.encrypt_u64(plaintext);
539 let ciphertext2 = des2.encrypt_u64(plaintext);
540
541 println!("Plaintext:\t\t{:#018X}", plaintext);
542 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
543 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
544 assert_eq!(ciphertext1, 0xA5997AB38BC07250_u64);
545 assert_eq!(ciphertext2, 0xA5997AB38BC07250_u64);
546 assert_eq!(ciphertext1, ciphertext2);
547
548 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
549 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
550 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
551 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
552 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
553 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
554 assert_eq!(cipher_cipher_text1, plaintext);
555 assert_eq!(cipher_cipher_text2, plaintext);
556 println!();
557 let mut des1 = DES::new_with_key_u64(0xF1F1F1F1E0E0E0E0);
562 let mut des2 = DES::new_with_key_u64(0xF0F0F0F0E1E1E1E1);
563 let plaintext = 0x1234567890ABCDEF_u64;
564 let ciphertext1 = des1.encrypt_u64(plaintext);
565 let ciphertext2 = des2.encrypt_u64(plaintext);
566
567 println!("Plaintext:\t\t{:#018X}", plaintext);
568 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
569 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
570 assert_eq!(ciphertext1, 0x94CCA0201F033101_u64);
571 assert_eq!(ciphertext2, 0x94CCA0201F033101_u64);
572 assert_eq!(ciphertext1, ciphertext2);
573
574 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
575 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
576 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
577 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
578 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
579 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
580 assert_eq!(cipher_cipher_text1, plaintext);
581 assert_eq!(cipher_cipher_text2, plaintext);
582 println!();
583 let mut des1 = DES::new_with_key_u64(0x0E0E0E0E1F1F1F1F);
588 let mut des2 = DES::new_with_key_u64(0x0F0F0F0F1E1E1E1E);
589 let plaintext = 0x1234567890ABCDEF_u64;
590 let ciphertext1 = des1.encrypt_u64(plaintext);
591 let ciphertext2 = des2.encrypt_u64(plaintext);
592
593 println!("Plaintext:\t\t{:#018X}", plaintext);
594 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
595 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
596 assert_eq!(ciphertext1, 0x4FB6397B5352DB0C_u64);
597 assert_eq!(ciphertext2, 0x4FB6397B5352DB0C_u64);
598 assert_eq!(ciphertext1, ciphertext2);
599
600 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
601 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
602 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
603 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
604 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
605 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
606 assert_eq!(cipher_cipher_text1, plaintext);
607 assert_eq!(cipher_cipher_text2, plaintext);
608 println!();
609 let mut des1 = DES::new_with_key_u64(0x0E010E011F011F01);
613 let mut des2 = DES::new_with_key_u64(0x010E010E011F011F);
614
615 let plaintext = 0x1234567890ABCDEF_u64;
616 let ciphertext = des1.encrypt_u64(plaintext);
617 println!("Plaintext:\t\t{:#018X}", plaintext);
618 println!("Ciphertext:\t\t{:#018X}", ciphertext);
619 assert_eq!(ciphertext, 0xC2C71D736E97876C_u64);
620
621 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
622 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
623 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
624 assert_eq!(cipher_cipher_text, plaintext);
625
626 let ciphertext = des2.encrypt_u64(plaintext);
627 println!("Plaintext:\t\t{:#018X}", plaintext);
628 println!("Ciphertext:\t\t{:#018X}", ciphertext);
629 assert_eq!(ciphertext, 0x063A6E55466423D2_u64);
630
631 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
632 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
633 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
634 assert_eq!(cipher_cipher_text, plaintext);
635 println!();
636 let mut des1 = DES::new_with_key_u64(0xF101F101E001E001);
640 let mut des2 = DES::new_with_key_u64(0x01F101F101E001E0);
641
642 let plaintext = 0x1234567890ABCDEF_u64;
643 let ciphertext = des1.encrypt_u64(plaintext);
644 println!("Plaintext:\t\t{:#018X}", plaintext);
645 println!("Ciphertext:\t\t{:#018X}", ciphertext);
646 assert_eq!(ciphertext, 0x85A63690E79AAA15_u64);
647
648 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
649 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
650 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
651 assert_eq!(cipher_cipher_text, plaintext);
652
653 let ciphertext = des2.encrypt_u64(plaintext);
654 println!("Plaintext:\t\t{:#018X}", plaintext);
655 println!("Ciphertext:\t\t{:#018X}", ciphertext);
656 assert_eq!(ciphertext, 0x15B721BBB44A12F5_u64);
657
658 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
659 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
660 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
661 assert_eq!(cipher_cipher_text, plaintext);
662 println!();
663 let mut des1 = DES::new_with_key_u64(0xFE01FE01FE01FE01);
667 let mut des2 = DES::new_with_key_u64(0x01FE01FE01FE01FE);
668
669 let plaintext = 0x1234567890ABCDEF_u64;
670 let ciphertext = des1.encrypt_u64(plaintext);
671 println!("Plaintext:\t\t{:#018X}", plaintext);
672 println!("Ciphertext:\t\t{:#018X}", ciphertext);
673 assert_eq!(ciphertext, 0xAE38CC9D9FA48581_u64);
674
675 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
676 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
677 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
678 assert_eq!(cipher_cipher_text, plaintext);
679
680 let ciphertext = des2.encrypt_u64(plaintext);
681 println!("Plaintext:\t\t{:#018X}", plaintext);
682 println!("Ciphertext:\t\t{:#018X}", ciphertext);
683 assert_eq!(ciphertext, 0x7EE95658A653960D_u64);
684
685 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
686 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
687 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
688 assert_eq!(cipher_cipher_text, plaintext);
689 println!();
690 let mut des1 = DES::new_with_key_u64(0xF10EF10EE01FE01F);
694 let mut des2 = DES::new_with_key_u64(0x0EF10EF11FE01FE0);
695
696 let plaintext = 0x1234567890ABCDEF_u64;
697 let ciphertext = des1.encrypt_u64(plaintext);
698 println!("Plaintext:\t\t{:#018X}", plaintext);
699 println!("Ciphertext:\t\t{:#018X}", ciphertext);
700 assert_eq!(ciphertext, 0x81ECC05B173F793E_u64);
701
702 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
703 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
704 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
705 assert_eq!(cipher_cipher_text, plaintext);
706
707 let ciphertext = des2.encrypt_u64(plaintext);
708 println!("Plaintext:\t\t{:#018X}", plaintext);
709 println!("Ciphertext:\t\t{:#018X}", ciphertext);
710 assert_eq!(ciphertext, 0x4D0AD4DC147E4BDF_u64);
711
712 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
713 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
714 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
715 assert_eq!(cipher_cipher_text, plaintext);
716 println!();
717 let mut des1 = DES::new_with_key_u64(0xFE0EFE0EFE1FFE1F);
721 let mut des2 = DES::new_with_key_u64(0x0EFE0EFE1FFE1FFE);
722
723 let plaintext = 0x1234567890ABCDEF_u64;
724 let ciphertext = des1.encrypt_u64(plaintext);
725 println!("Plaintext:\t\t{:#018X}", plaintext);
726 println!("Ciphertext:\t\t{:#018X}", ciphertext);
727 assert_eq!(ciphertext, 0x59735490F84A0AD0_u64);
728
729 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
730 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
731 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
732 assert_eq!(cipher_cipher_text, plaintext);
733
734 let ciphertext = des2.encrypt_u64(plaintext);
735 println!("Plaintext:\t\t{:#018X}", plaintext);
736 println!("Ciphertext:\t\t{:#018X}", ciphertext);
737 assert_eq!(ciphertext, 0x79FD3CBFE57F4B0B_u64);
738
739 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
740 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
741 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
742 assert_eq!(cipher_cipher_text, plaintext);
743 println!();
744 let mut des1 = DES::new_with_key_u64(0xFEF1FEF1FEE0FEE0);
748 let mut des2 = DES::new_with_key_u64(0xF1FEF1FEE0FEE0FE);
749
750 let plaintext = 0x1234567890ABCDEF_u64;
751 let ciphertext = des1.encrypt_u64(plaintext);
752 println!("Plaintext:\t\t{:#018X}", plaintext);
753 println!("Ciphertext:\t\t{:#018X}", ciphertext);
754 assert_eq!(ciphertext, 0x27C83AAE29571889_u64);
755
756 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
757 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
758 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
759 assert_eq!(cipher_cipher_text, plaintext);
760
761 let ciphertext = des2.encrypt_u64(plaintext);
762 println!("Plaintext:\t\t{:#018X}", plaintext);
763 println!("Ciphertext:\t\t{:#018X}", ciphertext);
764 assert_eq!(ciphertext, 0xDE76DF630C033919_u64);
765
766 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
767 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
768 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
769 assert_eq!(cipher_cipher_text, plaintext);
770 println!("-------------------------------");
772}
773
774fn des_encryptor_with_key()
775{
776 println!("des_encryptor_with_key");
777 use cryptocol::symmetric::{ DES, BigCryptor64, SmallCryptor };
778
779 let keys: [Box<dyn SmallCryptor<u64, 8>>; 3]
780 = [ Box::new(DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])),
781 Box::new(DES::decryptor_with_key([0x21_u8, 0x43, 0x65, 0x87, 0x09, 0xBA, 0xDC, 0xFE])),
782 Box::new(DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])) ];
783 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
784 let plaintext = 0x_1234567890ABCDEF_u64;
785 let ciphertext = tdes.encrypt_u64(plaintext);
786
787 println!("Plaintext:\t\t{:#018X}", plaintext);
788 println!("Ciphertext:\t\t{:#018X}", ciphertext);
789 assert_eq!(ciphertext, 0x272A2AC7B4E66748_u64);
790
791 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
792 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
793 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
794 assert_eq!(cipher_cipher_text, plaintext);
795 println!();
796
797 let mut tdes = BigCryptor64::new()
799 + DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])
800 - DES::encryptor_with_key([0x21_u8, 0x43, 0x65, 0x87, 0x09, 0xBA, 0xDC, 0xFE])
801 + DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12]);
802 let plaintext = 0x_1234567890ABCDEF_u64;
803 let ciphertext = tdes.encrypt_u64(plaintext);
804
805 println!("Plaintext:\t\t{:#018X}", plaintext);
806 println!("Ciphertext:\t\t{:#018X}", ciphertext);
807 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
808
809 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
810 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
811 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
812 assert_eq!(cipher_cipher_text, plaintext);
813 println!("-------------------------------");
814}
815
816fn des_encryptor_with_key_u64()
817{
818 println!("des_encryptor_with_key_u64");
819 use cryptocol::symmetric::{ BigCryptor64, DES };
820
821 let mut tdes = BigCryptor64::new_with_small_cryptor_array(
822 [Box::new(DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64)),
823 Box::new(DES::decryptor_with_key_u64(0x_FEDCBA0987654321_u64)),
824 Box::new(DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64))]
825 );
826 let plaintext = 0x_1234567890ABCDEF_u64;
827 let ciphertext = tdes.encrypt_u64(plaintext);
828
829 println!("Plaintext:\t\t{:#018X}", plaintext);
830 println!("Ciphertext:\t\t{:#018X}", ciphertext);
831 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
832
833 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
834 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
835 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
836 assert_eq!(cipher_cipher_text, plaintext);
837 println!();
838
839 let mut tdes = BigCryptor64::new()
841 + DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64)
842 - DES::encryptor_with_key_u64(0x_FEDCBA0987654321_u64)
843 + DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64);
844 let plaintext = 0x_1234567890ABCDEF_u64;
845 let ciphertext = tdes.encrypt_u64(plaintext);
846
847 println!("Plaintext:\t\t{:#018X}", plaintext);
848 println!("Ciphertext:\t\t{:#018X}", ciphertext);
849 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
850
851 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
852 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
853 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
854 assert_eq!(cipher_cipher_text, plaintext);
855 println!("-------------------------------");
856}
857
858fn des_decryptor_with_key()
859{
860 println!("des_decryptor_with_key_u64");
861 use cryptocol::symmetric::{ DES, BigCryptor64, SmallCryptor };
862
863 let keys: [Box<dyn SmallCryptor<u64, 8>>; 3]
864 = [ Box::new(DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])),
865 Box::new(DES::decryptor_with_key([0x21_u8, 0x43, 0x65, 0x87, 0x09, 0xBA, 0xDC, 0xFE])),
866 Box::new(DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])) ];
867 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
868 let plaintext = 0x_1234567890ABCDEF_u64;
869 let ciphertext = tdes.encrypt_u64(plaintext);
870
871 println!("Plaintext:\t\t{:#018X}", plaintext);
872 println!("Ciphertext:\t\t{:#018X}", ciphertext);
873 assert_eq!(ciphertext, 0x272A2AC7B4E66748_u64);
874
875 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
876 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
877 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
878 assert_eq!(cipher_cipher_text, plaintext);
879 println!();
880
881 let mut tdes = BigCryptor64::new()
883 - DES::decryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])
884 - DES::encryptor_with_key([0x21_u8, 0x43, 0x65, 0x87, 0x09, 0xBA, 0xDC, 0xFE])
885 - DES::decryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12]);
886 let plaintext = 0x_1234567890ABCDEF_u64;
887 let ciphertext = tdes.encrypt_u64(plaintext);
888
889 println!("Plaintext:\t\t{:#018X}", plaintext);
890 println!("Ciphertext:\t\t{:#018X}", ciphertext);
891 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
892
893 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
894 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
895 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
896 assert_eq!(cipher_cipher_text, plaintext);
897 println!("-------------------------------");
898}
899
900fn des_decryptor_with_key_u64()
901{
902 println!("des_decryptor_with_key_u64");
903 use cryptocol::symmetric::{ BigCryptor64, DES };
904
905 let mut tdes = BigCryptor64::new_with_small_cryptor_array(
906 [ Box::new(DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64)),
907 Box::new(DES::decryptor_with_key_u64(0x_FEDCBA0987654321_u64)),
908 Box::new(DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64)) ] );
909 let plaintext = 0x_1234567890ABCDEF_u64;
910 let ciphertext = tdes.encrypt_u64(plaintext);
911
912 println!("Plaintext:\t\t{:#018X}", plaintext);
913 println!("Ciphertext:\t\t{:#018X}", ciphertext);
914 assert_eq!(ciphertext, 0x272A2AC7B4E66748_u64);
915
916 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
917 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
918 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
919 assert_eq!(cipher_cipher_text, plaintext);
920 println!();
921
922
923 let mut tdes = BigCryptor64::new()
925 - DES::decryptor_with_key_u64(0x_1234567890ABCDEF_u64)
926 + DES::decryptor_with_key_u64(0x_FEDCBA0987654321_u64)
927 - DES::decryptor_with_key_u64(0x_1234567890ABCDEF_u64);
928 let plaintext = 0x_1234567890ABCDEF_u64;
929 let ciphertext = tdes.encrypt_u64(plaintext);
930
931 println!("Plaintext:\t\t{:#018X}", plaintext);
932 println!("Ciphertext:\t\t{:#018X}", ciphertext);
933 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
934
935 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
936 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
937 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
938 assert_eq!(cipher_cipher_text, plaintext);
939 println!("-------------------------------");
940}
941
942fn des_get_key()
943{
944 println!("des_get_key");
945 use cryptocol::symmetric::DES;
946
947 let mut des = DES::new();
948 des.set_key([0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
949 let key = des.get_key();
950 print!("K = ");
951 for k in key
952 { print!("{:#02X} ", k); }
953 assert_eq!(key, [0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
954}
955
956fn des_get_key_u64()
957{
958 println!("des_get_key_u64");
959 use cryptocol::symmetric::DES;
960
961 let mut des = DES::new();
962 des.set_key_u64(0xEFCDAB9078563412);
963 let key = des.get_key_u64();
964 println!("Key = {}", key);
965 assert_eq!(key, 0xEFCDAB9078563412_u64);
966}
967
968fn des_set_key()
969{
970 println!("des_set_key");
971 use cryptocol::symmetric::DES;
972
973 let mut des = DES::new();
975 des.set_key([0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
976 let plaintext = 0x1234567890ABCDEF_u64;
977 let ciphertext = des.encrypt_u64(plaintext);
978
979 println!("Plaintext:\t\t{:#018X}", plaintext);
980 println!("Ciphertext:\t\t{:#018X}", ciphertext);
981 assert_eq!(ciphertext, 0x3B6041D76AF28F23_u64);
982
983 let cipher_cipher_text = des.encrypt_u64(ciphertext);
984 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
985 assert_eq!(cipher_cipher_text, 0x7C5AAE491DC1310D_u64);
986 assert_ne!(cipher_cipher_text, plaintext);
987 println!();
988
989 let mut des1 = DES::new();
993 let mut des2 = DES::new();
994 des1.set_key([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
995 des2.set_key([0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01]);
996
997 let plaintext = 0x1234567890ABCDEF_u64;
998 let ciphertext1 = des1.encrypt_u64(plaintext);
999 let ciphertext2 = des2.encrypt_u64(plaintext);
1000
1001 println!("Plaintext:\t\t{:#018X}", plaintext);
1002 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
1003 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
1004 assert_eq!(ciphertext1, 0x1E32B46B44C69201_u64);
1005 assert_eq!(ciphertext2, 0x1E32B46B44C69201_u64);
1006 assert_eq!(ciphertext1, ciphertext2);
1007
1008 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1009 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1010 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
1011 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
1012 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1013 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1014 assert_eq!(cipher_cipher_text1, plaintext);
1015 assert_eq!(cipher_cipher_text2, plaintext);
1016 println!();
1017 let mut des1 = DES::new();
1025 let mut des2 = DES::new();
1026 des1.set_key([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
1027 des2.set_key([0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE]);
1028 let plaintext = 0x1234567890ABCDEF_u64;
1029 let ciphertext1 = des1.encrypt_u64(plaintext);
1030 let ciphertext2 = des2.encrypt_u64(plaintext);
1031
1032 println!("Plaintext:\t\t{:#018X}", plaintext);
1033 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
1034 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
1035 assert_eq!(ciphertext1, 0xA5997AB38BC07250_u64);
1036 assert_eq!(ciphertext2, 0xA5997AB38BC07250_u64);
1037 assert_eq!(ciphertext1, ciphertext2);
1038
1039 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1040 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1041 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
1042 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
1043 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1044 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1045 assert_eq!(cipher_cipher_text1, plaintext);
1046 assert_eq!(cipher_cipher_text2, plaintext);
1047 println!();
1048 let mut des1 = DES::new();
1055 let mut des2 = DES::new();
1056 des1.set_key([0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1]);
1057 des2.set_key([0xE1, 0xE1, 0xE1, 0xE1, 0xF0, 0xF0, 0xF0, 0xF0]);
1058 let plaintext = 0x1234567890ABCDEF_u64;
1059 let ciphertext1 = des1.encrypt_u64(plaintext);
1060 let ciphertext2 = des2.encrypt_u64(plaintext);
1061
1062 println!("Plaintext:\t\t{:#018X}", plaintext);
1063 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
1064 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
1065 assert_eq!(ciphertext1, 0x94CCA0201F033101_u64);
1066 assert_eq!(ciphertext2, 0x94CCA0201F033101_u64);
1067 assert_eq!(ciphertext1, ciphertext2);
1068
1069 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1070 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1071 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
1072 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
1073 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1074 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1075 assert_eq!(cipher_cipher_text1, plaintext);
1076 assert_eq!(cipher_cipher_text2, plaintext);
1077 println!();
1078 let mut des1 = DES::new();
1085 let mut des2 = DES::new();
1086 des1.set_key([0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E]);
1087 des2.set_key([0x1E, 0x1E, 0x1E, 0x1E, 0x0F, 0x0F, 0x0F, 0x0F]);
1088 let plaintext = 0x1234567890ABCDEF_u64;
1089 let ciphertext1 = des1.encrypt_u64(plaintext);
1090 let ciphertext2 = des2.encrypt_u64(plaintext);
1091
1092 println!("Plaintext:\t\t{:#018X}", plaintext);
1093 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
1094 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
1095 assert_eq!(ciphertext1, 0x4FB6397B5352DB0C_u64);
1096 assert_eq!(ciphertext2, 0x4FB6397B5352DB0C_u64);
1097 assert_eq!(ciphertext1, ciphertext2);
1098
1099 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1100 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1101 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
1102 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
1103 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1104 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1105 assert_eq!(cipher_cipher_text1, plaintext);
1106 assert_eq!(cipher_cipher_text2, plaintext);
1107 println!();
1108 let mut des1 = DES::new();
1113 let mut des2 = DES::new();
1114 des1.set_key([0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E]);
1115 des2.set_key([0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01]);
1116
1117 let plaintext = 0x1234567890ABCDEF_u64;
1118 let ciphertext = des1.encrypt_u64(plaintext);
1119 println!("Plaintext:\t\t{:#018X}", plaintext);
1120 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1121 assert_eq!(ciphertext, 0xC2C71D736E97876C_u64);
1122
1123 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1124 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1125 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1126 assert_eq!(cipher_cipher_text, plaintext);
1127
1128 let ciphertext = des2.encrypt_u64(plaintext);
1129 println!("Plaintext:\t\t{:#018X}", plaintext);
1130 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1131 assert_eq!(ciphertext, 0x063A6E55466423D2_u64);
1132
1133 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1134 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1135 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1136 assert_eq!(cipher_cipher_text, plaintext);
1137 println!();
1138 let mut des1 = DES::new();
1143 let mut des2 = DES::new();
1144 des1.set_key([0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1]);
1145 des2.set_key([0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01]);
1146
1147 let plaintext = 0x1234567890ABCDEF_u64;
1148 let ciphertext = des1.encrypt_u64(plaintext);
1149 println!("Plaintext:\t\t{:#018X}", plaintext);
1150 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1151 assert_eq!(ciphertext, 0x85A63690E79AAA15_u64);
1152
1153 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1154 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1155 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1156 assert_eq!(cipher_cipher_text, plaintext);
1157
1158 let ciphertext = des2.encrypt_u64(plaintext);
1159 println!("Plaintext:\t\t{:#018X}", plaintext);
1160 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1161 assert_eq!(ciphertext, 0x15B721BBB44A12F5_u64);
1162
1163 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1164 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1165 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1166 assert_eq!(cipher_cipher_text, plaintext);
1167 println!();
1168 let mut des1 = DES::new();
1173 let mut des2 = DES::new();
1174 des1.set_key([0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE]);
1175 des2.set_key([0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01]);
1176
1177 let plaintext = 0x1234567890ABCDEF_u64;
1178 let ciphertext = des1.encrypt_u64(plaintext);
1179 println!("Plaintext:\t\t{:#018X}", plaintext);
1180 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1181 assert_eq!(ciphertext, 0xAE38CC9D9FA48581_u64);
1182
1183 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1184 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1185 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1186 assert_eq!(cipher_cipher_text, plaintext);
1187
1188 let ciphertext = des2.encrypt_u64(plaintext);
1189 println!("Plaintext:\t\t{:#018X}", plaintext);
1190 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1191 assert_eq!(ciphertext, 0x7EE95658A653960D_u64);
1192
1193 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1194 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1195 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1196 assert_eq!(cipher_cipher_text, plaintext);
1197 println!();
1198 let mut des1 = DES::new();
1203 let mut des2 = DES::new();
1204 des1.set_key([0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1]);
1205 des2.set_key([0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E]);
1206
1207 let plaintext = 0x1234567890ABCDEF_u64;
1208 let ciphertext = des1.encrypt_u64(plaintext);
1209 println!("Plaintext:\t\t{:#018X}", plaintext);
1210 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1211 assert_eq!(ciphertext, 0x81ECC05B173F793E_u64);
1212
1213 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1214 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1215 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1216 assert_eq!(cipher_cipher_text, plaintext);
1217
1218 let ciphertext = des2.encrypt_u64(plaintext);
1219 println!("Plaintext:\t\t{:#018X}", plaintext);
1220 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1221 assert_eq!(ciphertext, 0x4D0AD4DC147E4BDF_u64);
1222
1223 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1224 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1225 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1226 assert_eq!(cipher_cipher_text, plaintext);
1227 println!();
1228 let mut des1 = DES::new();
1233 let mut des2 = DES::new();
1234 des1.set_key([0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE]);
1235 des2.set_key([0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E]);
1236
1237 let plaintext = 0x1234567890ABCDEF_u64;
1238 let ciphertext = des1.encrypt_u64(plaintext);
1239 println!("Plaintext:\t\t{:#018X}", plaintext);
1240 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1241 assert_eq!(ciphertext, 0x59735490F84A0AD0_u64);
1242
1243 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1244 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1245 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1246 assert_eq!(cipher_cipher_text, plaintext);
1247
1248 let ciphertext = des2.encrypt_u64(plaintext);
1249 println!("Plaintext:\t\t{:#018X}", plaintext);
1250 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1251 assert_eq!(ciphertext, 0x79FD3CBFE57F4B0B_u64);
1252
1253 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1254 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1255 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1256 assert_eq!(cipher_cipher_text, plaintext);
1257 println!();
1258 let mut des1 = DES::new();
1263 let mut des2 = DES::new();
1264 des1.set_key([0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE]);
1265 des2.set_key([0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1]);
1266
1267 let plaintext = 0x1234567890ABCDEF_u64;
1268 let ciphertext = des1.encrypt_u64(plaintext);
1269 println!("Plaintext:\t\t{:#018X}", plaintext);
1270 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1271 assert_eq!(ciphertext, 0x27C83AAE29571889_u64);
1272
1273 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1274 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1275 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1276 assert_eq!(cipher_cipher_text, plaintext);
1277
1278 let ciphertext = des2.encrypt_u64(plaintext);
1279 println!("Plaintext:\t\t{:#018X}", plaintext);
1280 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1281 assert_eq!(ciphertext, 0xDE76DF630C033919_u64);
1282
1283 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1284 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1285 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1286 assert_eq!(cipher_cipher_text, plaintext);
1287 println!("-------------------------------");
1290}
1291
1292fn des_set_key_u64()
1293{
1294 println!("des_set_key_u64");
1295 use cryptocol::symmetric::DES;
1296
1297 let mut des = DES::new();
1299 des.set_key_u64(0xEFCDAB9078563412);
1300 let plaintext = 0x1234567890ABCDEF_u64;
1301 let ciphertext = des.encrypt_u64(plaintext);
1302
1303 println!("Plaintext:\t\t{:#018X}", plaintext);
1304 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1305 assert_eq!(ciphertext, 0x3B6041D76AF28F23_u64);
1306
1307 let cipher_cipher_text = des.encrypt_u64(ciphertext);
1308 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1309 assert_eq!(cipher_cipher_text, 0x7C5AAE491DC1310D_u64);
1310 assert_ne!(cipher_cipher_text, plaintext);
1311 println!();
1312
1313 let mut des1 = DES::new();
1316 let mut des2 = DES::new();
1317 des1.set_key_u64(0x0000000000000000);
1318 des2.set_key_u64(0x0101010101010101);
1319
1320 let plaintext = 0x1234567890ABCDEF_u64;
1321 let ciphertext1 = des1.encrypt_u64(plaintext);
1322 let ciphertext2 = des2.encrypt_u64(plaintext);
1323
1324 println!("Plaintext:\t\t{:#018X}", plaintext);
1325 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
1326 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
1327 assert_eq!(ciphertext1, 0x1E32B46B44C69201_u64);
1328 assert_eq!(ciphertext2, 0x1E32B46B44C69201_u64);
1329 assert_eq!(ciphertext1, ciphertext2);
1330
1331 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1332 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1333 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
1334 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
1335 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1336 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1337 assert_eq!(cipher_cipher_text1, plaintext);
1338 assert_eq!(cipher_cipher_text2, plaintext);
1339 println!();
1340 let mut des1 = DES::new();
1345 let mut des2 = DES::new();
1346 des1.set_key_u64(0xFFFFFFFFFFFFFFFF);
1347 des2.set_key_u64(0xFEFEFEFEFEFEFEFE);
1348 let plaintext = 0x1234567890ABCDEF_u64;
1349 let ciphertext1 = des1.encrypt_u64(plaintext);
1350 let ciphertext2 = des2.encrypt_u64(plaintext);
1351
1352 println!("Plaintext:\t\t{:#018X}", plaintext);
1353 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
1354 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
1355 assert_eq!(ciphertext1, 0xA5997AB38BC07250_u64);
1356 assert_eq!(ciphertext2, 0xA5997AB38BC07250_u64);
1357 assert_eq!(ciphertext1, ciphertext2);
1358
1359 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1360 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1361 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
1362 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
1363 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1364 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1365 assert_eq!(cipher_cipher_text1, plaintext);
1366 assert_eq!(cipher_cipher_text2, plaintext);
1367 println!();
1368 let mut des1 = DES::new();
1373 let mut des2 = DES::new();
1374 des1.set_key_u64(0xF1F1F1F1E0E0E0E0);
1375 des2.set_key_u64(0xF0F0F0F0E1E1E1E1);
1376 let plaintext = 0x1234567890ABCDEF_u64;
1377 let ciphertext1 = des1.encrypt_u64(plaintext);
1378 let ciphertext2 = des2.encrypt_u64(plaintext);
1379
1380 println!("Plaintext:\t\t{:#018X}", plaintext);
1381 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
1382 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
1383 assert_eq!(ciphertext1, 0x94CCA0201F033101_u64);
1384 assert_eq!(ciphertext2, 0x94CCA0201F033101_u64);
1385 assert_eq!(ciphertext1, ciphertext2);
1386
1387 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1388 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1389 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
1390 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
1391 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1392 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1393 assert_eq!(cipher_cipher_text1, plaintext);
1394 assert_eq!(cipher_cipher_text2, plaintext);
1395 println!();
1396 let mut des1 = DES::new();
1401 let mut des2 = DES::new();
1402 des1.set_key_u64(0x0E0E0E0E1F1F1F1F);
1403 des2.set_key_u64(0x0F0F0F0F1E1E1E1E);
1404 let plaintext = 0x1234567890ABCDEF_u64;
1405 let ciphertext1 = des1.encrypt_u64(plaintext);
1406 let ciphertext2 = des2.encrypt_u64(plaintext);
1407
1408 println!("Plaintext:\t\t{:#018X}", plaintext);
1409 println!("Ciphertext1:\t\t{:#018X}", ciphertext1);
1410 println!("Ciphertext2:\t\t{:#018X}", ciphertext2);
1411 assert_eq!(ciphertext1, 0x4FB6397B5352DB0C_u64);
1412 assert_eq!(ciphertext2, 0x4FB6397B5352DB0C_u64);
1413 assert_eq!(ciphertext1, ciphertext2);
1414
1415 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1416 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1417 println!("Cipher-ciphertext1:\t{:#018X}\n", cipher_cipher_text1);
1418 println!("Cipher-ciphertext2:\t{:#018X}\n", cipher_cipher_text2);
1419 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1420 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1421 assert_eq!(cipher_cipher_text1, plaintext);
1422 assert_eq!(cipher_cipher_text2, plaintext);
1423 println!();
1424 let mut des1 = DES::new();
1428 let mut des2 = DES::new();
1429 des1.set_key_u64(0x0E010E011F011F01);
1430 des2.set_key_u64(0x010E010E011F011F);
1431
1432 let plaintext = 0x1234567890ABCDEF_u64;
1433 let ciphertext = des1.encrypt_u64(plaintext);
1434 println!("Plaintext:\t\t{:#018X}", plaintext);
1435 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1436 assert_eq!(ciphertext, 0xC2C71D736E97876C_u64);
1437
1438 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1439 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1440 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1441 assert_eq!(cipher_cipher_text, plaintext);
1442
1443 let ciphertext = des2.encrypt_u64(plaintext);
1444 println!("Plaintext:\t\t{:#018X}", plaintext);
1445 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1446 assert_eq!(ciphertext, 0x063A6E55466423D2_u64);
1447
1448 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1449 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1450 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1451 assert_eq!(cipher_cipher_text, plaintext);
1452 println!();
1453 let mut des1 = DES::new();
1457 let mut des2 = DES::new();
1458 des1.set_key_u64(0xF101F101E001E001);
1459 des2.set_key_u64(0x01F101F101E001E0);
1460
1461 let plaintext = 0x1234567890ABCDEF_u64;
1462 let ciphertext = des1.encrypt_u64(plaintext);
1463 println!("Plaintext:\t\t{:#018X}", plaintext);
1464 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1465 assert_eq!(ciphertext, 0x85A63690E79AAA15_u64);
1466
1467 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1468 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1469 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1470 assert_eq!(cipher_cipher_text, plaintext);
1471
1472 let ciphertext = des2.encrypt_u64(plaintext);
1473 println!("Plaintext:\t\t{:#018X}", plaintext);
1474 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1475 assert_eq!(ciphertext, 0x15B721BBB44A12F5_u64);
1476
1477 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1478 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1479 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1480 assert_eq!(cipher_cipher_text, plaintext);
1481 println!();
1482 let mut des1 = DES::new();
1486 let mut des2 = DES::new();
1487 des1.set_key_u64(0xFE01FE01FE01FE01);
1488 des2.set_key_u64(0x01FE01FE01FE01FE);
1489
1490 let plaintext = 0x1234567890ABCDEF_u64;
1491 let ciphertext = des1.encrypt_u64(plaintext);
1492 println!("Plaintext:\t\t{:#018X}", plaintext);
1493 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1494 assert_eq!(ciphertext, 0xAE38CC9D9FA48581_u64);
1495
1496 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1497 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1498 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1499 assert_eq!(cipher_cipher_text, plaintext);
1500
1501 let ciphertext = des2.encrypt_u64(plaintext);
1502 println!("Plaintext:\t\t{:#018X}", plaintext);
1503 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1504 assert_eq!(ciphertext, 0x7EE95658A653960D_u64);
1505
1506 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1507 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1508 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1509 assert_eq!(cipher_cipher_text, plaintext);
1510 println!();
1511 let mut des1 = DES::new();
1515 let mut des2 = DES::new();
1516 des1.set_key_u64(0xF10EF10EE01FE01F);
1517 des2.set_key_u64(0x0EF10EF11FE01FE0);
1518
1519 let plaintext = 0x1234567890ABCDEF_u64;
1520 let ciphertext = des1.encrypt_u64(plaintext);
1521 println!("Plaintext:\t\t{:#018X}", plaintext);
1522 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1523 assert_eq!(ciphertext, 0x81ECC05B173F793E_u64);
1524
1525 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1526 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1527 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1528 assert_eq!(cipher_cipher_text, plaintext);
1529
1530 let ciphertext = des2.encrypt_u64(plaintext);
1531 println!("Plaintext:\t\t{:#018X}", plaintext);
1532 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1533 assert_eq!(ciphertext, 0x4D0AD4DC147E4BDF_u64);
1534
1535 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1536 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1537 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1538 assert_eq!(cipher_cipher_text, plaintext);
1539 println!();
1540 let mut des1 = DES::new();
1544 let mut des2 = DES::new();
1545 des1.set_key_u64(0xFE0EFE0EFE1FFE1F);
1546 des2.set_key_u64(0x0EFE0EFE1FFE1FFE);
1547
1548 let plaintext = 0x1234567890ABCDEF_u64;
1549 let ciphertext = des1.encrypt_u64(plaintext);
1550 println!("Plaintext:\t\t{:#018X}", plaintext);
1551 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1552 assert_eq!(ciphertext, 0x59735490F84A0AD0_u64);
1553
1554 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1555 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1556 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1557 assert_eq!(cipher_cipher_text, plaintext);
1558
1559 let ciphertext = des2.encrypt_u64(plaintext);
1560 println!("Plaintext:\t\t{:#018X}", plaintext);
1561 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1562 assert_eq!(ciphertext, 0x79FD3CBFE57F4B0B_u64);
1563
1564 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1565 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1566 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1567 assert_eq!(cipher_cipher_text, plaintext);
1568 println!();
1569 let mut des1 = DES::new();
1573 let mut des2 = DES::new();
1574 des1.set_key_u64(0xFEF1FEF1FEE0FEE0);
1575 des2.set_key_u64(0xF1FEF1FEE0FEE0FE);
1576
1577 let plaintext = 0x1234567890ABCDEF_u64;
1578 let ciphertext = des1.encrypt_u64(plaintext);
1579 println!("Plaintext:\t\t{:#018X}", plaintext);
1580 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1581 assert_eq!(ciphertext, 0x27C83AAE29571889_u64);
1582
1583 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1584 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1585 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1586 assert_eq!(cipher_cipher_text, plaintext);
1587
1588 let ciphertext = des2.encrypt_u64(plaintext);
1589 println!("Plaintext:\t\t{:#018X}", plaintext);
1590 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1591 assert_eq!(ciphertext, 0xDE76DF630C033919_u64);
1592
1593 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1594 println!("Cipher-ciphertext:\t{:#018X}\n", cipher_cipher_text);
1595 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1596 assert_eq!(cipher_cipher_text, plaintext);
1597 println!("-------------------------------");
1599}
1600
1601fn des_turn_inverse()
1602{
1603 println!("des_turn_inverse");
1604 use cryptocol::symmetric::{ BigCryptor64, DES, SmallCryptor };
1605
1606 let mut keys: [Box<dyn SmallCryptor<u64, 8>>; 3]
1607 = [ Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)),
1608 Box::new(DES::new_with_key_u64(0x_FEDCBA0987654321_u64)),
1609 Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)) ];
1610 keys[1].turn_inverse();
1611
1612 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
1613 let plaintext = 0x_1234567890ABCDEF_u64;
1614 let ciphertext = tdes.encrypt_u64(plaintext);
1615
1616 println!("Plaintext:\t\t{:#018X}", plaintext);
1617 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1618 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
1619
1620 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1621 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
1622 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1623 assert_eq!(cipher_cipher_text, plaintext);
1624 println!();
1625
1626
1627 let des1 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
1629 let mut des2 = DES::new_with_key_u64(0x_FEDCBA0987654321_u64);
1630 let des3 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
1631 des2.turn_inverse();
1632
1633 let mut tdes = BigCryptor64::new() + des1 + des2 + des3;
1634 let plaintext = 0x_1234567890ABCDEF_u64;
1635 let ciphertext = tdes.encrypt_u64(plaintext);
1636
1637 println!("Plaintext:\t\t{:#018X}", plaintext);
1638 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1639 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
1640
1641 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1642 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
1643 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
1644 assert_eq!(cipher_cipher_text, plaintext);
1645 println!("-------------------------------");
1646}
1647
1648fn des_turn_encryptor()
1649{
1650 println!("des_turn_encryptor");
1651 use cryptocol::symmetric::{ BigCryptor64, DES, SmallCryptor };
1652
1653 let mut keys: [Box<dyn SmallCryptor<u64, 8>>; 3]
1654 = [ Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)),
1655 Box::new(DES::new_with_key_u64(0x_FEDCBA0987654321_u64)),
1656 Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)) ];
1657 keys[0].turn_encryptor();
1658
1659 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
1660 let plaintext = 0x_1234567890ABCDEF_u64;
1661 let ciphertext = tdes.encrypt_u64(plaintext);
1662
1663 println!("Plaintext:\t\t{:#018X}", plaintext);
1664 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1665 assert_eq!(ciphertext, 0x_CDAC175F3B7EAA2B_u64);
1666
1667 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1668 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
1669 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1670 assert_eq!(cipher_cipher_text, plaintext);
1671 println!();
1672
1673
1674 let mut des1 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
1676 let des2 = DES::new_with_key_u64(0x_FEDCBA0987654321_u64);
1677 let des3 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
1678 des1.turn_encryptor();
1679
1680 let mut tdes = BigCryptor64::new() + des1 + des2 + des3;
1681 let plaintext = 0x_1234567890ABCDEF_u64;
1682 let ciphertext = tdes.encrypt_u64(plaintext);
1683
1684 println!("Plaintext:\t\t{:#018X}", plaintext);
1685 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1686 assert_eq!(ciphertext, 0x_CDAC175F3B7EAA2B_u64);
1687
1688 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1689 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
1690 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
1691 assert_eq!(cipher_cipher_text, plaintext);
1692 println!("-------------------------------");
1693}
1694
1695fn des_turn_decryptor()
1696{
1697 println!("des_turn_decryptor");
1698 use cryptocol::symmetric::{ BigCryptor64, DES, SmallCryptor };
1699
1700 let mut keys: [Box<dyn SmallCryptor<u64, 8>>; 3]
1701 = [ Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)),
1702 Box::new(DES::new_with_key_u64(0x_FEDCBA0987654321_u64)),
1703 Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)) ];
1704 keys[1].turn_decryptor();
1705
1706 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
1707 let plaintext = 0x_1234567890ABCDEF_u64;
1708 let ciphertext = tdes.encrypt_u64(plaintext);
1709
1710 println!("Plaintext:\t\t{:#018X}", plaintext);
1711 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1712 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
1713
1714 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1715 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
1716 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1717 assert_eq!(cipher_cipher_text, plaintext);
1718 println!();
1719
1720
1721 let des1 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
1723 let mut des2 = DES::new_with_key_u64(0x_FEDCBA0987654321_u64);
1724 let des3 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
1725 des2.turn_decryptor();
1726
1727 let mut tdes = BigCryptor64::new() + des1 + des2 + des3;
1728 let plaintext = 0x_1234567890ABCDEF_u64;
1729 let ciphertext = tdes.encrypt_u64(plaintext);
1730
1731 println!("Plaintext:\t\t{:#018X}", plaintext);
1732 println!("Ciphertext:\t\t{:#018X}", ciphertext);
1733 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
1734
1735 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1736 println!("Cipher-ciphertext:\t{:#018X}", cipher_cipher_text);
1737 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
1738 assert_eq!(cipher_cipher_text, plaintext);
1739 println!("-------------------------------");
1740}
1741
1742fn des_encrypt_decrypt_u64_array_u64_main()
1743{
1744 des_encrypt_u64();
1745 des_decrypt_u64();
1746 des_encrypt_array_u64();
1749 des_decrypt_array_u64();
1750 des_is_successful();
1751 des_is_failed();
1752 des_has_weak_key();
1755}
1756
1757fn des_encrypt_u64()
1758{
1759 println!("des_encrypt_u64");
1760 use cryptocol::symmetric::{ DES, DES_Expanded };
1761
1762 let key = 0x_1234567890ABCDEF_u64;
1764 println!("K =\t{:#018X}", key);
1765
1766 let message = 0x_1234567890ABCDEF_u64;
1767 println!("M_u64 =\t{:#018X}", message);
1768
1769 let mut a_des = DES::new_with_key_u64(key);
1770 let cipher = a_des.encrypt_u64(message);
1771 println!("C_u64 (16 rounds) =\t{:#018X}", cipher);
1772 assert_eq!(cipher, 0x_1BC4896735BBE206_u64);
1773 println!();
1774
1775 let key = 0x_1234567890ABCDEF_u64;
1777 println!("K =\t{:#018X}", key);
1778
1779 let message = 0x_1234567890ABCDEF_u64;
1780 println!("M_u64 =\t{:#018X}", message);
1781
1782 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
1783 let cipher = b_des.encrypt_u64(message);
1784 println!("C_u64 (128 rounds) =\t{:#018X}", cipher);
1785 assert_eq!(cipher, 0x_21F25F81CE4D4AA3_u64);
1786 println!();
1787
1788 let key1 = 0x_1234567890ABCDEF_u64;
1790 let key2 = 0_u64;
1791 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
1792 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
1793 println!("K1 =\t{:#016x}", key1);
1794
1795 let message = 0x_1234567890ABCDEF_u64;
1796 println!("M_u64 =\t{:#018X}", message);
1797
1798 let cipher1 = c_des.encrypt_u64(message);
1799 let cipher2 = d_des.encrypt_u64(message);
1800 println!("C_u64 (0 rounds) =\t{:#018X}", cipher1);
1801 assert_eq!(cipher1, 0x_2138A9B46057CEDF_u64);
1802
1803 println!("D_u64 (0 rounds) =\t{:#018X}", cipher);
1804 assert_eq!(cipher2, 0x_2138A9B46057CEDF_u64);
1805 assert_eq!(cipher1, cipher2);
1806 println!("-------------------------------");
1807}
1808
1809fn des_decrypt_u64()
1810{
1811 println!("des_decrypt_u64");
1812 use cryptocol::symmetric::{ DES, DES_Expanded };
1813
1814 let key = 0x_1234567890ABCDEF_u64;
1816 println!("K =\t{:#018X}", key);
1817
1818 let message = 0x_1234567890ABCDEF_u64;
1819 println!("M_u64 =\t{:#018X}", message);
1820
1821 let mut a_des = DES::new_with_key_u64(key);
1822 let cipher = a_des.encrypt_u64(message);
1823 println!("C_u64 (16 rounds) =\t{:#018X}", cipher);
1824 assert_eq!(cipher, 0x_1BC4896735BBE206_u64);
1825
1826 let recovered = a_des.decrypt_u64(cipher);
1827 println!("B_u64 (16 rounds) =\t{:#018X}", recovered);
1828 assert_eq!(recovered, 0x_1234567890ABCDEF_u64);
1829 assert_eq!(recovered, message);
1830 println!();
1831
1832 let key = 0x_1234567890ABCDEF_u64;
1834 println!("K =\t{:#018X}", key);
1835
1836 let message = 0x_1234567890ABCDEF_u64;
1837 println!("M_u64 =\t{:#018X}", message);
1838
1839 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
1840 let cipher = b_des.encrypt_u64(message);
1841 println!("C_u64 (128 rounds) =\t{:#018X}", cipher);
1842 assert_eq!(cipher, 0x_21F25F81CE4D4AA3_u64);
1843
1844 let recovered = b_des.decrypt_u64(cipher);
1845 println!("B_u64 (16 rounds) =\t{:#018X}", recovered);
1846 assert_eq!(recovered, 0x_1234567890ABCDEF_u64);
1847 assert_eq!(recovered, message);
1848 println!();
1849
1850 let key1 = 0x_1234567890ABCDEF_u64;
1852 let key2 = 0_u64;
1853 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
1854 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
1855 println!("K =\t{:#018X}", key);
1856
1857 let message = 0x_1234567890ABCDEF_u64;
1858 println!("M_u64 =\t{:#018X}", message);
1859
1860 let cipher1 = c_des.encrypt_u64(message);
1861 let cipher2 = d_des.encrypt_u64(message);
1862 println!("C_u64 (0 rounds) =\t{:#018X}", cipher1);
1863 assert_eq!(cipher1, 0x_2138A9B46057CEDF_u64);
1864
1865 println!("D_u64 (0 rounds) =\t{:#018X}", cipher);
1866 assert_eq!(cipher2, 0x_2138A9B46057CEDF_u64);
1867 assert_eq!(cipher1, cipher2);
1868
1869 let recovered1 = c_des.decrypt_u64(cipher1);
1870 let recovered2 = d_des.decrypt_u64(cipher2);
1871 println!("B1_u64 (0 rounds) =\t{:#018X}", recovered1);
1872 println!("B2_u64 (0 rounds) =\t{:#018X}", recovered2);
1873 assert_eq!(recovered1, 0x_1234567890ABCDEF_u64);
1874 assert_eq!(recovered1, message);
1875 assert_eq!(recovered2, 0x_1234567890ABCDEF_u64);
1876 assert_eq!(recovered2, message);
1877 assert_eq!(recovered1, recovered2);
1878 println!("-------------------------------");
1879}
1880
1881fn des_encrypt_array_u64()
2007{
2008 println!("des_encrypt_array_u64");
2009 use cryptocol::symmetric::{ DES, DES_Expanded };
2010
2011 let key = 0x_1234567890ABCDEF_u64;
2013 println!("K =\t{:#018X}", key);
2014
2015 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2016 print!("M =\t");
2017 for m in message
2018 { print!("{:#018X} ", m); }
2019 println!();
2020 let mut a_des = DES::new_with_key_u64(key);
2021
2022 let mut cipher = [0; 3];
2023 a_des.encrypt_array_u64(&message, &mut cipher);
2024 print!("C (16 rounds) =\t");
2025 for c in cipher
2026 { print!("{:#018X} ", c); }
2027 println!();
2028 assert_eq!(cipher[0], 0x_1BC4896735BBE206_u64);
2029 assert_eq!(cipher[1], 0x_1D8A61E5E62226A4_u64);
2030 assert_eq!(cipher[2], 0x_2990D69525C17067_u64);
2031 println!();
2032
2033 let key = 0x_1234567890ABCDEF_u64;
2035 println!("K =\t{:#018X}", key);
2036
2037 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2038 print!("M =\t");
2039 for m in message
2040 { print!("{:#018X} ", m); }
2041 println!();
2042 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2043
2044 let mut cipher = [0; 3];
2045 b_des.encrypt_array_u64(&message, &mut cipher);
2046 print!("C (128 rounds) =\t");
2047 for c in cipher
2048 { print!("{:#018X} ", c); }
2049 println!();
2050 assert_eq!(cipher[0], 0x_21F25F81CE4D4AA3_u64);
2051 assert_eq!(cipher[1], 0x_352F391A1482A504_u64);
2052 assert_eq!(cipher[2], 0x_F793546957AFDE50_u64);
2053 println!();
2054
2055
2056 let key1 = 0x_1234567890ABCDEF_u64;
2058 let key2 = 0_u64;
2059 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2060 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2061 println!("K =\t{:#018X}", key);
2062
2063 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2064 print!("M =\t");
2065 for m in message
2066 { print!("{:#018X} ", m); }
2067 println!();
2068
2069 let mut cipher1 = [0; 3];
2070 let mut cipher2 = [0; 3];
2071 c_des.encrypt_array_u64(&message, &mut cipher1);
2072 d_des.encrypt_array_u64(&message, &mut cipher2);
2073 print!("C (0 rounds) =\t");
2074 for c in cipher1
2075 { print!("{:#018X} ", c); }
2076 println!();
2077 print!("D (0 rounds) =\t");
2078 for c in cipher2
2079 { print!("{:#018X} ", c); }
2080 println!();
2081 assert_eq!(cipher1[0], 0x_2138A9B46057CEDF_u64);
2082 assert_eq!(cipher1[1], 0x_DFCE5760B4A93821_u64);
2083 assert_eq!(cipher1[2], 0x_FDEC75064B9A8312_u64);
2084 assert_eq!(cipher2[0], 0x_2138A9B46057CEDF_u64);
2085 assert_eq!(cipher2[1], 0x_DFCE5760B4A93821_u64);
2086 assert_eq!(cipher2[2], 0x_FDEC75064B9A8312_u64);
2087 assert_eq!(cipher1[0], cipher2[0]);
2088 assert_eq!(cipher1[1], cipher2[1]);
2089 assert_eq!(cipher1[2], cipher2[2]);
2090 println!("-------------------------------");
2091}
2092
2093fn des_decrypt_array_u64()
2094{
2095 println!("des_decrypt_array_u64");
2096 use cryptocol::symmetric::{ DES, DES_Expanded };
2097
2098 let key = 0x_1234567890ABCDEF_u64;
2100 println!("K =\t{:#018X}", key);
2101
2102 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2103 print!("M =\t");
2104 for m in message
2105 { print!("{:#018X} ", m); }
2106 println!();
2107 let mut a_des = DES::new_with_key_u64(key);
2108
2109 let mut cipher = [0; 3];
2110 a_des.encrypt_array_u64(&message, &mut cipher);
2111 print!("C (16 rounds) =\t");
2112 for c in cipher
2113 { print!("{:#018X} ", c); }
2114 println!();
2115 assert_eq!(cipher[0], 0x_1BC4896735BBE206_u64);
2116 assert_eq!(cipher[1], 0x_1D8A61E5E62226A4_u64);
2117 assert_eq!(cipher[2], 0x_2990D69525C17067_u64);
2118
2119 let mut recovered = [0; 3];
2120 a_des.decrypt_array_u64(&cipher, &mut recovered);
2121 print!("B (16 rounds) =\t");
2122 for r in recovered
2123 { print!("{:#018X} ", r); }
2124 println!();
2125 assert_eq!(recovered[0], 0x_1234567890ABCDEF_u64);
2126 assert_eq!(recovered[1], 0x_EFCDAB9078563412_u64);
2127 assert_eq!(recovered[2], 0x_FEDCBA0987654321_u64);
2128 println!();
2129
2130 let key = 0x_1234567890ABCDEF_u64;
2132 println!("K =\t{:#018X}", key);
2133
2134 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2135 print!("M =\t");
2136 for m in message
2137 { print!("{:#018X} ", m); }
2138 println!();
2139 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2140
2141 let mut cipher = [0; 3];
2142 b_des.encrypt_array_u64(&message, &mut cipher);
2143 print!("C (128 rounds) =\t");
2144 for c in cipher
2145 { print!("{:#018X} ", c); }
2146 println!();
2147 assert_eq!(cipher[0], 0x_21F25F81CE4D4AA3_u64);
2148 assert_eq!(cipher[1], 0x_352F391A1482A504_u64);
2149 assert_eq!(cipher[2], 0x_F793546957AFDE50_u64);
2150
2151 let mut recovered = [0; 3];
2152 b_des.decrypt_array_u64(&cipher, &mut recovered);
2153 print!("B (128 rounds) =\t");
2154 for r in recovered
2155 { print!("{:#018X} ", r); }
2156 println!();
2157 assert_eq!(recovered[0], 0x_1234567890ABCDEF_u64);
2158 assert_eq!(recovered[1], 0x_EFCDAB9078563412_u64);
2159 assert_eq!(recovered[2], 0x_FEDCBA0987654321_u64);
2160
2161 let key1 = 0x_1234567890ABCDEF_u64;
2163 let key2 = 0_u64;
2164 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2165 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2166 println!("K =\t{:#018X}", key);
2167
2168 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2169 print!("M =\t");
2170 for m in message
2171 { print!("{:#018X} ", m); }
2172 println!();
2173
2174 let mut cipher1 = [0; 3];
2175 let mut cipher2 = [0; 3];
2176 c_des.encrypt_array_u64(&message, &mut cipher1);
2177 d_des.encrypt_array_u64(&message, &mut cipher2);
2178 print!("C (0 rounds) =\t");
2179 for c in cipher1
2180 { print!("{:#018X} ", c); }
2181 println!();
2182 print!("D (0 rounds) =\t");
2183 for c in cipher2
2184 { print!("{:#018X} ", c); }
2185 println!();
2186 assert_eq!(cipher1[0], 0x_2138A9B46057CEDF_u64);
2187 assert_eq!(cipher1[1], 0x_DFCE5760B4A93821_u64);
2188 assert_eq!(cipher1[2], 0x_FDEC75064B9A8312_u64);
2189 assert_eq!(cipher2[0], 0x_2138A9B46057CEDF_u64);
2190 assert_eq!(cipher2[1], 0x_DFCE5760B4A93821_u64);
2191 assert_eq!(cipher2[2], 0x_FDEC75064B9A8312_u64);
2192 assert_eq!(cipher1[0], cipher2[0]);
2193 assert_eq!(cipher1[1], cipher2[1]);
2194 assert_eq!(cipher1[2], cipher2[2]);
2195
2196 let mut recovered1 = [0; 3];
2197 let mut recovered2 = [0; 3];
2198 c_des.decrypt_array_u64(&cipher1, &mut recovered1);
2199 d_des.decrypt_array_u64(&cipher2, &mut recovered2);
2200 print!("B1 (0 rounds) =\t");
2201 for r in recovered1
2202 { print!("{:#018X} ", r); }
2203 println!();
2204 print!("B2 (0 rounds) =\t");
2205 for r in recovered2
2206 { print!("{:#018X} ", r); }
2207 println!();
2208 assert_eq!(recovered1[0], 0x_1234567890ABCDEF_u64);
2209 assert_eq!(recovered1[1], 0x_EFCDAB9078563412_u64);
2210 assert_eq!(recovered1[2], 0x_FEDCBA0987654321_u64);
2211 assert_eq!(recovered2[0], 0x_1234567890ABCDEF_u64);
2212 assert_eq!(recovered2[1], 0x_EFCDAB9078563412_u64);
2213 assert_eq!(recovered2[2], 0x_FEDCBA0987654321_u64);
2214 assert_eq!(recovered1[0], recovered2[0]);
2215 assert_eq!(recovered1[1], recovered2[1]);
2216 assert_eq!(recovered1[2], recovered2[2]);
2217 println!("-------------------------------");
2218}
2219
2220fn des_is_successful()
2221{
2222 println!("des_is_successful");
2223 use std::io::Write;
2224 use std::fmt::Write as _;
2225 use cryptocol::symmetric::DES;
2226
2227 {
2228 use cryptocol::symmetric::ECB_PKCS7;
2229
2230 let key = 0x_1234567890ABCDEF_u64;
2232 println!("K =\t{:#018X}", key);
2233 let mut a_des = DES::new_with_key_u64(key);
2234 let message = "";
2235 println!("M =\t{}", message);
2236 let mut cipher = [0_u8; 8];
2237 let len = a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
2238 println!("The length of ciphertext = {}", len);
2239 assert_eq!(len, 8);
2240 let success = a_des.is_successful();
2241 assert_eq!(success, true);
2242 print!("C =\t");
2243 for c in cipher.clone()
2244 { print!("{:02X} ", c); }
2245 println!();
2246 let mut txt = String::new();
2247 for c in cipher.clone()
2248 { write!(txt, "{:02X} ", c); }
2249 assert_eq!(txt, "41 7F 89 79 08 CD A1 4C ");
2250 println!();
2251
2252 let key = 0x_1234567890ABCDEF_u64;
2254 println!("K =\t{:#018X}", key);
2255 let mut a_des = DES::new_with_key_u64(key);
2256
2257 let cipher = [0x41u8, 0x7F, 0x89, 0x79, 0x08, 0xCD, 0xA1, 0x4C];
2258 print!("C =\t");
2259 for c in cipher.clone()
2260 { print!("{:02X} ", c); }
2261 println!();
2262 let mut recovered = [0u8; 8];
2263 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
2264 println!("The length of plaintext = {}", len);
2265 assert_eq!(len, 0);
2266 let success = a_des.is_successful();
2267 assert_eq!(success, true);
2268 print!("Ba =\t");
2269 for b in recovered.clone()
2270 { print!("{:02X} ", b); }
2271 println!();
2272 let mut txt = String::new();
2273 for c in recovered.clone()
2274 { write!(txt, "{:02X} ", c); }
2275 assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
2276
2277 let mut converted = String::new();
2278 unsafe { converted.as_mut_vec() }.write(&recovered);
2279 unsafe { converted.as_mut_vec() }.truncate(len as usize);
2280 println!("Bb =\t{}", converted);
2281 assert_eq!(converted, "");
2282 assert_eq!(converted, message);
2283 println!();
2284 }
2285
2286 {
2287 use cryptocol::symmetric::CBC_ISO;
2288
2289 let iv = 0x_FEDCBA0987654321_u64;
2291 println!("IV = {}", iv);
2292 let key = 0x_1234567890ABCDEF_u64;
2293 println!("K =\t{:#018X}", key);
2294 let mut a_des = DES::new_with_key_u64(key);
2295 let message = "";
2296 println!("M =\t{}", message);
2297 let mut cipher = [0_u8; 4];
2298 let len = a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
2299 println!("The length of ciphertext = {}", len);
2300 assert_eq!(len, 0);
2301 let success = a_des.is_successful();
2302 assert_eq!(success, false);
2303 print!("C =\t");
2304 for c in cipher.clone()
2305 { print!("{:02X} ", c); }
2306 println!();
2307 let mut txt = String::new();
2308 for c in cipher.clone()
2309 { write!(txt, "{:02X} ", c); }
2310 assert_eq!(txt, "00 00 00 00 ");
2311 println!();
2312
2313 let iv = 0x_FEDCBA0987654321_u64;
2315 println!("IV = {}", iv);
2316 let key = 0x_1234567890ABCDEF_u64;
2317 println!("K =\t{:#018X}", key);
2318 let mut a_des = DES::new_with_key_u64(key);
2319
2320 let cipher = [0u8; 4];
2321 print!("C =\t");
2322 for c in cipher.clone()
2323 { print!("{:02X} ", c); }
2324 println!();
2325 let mut recovered = [0u8; 8];
2326 let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
2327 println!("The length of plaintext = {}", len);
2328 assert_eq!(len, 0);
2329 let success = a_des.is_successful();
2330 assert_eq!(success, false);
2331 }
2332 println!("-------------------------------");
2333}
2334
2335fn des_is_failed()
2336{
2337 println!("des_is_failed");
2338 use std::io::Write;
2339 use std::fmt::Write as _;
2340 use cryptocol::symmetric::DES;
2341
2342 {
2343 use cryptocol::symmetric::ECB_PKCS7;
2344
2345 let key = 0x_1234567890ABCDEF_u64;
2347 println!("K =\t{:#018X}", key);
2348 let mut a_des = DES::new_with_key_u64(key);
2349 let message = "";
2350 println!("M =\t{}", message);
2351 let mut cipher = [0_u8; 8];
2352 let len = a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
2353 println!("The length of ciphertext = {}", len);
2354 assert_eq!(len, 8);
2355 let failure = a_des.is_failed();
2356 assert_eq!(failure, false);
2357 print!("C =\t");
2358 for c in cipher.clone()
2359 { print!("{:02X} ", c); }
2360 println!();
2361 let mut txt = String::new();
2362 for c in cipher.clone()
2363 { write!(txt, "{:02X} ", c); }
2364 assert_eq!(txt, "41 7F 89 79 08 CD A1 4C ");
2365 println!();
2366
2367 let key = 0x_1234567890ABCDEF_u64;
2369 println!("K =\t{:#018X}", key);
2370 let mut a_des = DES::new_with_key_u64(key);
2371
2372 let cipher = [0x41u8, 0x7F, 0x89, 0x79, 0x08, 0xCD, 0xA1, 0x4C];
2373 print!("C =\t");
2374 for c in cipher.clone()
2375 { print!("{:02X} ", c); }
2376 println!();
2377 let mut recovered = [0u8; 8];
2378 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
2379 println!("The length of plaintext = {}", len);
2380 assert_eq!(len, 0);
2381 let failure = a_des.is_failed();
2382 assert_eq!(failure, false);
2383 print!("Ba =\t");
2384 for b in recovered.clone()
2385 { print!("{:02X} ", b); }
2386 println!();
2387 let mut txt = String::new();
2388 for c in recovered.clone()
2389 { write!(txt, "{:02X} ", c); }
2390 assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
2391
2392 let mut converted = String::new();
2393 unsafe { converted.as_mut_vec() }.write(&recovered);
2394 unsafe { converted.as_mut_vec() }.truncate(len as usize);
2395 println!("Bb =\t{}", converted);
2396 assert_eq!(converted, "");
2397 assert_eq!(converted, message);
2398 println!();
2399 }
2400
2401 {
2402 use cryptocol::symmetric::CBC_ISO;
2403
2404 let iv = 0x_FEDCBA0987654321_u64;
2406 println!("IV = {}", iv);
2407 let key = 0x_1234567890ABCDEF_u64;
2408 println!("K =\t{:#018X}", key);
2409 let mut a_des = DES::new_with_key_u64(key);
2410 let message = "";
2411 println!("M =\t{}", message);
2412 let mut cipher = [0_u8; 4];
2413 let len = a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
2414 println!("The length of ciphertext = {}", len);
2415 assert_eq!(len, 0);
2416 let failure = a_des.is_failed();
2417 assert_eq!(failure, true);
2418 print!("C =\t");
2419 for c in cipher.clone()
2420 { print!("{:02X} ", c); }
2421 println!();
2422 let mut txt = String::new();
2423 for c in cipher.clone()
2424 { write!(txt, "{:02X} ", c); }
2425 assert_eq!(txt, "00 00 00 00 ");
2426 println!();
2427
2428 let iv = 0x_FEDCBA0987654321_u64;
2430 println!("IV = {}", iv);
2431 let key = 0x_1234567890ABCDEF_u64;
2432 println!("K =\t{:#018X}", key);
2433 let mut a_des = DES::new_with_key_u64(key);
2434
2435 let cipher = [0u8; 4];
2436 print!("C =\t");
2437 for c in cipher.clone()
2438 { print!("{:02X} ", c); }
2439 println!();
2440 let mut recovered = [0u8; 8];
2441 let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
2442 println!("The length of plaintext = {}", len);
2443 assert_eq!(len, 0);
2444 let failure = a_des.is_failed();
2445 assert_eq!(failure, true);
2446 }
2447 println!("-------------------------------");
2448}
2449
2450fn des_has_weak_key()
2476{
2477 println!("des_has_weak_key");
2478 use cryptocol::symmetric::DES;
2479
2480 let key = 0x_1234567890ABCDEF_u64;
2481 let mut a_des = DES::new_with_key_u64(key);
2482 let weak_key = a_des.has_weak_key();
2483 println!("{:016X} is {}a weak key.", key.to_be(), if weak_key {""} else {"not "});
2484 assert_eq!(weak_key, false);
2485
2486 let key = 0x_0000000000000000_u64;
2487 a_des.set_key_u64(key);
2488 let weak_key = a_des.has_weak_key();
2489 println!("{:016X} is {}a weak key.", key.to_be(), if weak_key {""} else {"not "});
2490 assert_eq!(weak_key, true);
2491 println!("-------------------------------");
2492}
2493
2494
2495