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_encrypt_with_padding_iso_ecb();
25 des_encrypt_with_padding_iso_ecb_into_vec();
26 des_encrypt_with_padding_iso_ecb_into_array();
27 des_encrypt_str_with_padding_iso_ecb();
28 des_encrypt_str_with_padding_iso_ecb_into_vec();
29 des_encrypt_str_with_padding_iso_ecb_into_array();
30 des_encrypt_string_with_padding_iso_ecb();
31 des_encrypt_string_with_padding_iso_ecb_into_vec();
32 des_encrypt_string_with_padding_iso_ecb_into_array();
33 des_encrypt_vec_with_padding_iso_ecb();
34 des_encrypt_vec_with_padding_iso_ecb_into_vec();
35 des_encrypt_vec_with_padding_iso_ecb_into_array();
36 des_encrypt_array_with_padding_iso_ecb();
37 des_encrypt_array_with_padding_iso_ecb_into_vec();
38 des_encrypt_array_with_padding_iso_ecb_into_array();
39
40 des_decrypt_with_padding_iso_ecb();
41 des_decrypt_with_padding_iso_ecb_into_vec();
42 des_decrypt_with_padding_iso_ecb_into_array();
43 des_decrypt_with_padding_iso_ecb_into_string();
44 des_decrypt_vec_with_padding_iso_ecb();
45 des_decrypt_vec_with_padding_iso_ecb_into_vec();
46 des_decrypt_vec_with_padding_iso_ecb_into_array();
47 des_decrypt_vec_with_padding_iso_ecb_into_string();
48 des_decrypt_array_with_padding_iso_ecb();
49 des_decrypt_array_with_padding_iso_ecb_into_vec();
50 des_decrypt_array_with_padding_iso_ecb_into_array();
51 des_decrypt_array_with_padding_iso_ecb_into_string();
52}
53
54fn des_encrypt_with_padding_iso_ecb()
55{
56 println!("des_encrypt_with_padding_iso_ecb()");
57 use std::io::Write;
58 use std::fmt::Write as _;
59 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
60
61 let key = 0x_1234567890ABCDEF_u64;
63 println!("K =\t{:#016X}", key);
64 let mut a_des = DES::new_with_key_u64(key);
65
66 let message = "In the beginning God created the heavens and the earth.";
67 println!("M =\t{}", message);
68 let mut cipher = [0_u8; 56];
69 a_des.encrypt(message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
70 print!("C (16 rounds) =\t");
71 for c in cipher.clone()
72 { print!("{:02X} ", c); }
73 println!();
74 let mut txt = String::new();
75 for c in cipher.clone()
76 { write!(txt, "{:02X} ", c); }
77 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
78 println!();
79
80 let key = 0x_1234567890ABCDEF_u64;
82 println!("K =\t{:#016X}", key);
83 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
84
85 let message = "In the beginning God created the heavens and the earth.";
86 println!("M =\t{}", message);
87 let mut cipher = [0_u8; 56];
88 a_des.encrypt(message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
89 print!("C (128 rounds) =\t");
90 for c in cipher.clone()
91 { print!("{:02X} ", c); }
92 println!();
93 let mut txt = String::new();
94 for c in cipher.clone()
95 { write!(txt, "{:02X} ", c); }
96 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
97 println!();
98
99 let key1 = 0x_1234567890ABCDEF_u64;
101 let key2 = 0_u64;
102 println!("K =\t{:#016X}", key);
103 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
104 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
105
106 let message = "In the beginning God created the heavens and the earth.";
107 println!("M =\t{}", message);
108 let mut cipher1 = [0_u8; 56];
109 let mut cipher2 = [0_u8; 56];
110 c_des.encrypt(message.as_ptr(), message.len() as u64, cipher1.as_mut_ptr());
111 d_des.encrypt(message.as_ptr(), message.len() as u64, cipher2.as_mut_ptr());
112 print!("C (0 rounds) =\t");
113 for c in cipher1.clone()
114 { print!("{:02X} ", c); }
115 println!();
116 let mut txt = String::new();
117 for c in cipher1.clone()
118 { write!(txt, "{:02X} ", c); }
119 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
120 print!("D (0 rounds) =\t");
121 for c in cipher2.clone()
122 { print!("{:02X} ", c); }
123 println!();
124 let mut txt = String::new();
125 for c in cipher2.clone()
126 { write!(txt, "{:02X} ", c); }
127 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
128 println!();
129
130 let key = 0x_1234567890ABCDEF_u64;
132 println!("K =\t{:#016X}", key);
133 let mut a_des = DES::new_with_key_u64(key);
134
135 let message = "";
136 println!("M =\t{}", message);
137 let mut cipher = [0_u8; 8];
138 a_des.encrypt(message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
139 print!("C =\t");
140 for c in cipher.clone()
141 { print!("{:02X} ", c); }
142 println!();
143 let mut txt = String::new();
144 for c in cipher.clone()
145 { write!(txt, "{:02X} ", c); }
146 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
147 println!();
148
149 let key = 0x_1234567890ABCDEF_u64;
151 println!("K =\t{:#016X}", key);
152 let mut a_des = DES::new_with_key_u64(key);
153
154 let message = "7 bytes";
155 println!("M =\t{}", message);
156 let mut cipher = [0_u8; 8];
157 a_des.encrypt(message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
158 print!("C =\t");
159 for c in cipher.clone()
160 { print!("{:02X} ", c); }
161 println!();
162 let mut txt = String::new();
163 for c in cipher.clone()
164 { write!(txt, "{:02X} ", c); }
165 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
166 println!();
167
168 let key = 0x_1234567890ABCDEF_u64;
170 println!("K =\t{:#016X}", key);
171 let mut a_des = DES::new_with_key_u64(key);
172
173 let message = "I am OK.";
174 println!("M =\t{}", message);
175 let mut cipher = [0_u8; 16];
176 a_des.encrypt(message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
177 print!("C =\t");
178 for c in cipher.clone()
179 { print!("{:02X} ", c); }
180 println!();
181 let mut txt = String::new();
182 for c in cipher.clone()
183 { write!(txt, "{:02X} ", c); }
184 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
185 println!();
186
187 let key = 0x_1234567890ABCDEF_u64;
189 println!("K =\t{:#016X}", key);
190 let mut a_des = DES::new_with_key_u64(key);
191
192 let message = "PARK Youngho";
193 println!("M =\t{}", message);
194 let mut cipher = [0_u8; 16];
195 a_des.encrypt(message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
196 print!("C =\t");
197 for c in cipher.clone()
198 { print!("{:02X} ", c); }
199 println!();
200 let mut txt = String::new();
201 for c in cipher.clone()
202 { write!(txt, "{:02X} ", c); }
203 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
204 println!();
205
206
207 let key = 0x_1234567890ABCDEF_u64;
209 println!("K =\t{:#016X}", key);
210 let mut a_des = DES::new_with_key_u64(key);
211
212 let message = "고맙습니다.";
213 println!("M =\t{}", message);
214 let mut cipher = [0_u8; 24];
215 a_des.encrypt(message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
216 print!("C =\t");
217 for c in cipher.clone()
218 { print!("{:02X} ", c); }
219 println!();
220 let mut txt = String::new();
221 for c in cipher.clone()
222 { write!(txt, "{:02X} ", c); }
223 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
224 println!("-------------------------------");
225}
226
227fn des_encrypt_with_padding_iso_ecb_into_vec()
228{
229 println!("des_encrypt_with_padding_iso_ecb_into_vec()");
230 use std::io::Write;
231 use std::fmt::Write as _;
232 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
233
234 let key = 0x_1234567890ABCDEF_u64;
236 println!("K =\t{:#016X}", key);
237 let mut a_des = DES::new_with_key_u64(key);
238
239 let message = "In the beginning God created the heavens and the earth.";
240 println!("M =\t{}", message);
241 let mut cipher = Vec::<u8>::new();
242 a_des.encrypt_into_vec(message.as_ptr(), message.len() as u64, &mut cipher);
243 print!("C (16 rounds) =\t");
244 for c in cipher.clone()
245 { print!("{:02X} ", c); }
246 println!();
247 let mut txt = String::new();
248 for c in cipher.clone()
249 { write!(txt, "{:02X} ", c); }
250 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
251 println!();
252
253 let key = 0x_1234567890ABCDEF_u64;
255 println!("K =\t{:#016X}", key);
256 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
257
258 let message = "In the beginning God created the heavens and the earth.";
259 println!("M =\t{}", message);
260 let mut cipher = Vec::<u8>::new();
261 a_des.encrypt_into_vec(message.as_ptr(), message.len() as u64, &mut cipher);
262 print!("C (128 rounds) =\t");
263 for c in cipher.clone()
264 { print!("{:02X} ", c); }
265 println!();
266 let mut txt = String::new();
267 for c in cipher.clone()
268 { write!(txt, "{:02X} ", c); }
269 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
270 println!();
271
272 let key1 = 0x_1234567890ABCDEF_u64;
274 let key2 = 0_u64;
275 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
276 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
277 println!("K =\t{:#016X}", key);
278
279 let message = "In the beginning God created the heavens and the earth.";
280 println!("M =\t{}", message);
281 let mut cipher1 = Vec::<u8>::new();
282 let mut cipher2 = Vec::<u8>::new();
283 c_des.encrypt_into_vec(message.as_ptr(), message.len() as u64, &mut cipher1);
284 d_des.encrypt_into_vec(message.as_ptr(), message.len() as u64, &mut cipher2);
285 print!("C (0 rounds) =\t");
286 for c in cipher1.clone()
287 { print!("{:02X} ", c); }
288 println!();
289 let mut txt = String::new();
290 for c in cipher1.clone()
291 { write!(txt, "{:02X} ", c); }
292 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
293 print!("D (0 rounds) =\t");
294 for c in cipher2.clone()
295 { print!("{:02X} ", c); }
296 println!();
297 let mut txt = String::new();
298 for c in cipher2.clone()
299 { write!(txt, "{:02X} ", c); }
300 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
301 println!();
302
303 let key = 0x_1234567890ABCDEF_u64;
305 println!("K =\t{:#016X}", key);
306 let mut a_des = DES::new_with_key_u64(key);
307
308 let message = "";
309 println!("M =\t{}", message);
310 let mut cipher = Vec::<u8>::new();
311 a_des.encrypt_into_vec(message.as_ptr(), message.len() as u64, &mut cipher);
312 print!("C =\t");
313 for c in cipher.clone()
314 { print!("{:02X} ", c); }
315 println!();
316 let mut txt = String::new();
317 for c in cipher.clone()
318 { write!(txt, "{:02X} ", c); }
319 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
320 println!();
321
322 let key = 0x_1234567890ABCDEF_u64;
324 println!("K =\t{:#016X}", key);
325 let mut a_des = DES::new_with_key_u64(key);
326
327 let message = "7 bytes";
328 println!("M =\t{}", message);
329 let mut cipher = Vec::<u8>::new();
330 a_des.encrypt_into_vec(message.as_ptr(), message.len() as u64, &mut cipher);
331 print!("C =\t");
332 for c in cipher.clone()
333 { print!("{:02X} ", c); }
334 println!();
335 let mut txt = String::new();
336 for c in cipher.clone()
337 { write!(txt, "{:02X} ", c); }
338 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
339 println!();
340
341 let key = 0x_1234567890ABCDEF_u64;
343 println!("K =\t{:#016X}", key);
344 let mut a_des = DES::new_with_key_u64(key);
345
346 let message = "I am OK.";
347 println!("M =\t{}", message);
348 let mut cipher = Vec::<u8>::new();
349 a_des.encrypt_into_vec(message.as_ptr(), message.len() as u64, &mut cipher);
350 print!("C =\t");
351 for c in cipher.clone()
352 { print!("{:02X} ", c); }
353 println!();
354 let mut txt = String::new();
355 for c in cipher.clone()
356 { write!(txt, "{:02X} ", c); }
357 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
358 println!();
359
360 let key = 0x_1234567890ABCDEF_u64;
362 println!("K =\t{:#016X}", key);
363 let mut a_des = DES::new_with_key_u64(key);
364
365 let message = "PARK Youngho";
366 println!("M =\t{}", message);
367 let mut cipher = Vec::<u8>::new();
368 a_des.encrypt_into_vec(message.as_ptr(), message.len() as u64, &mut cipher);
369 print!("C =\t");
370 for c in cipher.clone()
371 { print!("{:02X} ", c); }
372 println!();
373 let mut txt = String::new();
374 for c in cipher.clone()
375 { write!(txt, "{:02X} ", c); }
376 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
377 println!();
378
379 let key = 0x_1234567890ABCDEF_u64;
381 println!("K =\t{:#016X}", key);
382 let mut a_des = DES::new_with_key_u64(key);
383
384 let message = "고맙습니다.";
385 println!("M =\t{}", message);
386 let mut cipher = Vec::<u8>::new();
387 a_des.encrypt_into_vec(message.as_ptr(), message.len() as u64, &mut cipher);
388 print!("C =\t");
389 for c in cipher.clone()
390 { print!("{:02X} ", c); }
391 println!();
392 let mut txt = String::new();
393 for c in cipher.clone()
394 { write!(txt, "{:02X} ", c); }
395 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
396 println!("-------------------------------");
397}
398
399fn des_encrypt_with_padding_iso_ecb_into_array()
400{
401 println!("des_encrypt_with_padding_iso_ecb_into_array()");
402 use std::io::Write;
403 use std::fmt::Write as _;
404 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
405
406 let key = 0x_1234567890ABCDEF_u64;
408 println!("K =\t{:#016X}", key);
409 let mut a_des = DES::new_with_key_u64(key);
410
411 let message = "In the beginning God created the heavens and the earth.";
412 println!("M =\t{}", message);
413 let mut cipher = [0_u8; 56];
414 a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
415 print!("C (16 rounds) =\t");
416 for c in cipher.clone()
417 { print!("{:02X} ", c); }
418 println!();
419 let mut txt = String::new();
420 for c in cipher.clone()
421 { write!(txt, "{:02X} ", c); }
422 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
423 println!();
424
425 let key = 0x_1234567890ABCDEF_u64;
427 println!("K =\t{:#016X}", key);
428 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
429
430 let message = "In the beginning God created the heavens and the earth.";
431 println!("M =\t{}", message);
432 let mut cipher = [0_u8; 56];
433 a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
434 print!("C (128 rounds) =\t");
435 for c in cipher.clone()
436 { print!("{:02X} ", c); }
437 println!();
438 let mut txt = String::new();
439 for c in cipher.clone()
440 { write!(txt, "{:02X} ", c); }
441 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
442 println!();
443
444 let key1 = 0x_1234567890ABCDEF_u64;
446 let key2 = 0_u64;
447 println!("K =\t{:#016X}", key);
448 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
449 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
450
451 let message = "In the beginning God created the heavens and the earth.";
452 println!("M =\t{}", message);
453 let mut cipher1 = [0_u8; 56];
454 let mut cipher2 = [0_u8; 56];
455 c_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher1);
456 d_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher2);
457 print!("C (0 rounds) =\t");
458 for c in cipher1.clone()
459 { print!("{:02X} ", c); }
460 println!();
461 let mut txt = String::new();
462 for c in cipher1.clone()
463 { write!(txt, "{:02X} ", c); }
464 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
465 print!("D (0 rounds) =\t");
466 for c in cipher2.clone()
467 { print!("{:02X} ", c); }
468 println!();
469 let mut txt = String::new();
470 for c in cipher2.clone()
471 { write!(txt, "{:02X} ", c); }
472 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
473 println!();
474
475 let key = 0x_1234567890ABCDEF_u64;
477 println!("K =\t{:#016X}", key);
478 let mut a_des = DES::new_with_key_u64(key);
479
480 let message = "";
481 println!("M =\t{}", message);
482 let mut cipher = [0_u8; 8];
483 a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
484 print!("C =\t");
485 for c in cipher.clone()
486 { print!("{:02X} ", c); }
487 println!();
488 let mut txt = String::new();
489 for c in cipher.clone()
490 { write!(txt, "{:02X} ", c); }
491 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
492 println!();
493
494 let key = 0x_1234567890ABCDEF_u64;
496 println!("K =\t{:#016X}", key);
497 let mut a_des = DES::new_with_key_u64(key);
498
499 let message = "7 bytes";
500 println!("M =\t{}", message);
501 let mut cipher = [0_u8; 8];
502 a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
503 print!("C =\t");
504 for c in cipher.clone()
505 { print!("{:02X} ", c); }
506 println!();
507 let mut txt = String::new();
508 for c in cipher.clone()
509 { write!(txt, "{:02X} ", c); }
510 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
511 println!();
512
513 let key = 0x_1234567890ABCDEF_u64;
515 println!("K =\t{:#016X}", key);
516 let mut a_des = DES::new_with_key_u64(key);
517
518 let message = "I am OK.";
519 println!("M =\t{}", message);
520 let mut cipher = [0_u8; 16];
521 a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
522 print!("C =\t");
523 for c in cipher.clone()
524 { print!("{:02X} ", c); }
525 println!();
526 let mut txt = String::new();
527 for c in cipher.clone()
528 { write!(txt, "{:02X} ", c); }
529 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
530 println!();
531
532 let key = 0x_1234567890ABCDEF_u64;
534 println!("K =\t{:#016X}", key);
535 let mut a_des = DES::new_with_key_u64(key);
536
537 let message = "PARK Youngho";
538 println!("M =\t{}", message);
539 let mut cipher = [0_u8; 16];
540 a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
541 print!("C =\t");
542 for c in cipher.clone()
543 { print!("{:02X} ", c); }
544 println!();
545 let mut txt = String::new();
546 for c in cipher.clone()
547 { write!(txt, "{:02X} ", c); }
548 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
549 println!();
550
551
552 let key = 0x_1234567890ABCDEF_u64;
554 println!("K =\t{:#016X}", key);
555 let mut a_des = DES::new_with_key_u64(key);
556
557 let message = "고맙습니다.";
558 println!("M =\t{}", message);
559 let mut cipher = [0_u8; 24];
560 a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
561 print!("C =\t");
562 for c in cipher.clone()
563 { print!("{:02X} ", c); }
564 println!();
565 let mut txt = String::new();
566 for c in cipher.clone()
567 { write!(txt, "{:02X} ", c); }
568 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
569 println!("-------------------------------");
570}
571
572fn des_encrypt_str_with_padding_iso_ecb()
573{
574 println!("des_encrypt_str_with_padding_iso_ecb()");
575 use std::io::Write;
576 use std::fmt::Write as _;
577 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
578
579 let key = 0x_1234567890ABCDEF_u64;
581 println!("K =\t{:#016X}", key);
582 let mut a_des = DES::new_with_key_u64(key);
583
584 let message = "In the beginning God created the heavens and the earth.";
585 println!("M =\t{}", message);
586 let mut cipher = [0_u8; 56];
587 a_des.encrypt_str(&message, cipher.as_mut_ptr());
588 print!("C (16 rounds) =\t");
589 for c in cipher.clone()
590 { print!("{:02X} ", c); }
591 println!();
592 let mut txt = String::new();
593 for c in cipher.clone()
594 { write!(txt, "{:02X} ", c); }
595 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
596 println!();
597
598 let key = 0x_1234567890ABCDEF_u64;
600 println!("K =\t{:#016X}", key);
601 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
602
603 let message = "In the beginning God created the heavens and the earth.";
604 println!("M =\t{}", message);
605 let mut cipher = [0_u8; 56];
606 a_des.encrypt_str(&message, cipher.as_mut_ptr());
607 print!("C (128 rounds) =\t");
608 for c in cipher.clone()
609 { print!("{:02X} ", c); }
610 println!();
611 let mut txt = String::new();
612 for c in cipher.clone()
613 { write!(txt, "{:02X} ", c); }
614 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
615 println!();
616
617 let key1 = 0x_1234567890ABCDEF_u64;
619 let key2 = 0_u64;
620 println!("K =\t{:#016X}", key);
621 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
622 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
623
624 let message = "In the beginning God created the heavens and the earth.";
625 println!("M =\t{}", message);
626 let mut cipher1 = [0_u8; 56];
627 let mut cipher2 = [0_u8; 56];
628 c_des.encrypt_str(&message, cipher1.as_mut_ptr());
629 d_des.encrypt_str(&message, cipher2.as_mut_ptr());
630 print!("C (0 rounds) =\t");
631 for c in cipher1.clone()
632 { print!("{:02X} ", c); }
633 println!();
634 let mut txt = String::new();
635 for c in cipher1.clone()
636 { write!(txt, "{:02X} ", c); }
637 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
638 print!("D (0 rounds) =\t");
639 for c in cipher2.clone()
640 { print!("{:02X} ", c); }
641 println!();
642 let mut txt = String::new();
643 for c in cipher2.clone()
644 { write!(txt, "{:02X} ", c); }
645 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
646 println!();
647
648 let key = 0x_1234567890ABCDEF_u64;
650 println!("K =\t{:#016X}", key);
651 let mut a_des = DES::new_with_key_u64(key);
652
653 let message = "";
654 println!("M =\t{}", message);
655 let mut cipher = [0_u8; 8];
656 a_des.encrypt_str(&message, cipher.as_mut_ptr());
657 print!("C =\t");
658 for c in cipher.clone()
659 { print!("{:02X} ", c); }
660 println!();
661 let mut txt = String::new();
662 for c in cipher.clone()
663 { write!(txt, "{:02X} ", c); }
664 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
665 println!();
666
667 let key = 0x_1234567890ABCDEF_u64;
669 println!("K =\t{:#016X}", key);
670 let mut a_des = DES::new_with_key_u64(key);
671
672 let message = "7 bytes";
673 println!("M =\t{}", message);
674 let mut cipher = [0_u8; 8];
675 a_des.encrypt_str(&message, cipher.as_mut_ptr());
676 print!("C =\t");
677 for c in cipher.clone()
678 { print!("{:02X} ", c); }
679 println!();
680 let mut txt = String::new();
681 for c in cipher.clone()
682 { write!(txt, "{:02X} ", c); }
683 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
684 println!();
685
686 let key = 0x_1234567890ABCDEF_u64;
688 println!("K =\t{:#016X}", key);
689 let mut a_des = DES::new_with_key_u64(key);
690
691 let message = "I am OK.";
692 println!("M =\t{}", message);
693 let mut cipher = [0_u8; 16];
694 a_des.encrypt_str(&message, cipher.as_mut_ptr());
695 print!("C =\t");
696 for c in cipher.clone()
697 { print!("{:02X} ", c); }
698 println!();
699 let mut txt = String::new();
700 for c in cipher.clone()
701 { write!(txt, "{:02X} ", c); }
702 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
703 println!();
704
705 let key = 0x_1234567890ABCDEF_u64;
707 println!("K =\t{:#016X}", key);
708 let mut a_des = DES::new_with_key_u64(key);
709
710 let message = "PARK Youngho";
711 println!("M =\t{}", message);
712 let mut cipher = [0_u8; 16];
713 a_des.encrypt_str(&message, cipher.as_mut_ptr());
714 print!("C =\t");
715 for c in cipher.clone()
716 { print!("{:02X} ", c); }
717 println!();
718 let mut txt = String::new();
719 for c in cipher.clone()
720 { write!(txt, "{:02X} ", c); }
721 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
722 println!();
723
724
725 let key = 0x_1234567890ABCDEF_u64;
727 println!("K =\t{:#016X}", key);
728 let mut a_des = DES::new_with_key_u64(key);
729
730 let message = "고맙습니다.";
731 println!("M =\t{}", message);
732 let mut cipher = [0_u8; 24];
733 a_des.encrypt_str(&message, cipher.as_mut_ptr());
734 print!("C =\t");
735 for c in cipher.clone()
736 { print!("{:02X} ", c); }
737 println!();
738 let mut txt = String::new();
739 for c in cipher.clone()
740 { write!(txt, "{:02X} ", c); }
741 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
742 println!("-------------------------------");
743}
744
745fn des_encrypt_str_with_padding_iso_ecb_into_vec()
746{
747 println!("des_encrypt_str_with_padding_iso_ecb_into_vec()");
748 use std::io::Write;
749 use std::fmt::Write as _;
750 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
751
752 let key = 0x_1234567890ABCDEF_u64;
754 println!("K =\t{:#016X}", key);
755 let mut a_des = DES::new_with_key_u64(key);
756
757 let message = "In the beginning God created the heavens and the earth.";
758 println!("M =\t{}", message);
759 let mut cipher = Vec::<u8>::new();
760 a_des.encrypt_str_into_vec(&message, &mut cipher);
761 print!("C (16 rounds) =\t");
762 for c in cipher.clone()
763 { print!("{:02X} ", c); }
764 println!();
765 let mut txt = String::new();
766 for c in cipher.clone()
767 { write!(txt, "{:02X} ", c); }
768 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
769 println!();
770
771 let key = 0x_1234567890ABCDEF_u64;
773 println!("K =\t{:#016X}", key);
774 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
775
776 let message = "In the beginning God created the heavens and the earth.";
777 println!("M =\t{}", message);
778 let mut cipher = Vec::<u8>::new();
779 a_des.encrypt_str_into_vec(&message, &mut cipher);
780 print!("C (128 rounds) =\t");
781 for c in cipher.clone()
782 { print!("{:02X} ", c); }
783 println!();
784 let mut txt = String::new();
785 for c in cipher.clone()
786 { write!(txt, "{:02X} ", c); }
787 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
788 println!();
789
790 let key1 = 0x_1234567890ABCDEF_u64;
792 let key2 = 0_u64;
793 println!("K =\t{:#016X}", key);
794 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
795 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
796
797 let message = "In the beginning God created the heavens and the earth.";
798 println!("M =\t{}", message);
799 let mut cipher1 = Vec::<u8>::new();
800 let mut cipher2 = Vec::<u8>::new();
801 c_des.encrypt_str_into_vec(&message, &mut cipher1);
802 d_des.encrypt_str_into_vec(&message, &mut cipher2);
803 print!("C (0 rounds) =\t");
804 for c in cipher1.clone()
805 { print!("{:02X} ", c); }
806 println!();
807 let mut txt = String::new();
808 for c in cipher1.clone()
809 { write!(txt, "{:02X} ", c); }
810 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
811 print!("D (0 rounds) =\t");
812 for c in cipher2.clone()
813 { print!("{:02X} ", c); }
814 println!();
815 let mut txt = String::new();
816 for c in cipher2.clone()
817 { write!(txt, "{:02X} ", c); }
818 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
819 println!();
820
821 let key = 0x_1234567890ABCDEF_u64;
823 println!("K =\t{:#016X}", key);
824 let mut a_des = DES::new_with_key_u64(key);
825
826 let message = "";
827 println!("M =\t{}", message);
828 let mut cipher = Vec::<u8>::new();
829 a_des.encrypt_str_into_vec(&message, &mut cipher);
830 print!("C =\t");
831 for c in cipher.clone()
832 { print!("{:02X} ", c); }
833 println!();
834 let mut txt = String::new();
835 for c in cipher.clone()
836 { write!(txt, "{:02X} ", c); }
837 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
838 println!();
839
840 let key = 0x_1234567890ABCDEF_u64;
842 println!("K =\t{:#016X}", key);
843 let mut a_des = DES::new_with_key_u64(key);
844
845 let message = "7 bytes";
846 println!("M =\t{}", message);
847 let mut cipher = Vec::<u8>::new();
848 a_des.encrypt_str_into_vec(&message, &mut cipher);
849 print!("C =\t");
850 for c in cipher.clone()
851 { print!("{:02X} ", c); }
852 println!();
853 let mut txt = String::new();
854 for c in cipher.clone()
855 { write!(txt, "{:02X} ", c); }
856 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
857 println!();
858
859 let key = 0x_1234567890ABCDEF_u64;
861 println!("K =\t{:#016X}", key);
862 let mut a_des = DES::new_with_key_u64(key);
863
864 let message = "I am OK.";
865 println!("M =\t{}", message);
866 let mut cipher = Vec::<u8>::new();
867 a_des.encrypt_str_into_vec(&message, &mut cipher);
868 print!("C =\t");
869 for c in cipher.clone()
870 { print!("{:02X} ", c); }
871 println!();
872 let mut txt = String::new();
873 for c in cipher.clone()
874 { write!(txt, "{:02X} ", c); }
875 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
876 println!();
877
878 let key = 0x_1234567890ABCDEF_u64;
880 println!("K =\t{:#016X}", key);
881 let mut a_des = DES::new_with_key_u64(key);
882
883 let message = "PARK Youngho";
884 println!("M =\t{}", message);
885 let mut cipher = Vec::<u8>::new();
886 a_des.encrypt_str_into_vec(&message, &mut cipher);
887 print!("C =\t");
888 for c in cipher.clone()
889 { print!("{:02X} ", c); }
890 println!();
891 let mut txt = String::new();
892 for c in cipher.clone()
893 { write!(txt, "{:02X} ", c); }
894 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
895 println!();
896
897
898 let key = 0x_1234567890ABCDEF_u64;
900 println!("K =\t{:#016X}", key);
901 let mut a_des = DES::new_with_key_u64(key);
902
903 let message = "고맙습니다.";
904 println!("M =\t{}", message);
905 let mut cipher = Vec::<u8>::new();
906 a_des.encrypt_str_into_vec(&message, &mut cipher);
907 print!("C =\t");
908 for c in cipher.clone()
909 { print!("{:02X} ", c); }
910 println!();
911 let mut txt = String::new();
912 for c in cipher.clone()
913 { write!(txt, "{:02X} ", c); }
914 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
915 println!("-------------------------------");
916}
917
918fn des_encrypt_str_with_padding_iso_ecb_into_array()
919{
920 println!("des_encrypt_str_with_padding_iso_ecb_into_array()");
921 use std::io::Write;
922 use std::fmt::Write as _;
923 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
924
925 let key = 0x_1234567890ABCDEF_u64;
927 println!("K =\t{:#016X}", key);
928 let mut a_des = DES::new_with_key_u64(key);
929
930 let message = "In the beginning God created the heavens and the earth.";
931 println!("M =\t{}", message);
932 let mut cipher = [0_u8; 56];
933 a_des.encrypt_str_into_array(&message, &mut cipher);
934 print!("C (16 rounds) =\t");
935 for c in cipher.clone()
936 { print!("{:02X} ", c); }
937 println!();
938 let mut txt = String::new();
939 for c in cipher.clone()
940 { write!(txt, "{:02X} ", c); }
941 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
942 println!();
943
944 let key = 0x_1234567890ABCDEF_u64;
946 println!("K =\t{:#016X}", key);
947 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
948
949 let message = "In the beginning God created the heavens and the earth.";
950 println!("M =\t{}", message);
951 let mut cipher = [0_u8; 56];
952 a_des.encrypt_str_into_array(&message, &mut cipher);
953 print!("C (128 rounds) =\t");
954 for c in cipher.clone()
955 { print!("{:02X} ", c); }
956 println!();
957 let mut txt = String::new();
958 for c in cipher.clone()
959 { write!(txt, "{:02X} ", c); }
960 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
961 println!();
962
963 let key1 = 0x_1234567890ABCDEF_u64;
965 let key2 = 0_u64;
966 println!("K =\t{:#016X}", key);
967 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
968 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
969
970 let message = "In the beginning God created the heavens and the earth.";
971 println!("M =\t{}", message);
972 let mut cipher1 = [0_u8; 56];
973 let mut cipher2 = [0_u8; 56];
974 c_des.encrypt_str_into_array(&message, &mut cipher1);
975 d_des.encrypt_str_into_array(&message, &mut cipher2);
976 print!("C (0 rounds) =\t");
977 for c in cipher1.clone()
978 { print!("{:02X} ", c); }
979 println!();
980 let mut txt = String::new();
981 for c in cipher1.clone()
982 { write!(txt, "{:02X} ", c); }
983 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
984 print!("D (0 rounds) =\t");
985 for c in cipher2.clone()
986 { print!("{:02X} ", c); }
987 println!();
988 let mut txt = String::new();
989 for c in cipher2.clone()
990 { write!(txt, "{:02X} ", c); }
991 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
992 println!();
993
994 let key = 0x_1234567890ABCDEF_u64;
996 println!("K =\t{:#016X}", key);
997 let mut a_des = DES::new_with_key_u64(key);
998
999 let message = "";
1000 println!("M =\t{}", message);
1001 let mut cipher = [0_u8; 8];
1002 a_des.encrypt_str_into_array(&message, &mut cipher);
1003 print!("C =\t");
1004 for c in cipher.clone()
1005 { print!("{:02X} ", c); }
1006 println!();
1007 let mut txt = String::new();
1008 for c in cipher.clone()
1009 { write!(txt, "{:02X} ", c); }
1010 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
1011 println!();
1012
1013 let key = 0x_1234567890ABCDEF_u64;
1015 println!("K =\t{:#016X}", key);
1016 let mut a_des = DES::new_with_key_u64(key);
1017
1018 let message = "7 bytes";
1019 println!("M =\t{}", message);
1020 let mut cipher = [0_u8; 8];
1021 a_des.encrypt_str_into_array(&message, &mut cipher);
1022 print!("C =\t");
1023 for c in cipher.clone()
1024 { print!("{:02X} ", c); }
1025 println!();
1026 let mut txt = String::new();
1027 for c in cipher.clone()
1028 { write!(txt, "{:02X} ", c); }
1029 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
1030 println!();
1031
1032 let key = 0x_1234567890ABCDEF_u64;
1034 println!("K =\t{:#016X}", key);
1035 let mut a_des = DES::new_with_key_u64(key);
1036
1037 let message = "I am OK.";
1038 println!("M =\t{}", message);
1039 let mut cipher = [0_u8; 16];
1040 a_des.encrypt_str_into_array(&message, &mut cipher);
1041 print!("C =\t");
1042 for c in cipher.clone()
1043 { print!("{:02X} ", c); }
1044 println!();
1045 let mut txt = String::new();
1046 for c in cipher.clone()
1047 { write!(txt, "{:02X} ", c); }
1048 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
1049 println!();
1050
1051 let key = 0x_1234567890ABCDEF_u64;
1053 println!("K =\t{:#016X}", key);
1054 let mut a_des = DES::new_with_key_u64(key);
1055
1056 let message = "PARK Youngho";
1057 println!("M =\t{}", message);
1058 let mut cipher = [0_u8; 16];
1059 a_des.encrypt_str_into_array(&message, &mut cipher);
1060 print!("C =\t");
1061 for c in cipher.clone()
1062 { print!("{:02X} ", c); }
1063 println!();
1064 let mut txt = String::new();
1065 for c in cipher.clone()
1066 { write!(txt, "{:02X} ", c); }
1067 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
1068 println!();
1069
1070
1071 let key = 0x_1234567890ABCDEF_u64;
1073 println!("K =\t{:#016X}", key);
1074 let mut a_des = DES::new_with_key_u64(key);
1075
1076 let message = "고맙습니다.";
1077 println!("M =\t{}", message);
1078 let mut cipher = [0_u8; 24];
1079 a_des.encrypt_str_into_array(&message, &mut cipher);
1080 print!("C =\t");
1081 for c in cipher.clone()
1082 { print!("{:02X} ", c); }
1083 println!();
1084 let mut txt = String::new();
1085 for c in cipher.clone()
1086 { write!(txt, "{:02X} ", c); }
1087 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
1088 println!("-------------------------------");
1089}
1090
1091fn des_encrypt_string_with_padding_iso_ecb()
1092{
1093 println!("des_encrypt_string_with_padding_iso_ecb()");
1094 use std::io::Write;
1095 use std::fmt::Write as _;
1096 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
1097
1098 let key = 0x_1234567890ABCDEF_u64;
1100 println!("K =\t{:#016X}", key);
1101 let mut a_des = DES::new_with_key_u64(key);
1102
1103 let message = "In the beginning God created the heavens and the earth.".to_string();
1104 println!("M =\t{}", message);
1105 let mut cipher = [0_u8; 56];
1106 a_des.encrypt_string(&message, cipher.as_mut_ptr());
1107 print!("C (16 rounds) =\t");
1108 for c in cipher.clone()
1109 { print!("{:02X} ", c); }
1110 println!();
1111 let mut txt = String::new();
1112 for c in cipher.clone()
1113 { write!(txt, "{:02X} ", c); }
1114 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
1115 println!();
1116
1117 let key = 0x_1234567890ABCDEF_u64;
1119 println!("K =\t{:#016X}", key);
1120 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
1121
1122 let message = "In the beginning God created the heavens and the earth.".to_string();
1123 println!("M =\t{}", message);
1124 let mut cipher = [0_u8; 56];
1125 a_des.encrypt_string(&message, cipher.as_mut_ptr());
1126 print!("C (128 rounds) =\t");
1127 for c in cipher.clone()
1128 { print!("{:02X} ", c); }
1129 println!();
1130 let mut txt = String::new();
1131 for c in cipher.clone()
1132 { write!(txt, "{:02X} ", c); }
1133 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
1134 println!();
1135
1136 let key1 = 0x_1234567890ABCDEF_u64;
1138 let key2 = 0_u64;
1139 println!("K =\t{:#016X}", key);
1140 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
1141 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
1142
1143 let message = "In the beginning God created the heavens and the earth.".to_string();
1144 println!("M =\t{}", message);
1145 let mut cipher1 = [0_u8; 56];
1146 let mut cipher2 = [0_u8; 56];
1147 c_des.encrypt_string(&message, cipher1.as_mut_ptr());
1148 d_des.encrypt_string(&message, cipher2.as_mut_ptr());
1149 print!("C (0 rounds) =\t");
1150 for c in cipher1.clone()
1151 { print!("{:02X} ", c); }
1152 println!();
1153 let mut txt = String::new();
1154 for c in cipher1.clone()
1155 { write!(txt, "{:02X} ", c); }
1156 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1157 print!("D (0 rounds) =\t");
1158 for c in cipher2.clone()
1159 { print!("{:02X} ", c); }
1160 println!();
1161 let mut txt = String::new();
1162 for c in cipher2.clone()
1163 { write!(txt, "{:02X} ", c); }
1164 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1165 println!();
1166
1167 let key = 0x_1234567890ABCDEF_u64;
1169 println!("K =\t{:#016X}", key);
1170 let mut a_des = DES::new_with_key_u64(key);
1171
1172 let message = "".to_string();
1173 println!("M =\t{}", message);
1174 let mut cipher = [0_u8; 8];
1175 a_des.encrypt_string(&message, cipher.as_mut_ptr());
1176 print!("C =\t");
1177 for c in cipher.clone()
1178 { print!("{:02X} ", c); }
1179 println!();
1180 let mut txt = String::new();
1181 for c in cipher.clone()
1182 { write!(txt, "{:02X} ", c); }
1183 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
1184 println!();
1185
1186 let key = 0x_1234567890ABCDEF_u64;
1188 println!("K =\t{:#016X}", key);
1189 let mut a_des = DES::new_with_key_u64(key);
1190
1191 let message = "7 bytes".to_string();
1192 println!("M =\t{}", message);
1193 let mut cipher = [0_u8; 8];
1194 a_des.encrypt_string(&message, cipher.as_mut_ptr());
1195 print!("C =\t");
1196 for c in cipher.clone()
1197 { print!("{:02X} ", c); }
1198 println!();
1199 let mut txt = String::new();
1200 for c in cipher.clone()
1201 { write!(txt, "{:02X} ", c); }
1202 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
1203 println!();
1204
1205 let key = 0x_1234567890ABCDEF_u64;
1207 println!("K =\t{:#016X}", key);
1208 let mut a_des = DES::new_with_key_u64(key);
1209
1210 let message = "I am OK.".to_string();
1211 println!("M =\t{}", message);
1212 let mut cipher = [0_u8; 16];
1213 a_des.encrypt_string(&message, cipher.as_mut_ptr());
1214 print!("C =\t");
1215 for c in cipher.clone()
1216 { print!("{:02X} ", c); }
1217 println!();
1218 let mut txt = String::new();
1219 for c in cipher.clone()
1220 { write!(txt, "{:02X} ", c); }
1221 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
1222 println!();
1223
1224 let key = 0x_1234567890ABCDEF_u64;
1226 println!("K =\t{:#016X}", key);
1227 let mut a_des = DES::new_with_key_u64(key);
1228
1229 let message = "PARK Youngho".to_string();
1230 println!("M =\t{}", message);
1231 let mut cipher = [0_u8; 16];
1232 a_des.encrypt_string(&message, cipher.as_mut_ptr());
1233 print!("C =\t");
1234 for c in cipher.clone()
1235 { print!("{:02X} ", c); }
1236 println!();
1237 let mut txt = String::new();
1238 for c in cipher.clone()
1239 { write!(txt, "{:02X} ", c); }
1240 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
1241 println!();
1242
1243
1244 let key = 0x_1234567890ABCDEF_u64;
1246 println!("K =\t{:#016X}", key);
1247 let mut a_des = DES::new_with_key_u64(key);
1248
1249 let message = "고맙습니다.".to_string();
1250 println!("M =\t{}", message);
1251 let mut cipher = [0_u8; 24];
1252 a_des.encrypt_string(&message, cipher.as_mut_ptr());
1253 print!("C =\t");
1254 for c in cipher.clone()
1255 { print!("{:02X} ", c); }
1256 println!();
1257 let mut txt = String::new();
1258 for c in cipher.clone()
1259 { write!(txt, "{:02X} ", c); }
1260 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
1261 println!("-------------------------------");
1262}
1263
1264fn des_encrypt_string_with_padding_iso_ecb_into_vec()
1265{
1266 println!("des_encrypt_string_with_padding_iso_ecb_into_vec()");
1267 use std::io::Write;
1268 use std::fmt::Write as _;
1269 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
1270
1271 let key = 0x_1234567890ABCDEF_u64;
1273 println!("K =\t{:#016X}", key);
1274 let mut a_des = DES::new_with_key_u64(key);
1275
1276 let message = "In the beginning God created the heavens and the earth.".to_string();
1277 println!("M =\t{}", message);
1278 let mut cipher = Vec::<u8>::new();
1279 a_des.encrypt_string_into_vec(&message, &mut cipher);
1280 print!("C (16 rounds) =\t");
1281 for c in cipher.clone()
1282 { print!("{:02X} ", c); }
1283 println!();
1284 let mut txt = String::new();
1285 for c in cipher.clone()
1286 { write!(txt, "{:02X} ", c); }
1287 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
1288 println!();
1289
1290 let key = 0x_1234567890ABCDEF_u64;
1292 println!("K =\t{:#016X}", key);
1293 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
1294
1295 let message = "In the beginning God created the heavens and the earth.".to_string();
1296 println!("M =\t{}", message);
1297 let mut cipher = Vec::<u8>::new();
1298 a_des.encrypt_string_into_vec(&message, &mut cipher);
1299 print!("C (128 rounds) =\t");
1300 for c in cipher.clone()
1301 { print!("{:02X} ", c); }
1302 println!();
1303 let mut txt = String::new();
1304 for c in cipher.clone()
1305 { write!(txt, "{:02X} ", c); }
1306 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
1307 println!();
1308
1309 let key1 = 0x_1234567890ABCDEF_u64;
1311 let key2 = 0_u64;
1312 println!("K =\t{:#016X}", key);
1313 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
1314 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
1315
1316 let message = "In the beginning God created the heavens and the earth.".to_string();
1317 println!("M =\t{}", message);
1318 let mut cipher1 = Vec::<u8>::new();
1319 let mut cipher2 = Vec::<u8>::new();
1320 c_des.encrypt_string_into_vec(&message, &mut cipher1);
1321 d_des.encrypt_string_into_vec(&message, &mut cipher2);
1322 print!("C (0 rounds) =\t");
1323 for c in cipher1.clone()
1324 { print!("{:02X} ", c); }
1325 println!();
1326 let mut txt = String::new();
1327 for c in cipher1.clone()
1328 { write!(txt, "{:02X} ", c); }
1329 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1330 print!("D (0 rounds) =\t");
1331 for c in cipher2.clone()
1332 { print!("{:02X} ", c); }
1333 println!();
1334 let mut txt = String::new();
1335 for c in cipher2.clone()
1336 { write!(txt, "{:02X} ", c); }
1337 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1338 println!();
1339
1340 let key = 0x_1234567890ABCDEF_u64;
1342 println!("K =\t{:#016X}", key);
1343 let mut a_des = DES::new_with_key_u64(key);
1344
1345 let message = "".to_string();
1346 println!("M =\t{}", message);
1347 let mut cipher = Vec::<u8>::new();
1348 a_des.encrypt_string_into_vec(&message, &mut cipher);
1349 print!("C =\t");
1350 for c in cipher.clone()
1351 { print!("{:02X} ", c); }
1352 println!();
1353 let mut txt = String::new();
1354 for c in cipher.clone()
1355 { write!(txt, "{:02X} ", c); }
1356 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
1357 println!();
1358
1359 let key = 0x_1234567890ABCDEF_u64;
1361 println!("K =\t{:#016X}", key);
1362 let mut a_des = DES::new_with_key_u64(key);
1363
1364 let message = "7 bytes".to_string();
1365 println!("M =\t{}", message);
1366 let mut cipher = Vec::<u8>::new();
1367 a_des.encrypt_string_into_vec(&message, &mut cipher);
1368 print!("C =\t");
1369 for c in cipher.clone()
1370 { print!("{:02X} ", c); }
1371 println!();
1372 let mut txt = String::new();
1373 for c in cipher.clone()
1374 { write!(txt, "{:02X} ", c); }
1375 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
1376 println!();
1377
1378 let key = 0x_1234567890ABCDEF_u64;
1380 println!("K =\t{:#016X}", key);
1381 let mut a_des = DES::new_with_key_u64(key);
1382
1383 let message = "I am OK.".to_string();
1384 println!("M =\t{}", message);
1385 let mut cipher = Vec::<u8>::new();
1386 a_des.encrypt_string_into_vec(&message, &mut cipher);
1387 print!("C =\t");
1388 for c in cipher.clone()
1389 { print!("{:02X} ", c); }
1390 println!();
1391 let mut txt = String::new();
1392 for c in cipher.clone()
1393 { write!(txt, "{:02X} ", c); }
1394 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
1395 println!();
1396
1397 let key = 0x_1234567890ABCDEF_u64;
1399 println!("K =\t{:#016X}", key);
1400 let mut a_des = DES::new_with_key_u64(key);
1401
1402 let message = "PARK Youngho".to_string();
1403 println!("M =\t{}", message);
1404 let mut cipher = Vec::<u8>::new();
1405 a_des.encrypt_string_into_vec(&message, &mut cipher);
1406 print!("C =\t");
1407 for c in cipher.clone()
1408 { print!("{:02X} ", c); }
1409 println!();
1410 let mut txt = String::new();
1411 for c in cipher.clone()
1412 { write!(txt, "{:02X} ", c); }
1413 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
1414 println!();
1415
1416
1417 let key = 0x_1234567890ABCDEF_u64;
1419 println!("K =\t{:#016X}", key);
1420 let mut a_des = DES::new_with_key_u64(key);
1421
1422 let message = "고맙습니다.".to_string();
1423 println!("M =\t{}", message);
1424 let mut cipher = Vec::<u8>::new();
1425 a_des.encrypt_string_into_vec(&message, &mut cipher);
1426 print!("C =\t");
1427 for c in cipher.clone()
1428 { print!("{:02X} ", c); }
1429 println!();
1430 let mut txt = String::new();
1431 for c in cipher.clone()
1432 { write!(txt, "{:02X} ", c); }
1433 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
1434 println!("-------------------------------");
1435}
1436
1437fn des_encrypt_string_with_padding_iso_ecb_into_array()
1438{
1439 println!("des_encrypt_string_with_padding_iso_ecb_into_array()");
1440 use std::io::Write;
1441 use std::fmt::Write as _;
1442 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
1443
1444 let key = 0x_1234567890ABCDEF_u64;
1446 println!("K =\t{:#016X}", key);
1447 let mut a_des = DES::new_with_key_u64(key);
1448
1449 let message = "In the beginning God created the heavens and the earth.".to_string();
1450 println!("M =\t{}", message);
1451 let mut cipher = [0_u8; 56];
1452 a_des.encrypt_string_into_array(&message, &mut cipher);
1453 print!("C (16 rounds) =\t");
1454 for c in cipher.clone()
1455 { print!("{:02X} ", c); }
1456 println!();
1457 let mut txt = String::new();
1458 for c in cipher.clone()
1459 { write!(txt, "{:02X} ", c); }
1460 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
1461 println!();
1462
1463 let key = 0x_1234567890ABCDEF_u64;
1465 println!("K =\t{:#016X}", key);
1466 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
1467
1468 let message = "In the beginning God created the heavens and the earth.".to_string();
1469 println!("M =\t{}", message);
1470 let mut cipher = [0_u8; 56];
1471 a_des.encrypt_string_into_array(&message, &mut cipher);
1472 print!("C (128 rounds) =\t");
1473 for c in cipher.clone()
1474 { print!("{:02X} ", c); }
1475 println!();
1476 let mut txt = String::new();
1477 for c in cipher.clone()
1478 { write!(txt, "{:02X} ", c); }
1479 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
1480 println!();
1481
1482 let key1 = 0x_1234567890ABCDEF_u64;
1484 let key2 = 0_u64;
1485 println!("K =\t{:#016X}", key);
1486 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
1487 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
1488
1489 let message = "In the beginning God created the heavens and the earth.".to_string();
1490 println!("M =\t{}", message);
1491 let mut cipher1 = [0_u8; 56];
1492 let mut cipher2 = [0_u8; 56];
1493 c_des.encrypt_string_into_array(&message, &mut cipher1);
1494 d_des.encrypt_string_into_array(&message, &mut cipher2);
1495 print!("C (0 rounds) =\t");
1496 for c in cipher1.clone()
1497 { print!("{:02X} ", c); }
1498 println!();
1499 let mut txt = String::new();
1500 for c in cipher1.clone()
1501 { write!(txt, "{:02X} ", c); }
1502 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1503 print!("D (0 rounds) =\t");
1504 for c in cipher2.clone()
1505 { print!("{:02X} ", c); }
1506 println!();
1507 let mut txt = String::new();
1508 for c in cipher2.clone()
1509 { write!(txt, "{:02X} ", c); }
1510 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1511 println!();
1512
1513 let key = 0x_1234567890ABCDEF_u64;
1515 println!("K =\t{:#016X}", key);
1516 let mut a_des = DES::new_with_key_u64(key);
1517
1518 let message = "".to_string();
1519 println!("M =\t{}", message);
1520 let mut cipher = [0_u8; 8];
1521 a_des.encrypt_string_into_array(&message, &mut cipher);
1522 print!("C =\t");
1523 for c in cipher.clone()
1524 { print!("{:02X} ", c); }
1525 println!();
1526 let mut txt = String::new();
1527 for c in cipher.clone()
1528 { write!(txt, "{:02X} ", c); }
1529 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
1530 println!();
1531
1532 let key = 0x_1234567890ABCDEF_u64;
1534 println!("K =\t{:#016X}", key);
1535 let mut a_des = DES::new_with_key_u64(key);
1536
1537 let message = "7 bytes".to_string();
1538 println!("M =\t{}", message);
1539 let mut cipher = [0_u8; 8];
1540 a_des.encrypt_string_into_array(&message, &mut cipher);
1541 print!("C =\t");
1542 for c in cipher.clone()
1543 { print!("{:02X} ", c); }
1544 println!();
1545 let mut txt = String::new();
1546 for c in cipher.clone()
1547 { write!(txt, "{:02X} ", c); }
1548 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
1549 println!();
1550
1551 let key = 0x_1234567890ABCDEF_u64;
1553 println!("K =\t{:#016X}", key);
1554 let mut a_des = DES::new_with_key_u64(key);
1555
1556 let message = "I am OK.".to_string();
1557 println!("M =\t{}", message);
1558 let mut cipher = [0_u8; 16];
1559 a_des.encrypt_string_into_array(&message, &mut cipher);
1560 print!("C =\t");
1561 for c in cipher.clone()
1562 { print!("{:02X} ", c); }
1563 println!();
1564 let mut txt = String::new();
1565 for c in cipher.clone()
1566 { write!(txt, "{:02X} ", c); }
1567 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
1568 println!();
1569
1570 let key = 0x_1234567890ABCDEF_u64;
1572 println!("K =\t{:#016X}", key);
1573 let mut a_des = DES::new_with_key_u64(key);
1574
1575 let message = "PARK Youngho".to_string();
1576 println!("M =\t{}", message);
1577 let mut cipher = [0_u8; 16];
1578 a_des.encrypt_string_into_array(&message, &mut cipher);
1579 print!("C =\t");
1580 for c in cipher.clone()
1581 { print!("{:02X} ", c); }
1582 println!();
1583 let mut txt = String::new();
1584 for c in cipher.clone()
1585 { write!(txt, "{:02X} ", c); }
1586 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
1587 println!();
1588
1589 let key = 0x_1234567890ABCDEF_u64;
1591 println!("K =\t{:#016X}", key);
1592 let mut a_des = DES::new_with_key_u64(key);
1593
1594 let message = "고맙습니다.".to_string();
1595 println!("M =\t{}", message);
1596 let mut cipher = [0_u8; 24];
1597 a_des.encrypt_string_into_array(&message, &mut cipher);
1598 print!("C =\t");
1599 for c in cipher.clone()
1600 { print!("{:02X} ", c); }
1601 println!();
1602 let mut txt = String::new();
1603 for c in cipher.clone()
1604 { write!(txt, "{:02X} ", c); }
1605 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
1606 println!("-------------------------------");
1607}
1608
1609fn des_encrypt_vec_with_padding_iso_ecb()
1610{
1611 println!("des_encrypt_vec_with_padding_iso_ecb()");
1612 use std::io::Write;
1613 use std::fmt::Write as _;
1614 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
1615
1616 let key = 0x_1234567890ABCDEF_u64;
1618 println!("K =\t{:#016X}", key);
1619 let mut a_des = DES::new_with_key_u64(key);
1620
1621 let message = "In the beginning God created the heavens and the earth.";
1622 println!("M =\t{}", message);
1623 let message = unsafe { message.to_string().as_mut_vec().clone() };
1624 let mut cipher = [0_u8; 56];
1625 a_des.encrypt_vec(&message, cipher.as_mut_ptr());
1626 print!("C (16 rounds) =\t");
1627 for c in cipher.clone()
1628 { print!("{:02X} ", c); }
1629 println!();
1630 let mut txt = String::new();
1631 for c in cipher.clone()
1632 { write!(txt, "{:02X} ", c); }
1633 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
1634 println!();
1635
1636 let key = 0x_1234567890ABCDEF_u64;
1638 println!("K =\t{:#016X}", key);
1639 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
1640
1641 let message = "In the beginning God created the heavens and the earth.";
1642 println!("M =\t{}", message);
1643 let message = unsafe { message.to_string().as_mut_vec().clone() };
1644 let mut cipher = [0_u8; 56];
1645 a_des.encrypt_vec(&message, cipher.as_mut_ptr());
1646 print!("C (128 rounds) =\t");
1647 for c in cipher.clone()
1648 { print!("{:02X} ", c); }
1649 println!();
1650 let mut txt = String::new();
1651 for c in cipher.clone()
1652 { write!(txt, "{:02X} ", c); }
1653 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
1654 println!();
1655
1656 let key1 = 0x_1234567890ABCDEF_u64;
1658 let key2 = 0_u64;
1659 println!("K1 =\t{:#016X}", key1);
1660 println!("K2 =\t{:#016X}", key2);
1661 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
1662 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
1663
1664 let message = "In the beginning God created the heavens and the earth.";
1665 println!("M =\t{}", message);
1666 let message = unsafe { message.to_string().as_mut_vec().clone() };
1667 let mut cipher1 = [0_u8; 56];
1668 let mut cipher2 = [0_u8; 56];
1669 c_des.encrypt_vec(&message, cipher1.as_mut_ptr());
1670 d_des.encrypt_vec(&message, cipher2.as_mut_ptr());
1671 print!("C (0 rounds) =\t");
1672 for c in cipher1.clone()
1673 { print!("{:02X} ", c); }
1674 println!();
1675 let mut txt = String::new();
1676 for c in cipher1.clone()
1677 { write!(txt, "{:02X} ", c); }
1678 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1679 print!("D (0 rounds) =\t");
1680 for c in cipher2.clone()
1681 { print!("{:02X} ", c); }
1682 println!();
1683 let mut txt = String::new();
1684 for c in cipher2.clone()
1685 { write!(txt, "{:02X} ", c); }
1686 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1687 println!();
1688
1689 let key = 0x_1234567890ABCDEF_u64;
1691 println!("K =\t{:#016X}", key);
1692 let mut a_des = DES::new_with_key_u64(key);
1693
1694 let message = "";
1695 println!("M =\t{}", message);
1696 let message = unsafe { message.to_string().as_mut_vec().clone() };
1697 let mut cipher = [0_u8; 8];
1698 a_des.encrypt_vec(&message, cipher.as_mut_ptr());
1699 print!("C =\t");
1700 for c in cipher.clone()
1701 { print!("{:02X} ", c); }
1702 println!();
1703 let mut txt = String::new();
1704 for c in cipher.clone()
1705 { write!(txt, "{:02X} ", c); }
1706 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
1707 println!();
1708
1709 let key = 0x_1234567890ABCDEF_u64;
1711 println!("K =\t{:#016X}", key);
1712 let mut a_des = DES::new_with_key_u64(key);
1713
1714 let message = "7 bytes";
1715 println!("M =\t{}", message);
1716 let message = unsafe { message.to_string().as_mut_vec().clone() };
1717 let mut cipher = [0_u8; 8];
1718 a_des.encrypt_vec(&message, cipher.as_mut_ptr());
1719 print!("C =\t");
1720 for c in cipher.clone()
1721 { print!("{:02X} ", c); }
1722 println!();
1723 let mut txt = String::new();
1724 for c in cipher.clone()
1725 { write!(txt, "{:02X} ", c); }
1726 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
1727 println!();
1728
1729 let key = 0x_1234567890ABCDEF_u64;
1731 println!("K =\t{:#016X}", key);
1732 let mut a_des = DES::new_with_key_u64(key);
1733
1734 let message = "I am OK.";
1735 println!("M =\t{}", message);
1736 let message = unsafe { message.to_string().as_mut_vec().clone() };
1737 let mut cipher = [0_u8; 16];
1738 a_des.encrypt_vec(&message, cipher.as_mut_ptr());
1739 print!("C =\t");
1740 for c in cipher.clone()
1741 { print!("{:02X} ", c); }
1742 println!();
1743 let mut txt = String::new();
1744 for c in cipher.clone()
1745 { write!(txt, "{:02X} ", c); }
1746 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
1747 println!();
1748
1749 let key = 0x_1234567890ABCDEF_u64;
1751 println!("K =\t{:#016X}", key);
1752 let mut a_des = DES::new_with_key_u64(key);
1753
1754 let message = "PARK Youngho";
1755 println!("M =\t{}", message);
1756 let message = unsafe { message.to_string().as_mut_vec().clone() };
1757 let mut cipher = [0_u8; 16];
1758 a_des.encrypt_vec(&message, cipher.as_mut_ptr());
1759 print!("C =\t");
1760 for c in cipher.clone()
1761 { print!("{:02X} ", c); }
1762 println!();
1763 let mut txt = String::new();
1764 for c in cipher.clone()
1765 { write!(txt, "{:02X} ", c); }
1766 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
1767 println!();
1768
1769
1770 let key = 0x_1234567890ABCDEF_u64;
1772 println!("K =\t{:#016X}", key);
1773 let mut a_des = DES::new_with_key_u64(key);
1774
1775 let message = "고맙습니다.";
1776 println!("M =\t{}", message);
1777 let message = unsafe { message.to_string().as_mut_vec().clone() };
1778 let mut cipher = [0_u8; 24];
1779 a_des.encrypt_vec(&message, cipher.as_mut_ptr());
1780 print!("C =\t");
1781 for c in cipher.clone()
1782 { print!("{:02X} ", c); }
1783 println!();
1784 let mut txt = String::new();
1785 for c in cipher.clone()
1786 { write!(txt, "{:02X} ", c); }
1787 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
1788 println!("-------------------------------");
1789}
1790
1791fn des_encrypt_vec_with_padding_iso_ecb_into_vec()
1792{
1793 println!("des_encrypt_vec_with_padding_iso_ecb_into_vec()");
1794 use std::io::Write;
1795 use std::fmt::Write as _;
1796 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
1797
1798 let key = 0x_1234567890ABCDEF_u64;
1800 println!("K =\t{:#016X}", key);
1801 let mut a_des = DES::new_with_key_u64(key);
1802
1803 let message = "In the beginning God created the heavens and the earth.";
1804 println!("M =\t{}", message);
1805 let message = unsafe { message.to_string().as_mut_vec().clone() };
1806 let mut cipher = Vec::<u8>::new();
1807 a_des.encrypt_vec_into_vec(&message, &mut cipher);
1808 print!("C (16 rounds) =\t");
1809 for c in cipher.clone()
1810 { print!("{:02X} ", c); }
1811 println!();
1812 let mut txt = String::new();
1813 for c in cipher.clone()
1814 { write!(txt, "{:02X} ", c); }
1815 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
1816 println!();
1817
1818 let key = 0x_1234567890ABCDEF_u64;
1820 println!("K =\t{:#016X}", key);
1821 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
1822
1823 let message = "In the beginning God created the heavens and the earth.";
1824 println!("M =\t{}", message);
1825 let message = unsafe { message.to_string().as_mut_vec().clone() };
1826 let mut cipher = Vec::<u8>::new();
1827 a_des.encrypt_vec_into_vec(&message, &mut cipher);
1828 print!("C (128 rounds) =\t");
1829 for c in cipher.clone()
1830 { print!("{:02X} ", c); }
1831 println!();
1832 let mut txt = String::new();
1833 for c in cipher.clone()
1834 { write!(txt, "{:02X} ", c); }
1835 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
1836 println!();
1837
1838 let key1 = 0x_1234567890ABCDEF_u64;
1840 let key2 = 0_u64;
1841 println!("K1 =\t{:#016X}", key1);
1842 println!("K2 =\t{:#016X}", key2);
1843 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
1844 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
1845
1846 let message = "In the beginning God created the heavens and the earth.";
1847 println!("M =\t{}", message);
1848 let message = unsafe { message.to_string().as_mut_vec().clone() };
1849
1850 let mut cipher1 = Vec::<u8>::new();
1851 let mut cipher2 = Vec::<u8>::new();
1852 c_des.encrypt_vec_into_vec(&message, &mut cipher1);
1853 d_des.encrypt_vec_into_vec(&message, &mut cipher2);
1854 print!("C (0 rounds) =\t");
1855 for c in cipher1.clone()
1856 { print!("{:02X} ", c); }
1857 println!();
1858 let mut txt = String::new();
1859 for c in cipher1.clone()
1860 { write!(txt, "{:02X} ", c); }
1861 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1862 print!("D (0 rounds) =\t");
1863 for c in cipher2.clone()
1864 { print!("{:02X} ", c); }
1865 println!();
1866 let mut txt = String::new();
1867 for c in cipher2.clone()
1868 { write!(txt, "{:02X} ", c); }
1869 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
1870 println!();
1871
1872 let key = 0x_1234567890ABCDEF_u64;
1874 println!("K =\t{:#016X}", key);
1875 let mut a_des = DES::new_with_key_u64(key);
1876
1877 let message = "";
1878 println!("M =\t{}", message);
1879 let message = unsafe { message.to_string().as_mut_vec().clone() };
1880 let mut cipher = Vec::<u8>::new();
1881 a_des.encrypt_vec_into_vec(&message, &mut cipher);
1882 print!("C =\t");
1883 for c in cipher.clone()
1884 { print!("{:02X} ", c); }
1885 println!();
1886 let mut txt = String::new();
1887 for c in cipher.clone()
1888 { write!(txt, "{:02X} ", c); }
1889 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
1890 println!();
1891
1892 let key = 0x_1234567890ABCDEF_u64;
1894 println!("K =\t{:#016X}", key);
1895 let mut a_des = DES::new_with_key_u64(key);
1896
1897 let message = "7 bytes";
1898 println!("M =\t{}", message);
1899 let message = unsafe { message.to_string().as_mut_vec().clone() };
1900 let mut cipher = Vec::<u8>::new();
1901 a_des.encrypt_vec_into_vec(&message, &mut cipher);
1902 print!("C =\t");
1903 for c in cipher.clone()
1904 { print!("{:02X} ", c); }
1905 println!();
1906 let mut txt = String::new();
1907 for c in cipher.clone()
1908 { write!(txt, "{:02X} ", c); }
1909 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
1910 println!();
1911
1912 let key = 0x_1234567890ABCDEF_u64;
1914 println!("K =\t{:#016X}", key);
1915 let mut a_des = DES::new_with_key_u64(key);
1916
1917 let message = "I am OK.";
1918 println!("M =\t{}", message);
1919 let message = unsafe { message.to_string().as_mut_vec().clone() };
1920 let mut cipher = Vec::<u8>::new();
1921 a_des.encrypt_vec_into_vec(&message, &mut cipher);
1922 print!("C =\t");
1923 for c in cipher.clone()
1924 { print!("{:02X} ", c); }
1925 println!();
1926 let mut txt = String::new();
1927 for c in cipher.clone()
1928 { write!(txt, "{:02X} ", c); }
1929 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
1930 println!();
1931
1932 let key = 0x_1234567890ABCDEF_u64;
1934 println!("K =\t{:#016X}", key);
1935 let mut a_des = DES::new_with_key_u64(key);
1936
1937 let message = "PARK Youngho";
1938 println!("M =\t{}", message);
1939 let message = unsafe { message.to_string().as_mut_vec().clone() };
1940 let mut cipher = Vec::<u8>::new();
1941 a_des.encrypt_vec_into_vec(&message, &mut cipher);
1942 print!("C =\t");
1943 for c in cipher.clone()
1944 { print!("{:02X} ", c); }
1945 println!();
1946 let mut txt = String::new();
1947 for c in cipher.clone()
1948 { write!(txt, "{:02X} ", c); }
1949 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
1950 println!();
1951
1952
1953 let key = 0x_1234567890ABCDEF_u64;
1955 println!("K =\t{:#016X}", key);
1956 let mut a_des = DES::new_with_key_u64(key);
1957
1958 let message = "고맙습니다.";
1959 println!("M =\t{}", message);
1960 let message = unsafe { message.to_string().as_mut_vec().clone() };
1961 let mut cipher = Vec::<u8>::new();
1962 a_des.encrypt_vec_into_vec(&message, &mut cipher);
1963 print!("C =\t");
1964 for c in cipher.clone()
1965 { print!("{:02X} ", c); }
1966 println!();
1967 let mut txt = String::new();
1968 for c in cipher.clone()
1969 { write!(txt, "{:02X} ", c); }
1970 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
1971 println!("-------------------------------");
1972}
1973
1974fn des_encrypt_vec_with_padding_iso_ecb_into_array()
1975{
1976 println!("des_encrypt_vec_with_padding_iso_ecb_into_array()");
1977 use std::io::Write;
1978 use std::fmt::Write as _;
1979 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
1980
1981 let key = 0x_1234567890ABCDEF_u64;
1983 println!("K =\t{:#016X}", key);
1984 let mut a_des = DES::new_with_key_u64(key);
1985
1986 let message = "In the beginning God created the heavens and the earth.";
1987 println!("M =\t{}", message);
1988 let message = unsafe { message.to_string().as_mut_vec().clone() };
1989 let mut cipher = [0_u8; 56];
1990 a_des.encrypt_vec_into_array(&message, &mut cipher);
1991 print!("C (16 rounds) =\t");
1992 for c in cipher.clone()
1993 { print!("{:02X} ", c); }
1994 println!();
1995 let mut txt = String::new();
1996 for c in cipher.clone()
1997 { write!(txt, "{:02X} ", c); }
1998 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
1999 println!();
2000
2001 let key = 0x_1234567890ABCDEF_u64;
2003 println!("K =\t{:#016X}", key);
2004 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2005
2006 let message = "In the beginning God created the heavens and the earth.";
2007 println!("M =\t{}", message);
2008 let message = unsafe { message.to_string().as_mut_vec().clone() };
2009 let mut cipher = [0_u8; 56];
2010 a_des.encrypt_vec_into_array(&message, &mut cipher);
2011 print!("C (128 rounds) =\t");
2012 for c in cipher.clone()
2013 { print!("{:02X} ", c); }
2014 println!();
2015 let mut txt = String::new();
2016 for c in cipher.clone()
2017 { write!(txt, "{:02X} ", c); }
2018 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
2019 println!();
2020
2021 let key1 = 0x_1234567890ABCDEF_u64;
2023 let key2 = 0_u64;
2024 println!("K1 =\t{:#016X}", key1);
2025 println!("K2 =\t{:#016X}", key2);
2026 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2027 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2028
2029 let message = "In the beginning God created the heavens and the earth.";
2030 println!("M =\t{}", message);
2031 let message = unsafe { message.to_string().as_mut_vec().clone() };
2032 let mut cipher1 = [0_u8; 56];
2033 let mut cipher2 = [0_u8; 56];
2034 c_des.encrypt_vec_into_array(&message, &mut cipher1);
2035 d_des.encrypt_vec_into_array(&message, &mut cipher2);
2036 print!("C (0 rounds) =\t");
2037 for c in cipher1.clone()
2038 { print!("{:02X} ", c); }
2039 println!();
2040 let mut txt = String::new();
2041 for c in cipher1.clone()
2042 { write!(txt, "{:02X} ", c); }
2043 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2044 print!("D (0 rounds) =\t");
2045 for c in cipher2.clone()
2046 { print!("{:02X} ", c); }
2047 println!();
2048 let mut txt = String::new();
2049 for c in cipher2.clone()
2050 { write!(txt, "{:02X} ", c); }
2051 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2052 println!();
2053
2054 let key = 0x_1234567890ABCDEF_u64;
2056 println!("K =\t{:#016X}", key);
2057 let mut a_des = DES::new_with_key_u64(key);
2058
2059 let message = "";
2060 println!("M =\t{}", message);
2061 let message = unsafe { message.to_string().as_mut_vec().clone() };
2062 let mut cipher = [0_u8; 8];
2063 a_des.encrypt_vec_into_array(&message, &mut cipher);
2064 print!("C =\t");
2065 for c in cipher.clone()
2066 { print!("{:02X} ", c); }
2067 println!();
2068 let mut txt = String::new();
2069 for c in cipher.clone()
2070 { write!(txt, "{:02X} ", c); }
2071 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
2072 println!();
2073
2074 let key = 0x_1234567890ABCDEF_u64;
2076 println!("K =\t{:#016X}", key);
2077 let mut a_des = DES::new_with_key_u64(key);
2078
2079 let message = "7 bytes";
2080 println!("M =\t{}", message);
2081 let message = unsafe { message.to_string().as_mut_vec().clone() };
2082 let mut cipher = [0_u8; 8];
2083 a_des.encrypt_vec_into_array(&message, &mut cipher);
2084 print!("C =\t");
2085 for c in cipher.clone()
2086 { print!("{:02X} ", c); }
2087 println!();
2088 let mut txt = String::new();
2089 for c in cipher.clone()
2090 { write!(txt, "{:02X} ", c); }
2091 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
2092 println!();
2093
2094 let key = 0x_1234567890ABCDEF_u64;
2096 println!("K =\t{:#016X}", key);
2097 let mut a_des = DES::new_with_key_u64(key);
2098
2099 let message = "I am OK.";
2100 println!("M =\t{}", message);
2101 let message = unsafe { message.to_string().as_mut_vec().clone() };
2102 let mut cipher = [0_u8; 16];
2103 a_des.encrypt_vec_into_array(&message, &mut cipher);
2104 print!("C =\t");
2105 for c in cipher.clone()
2106 { print!("{:02X} ", c); }
2107 println!();
2108 let mut txt = String::new();
2109 for c in cipher.clone()
2110 { write!(txt, "{:02X} ", c); }
2111 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
2112 println!();
2113
2114 let key = 0x_1234567890ABCDEF_u64;
2116 println!("K =\t{:#016X}", key);
2117 let mut a_des = DES::new_with_key_u64(key);
2118
2119 let message = "PARK Youngho";
2120 println!("M =\t{}", message);
2121 let message = unsafe { message.to_string().as_mut_vec().clone() };
2122 let mut cipher = [0_u8; 16];
2123 a_des.encrypt_vec_into_array(&message, &mut cipher);
2124 print!("C =\t");
2125 for c in cipher.clone()
2126 { print!("{:02X} ", c); }
2127 println!();
2128 let mut txt = String::new();
2129 for c in cipher.clone()
2130 { write!(txt, "{:02X} ", c); }
2131 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
2132 println!();
2133
2134
2135 let key = 0x_1234567890ABCDEF_u64;
2137 println!("K =\t{:#016X}", key);
2138 let mut a_des = DES::new_with_key_u64(key);
2139
2140 let message = "고맙습니다.";
2141 println!("M =\t{}", message);
2142 let message = unsafe { message.to_string().as_mut_vec().clone() };
2143 let mut cipher = [0_u8; 24];
2144 a_des.encrypt_vec_into_array(&message, &mut cipher);
2145 print!("C =\t");
2146 for c in cipher.clone()
2147 { print!("{:02X} ", c); }
2148 println!();
2149 let mut txt = String::new();
2150 for c in cipher.clone()
2151 { write!(txt, "{:02X} ", c); }
2152 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
2153 println!("-------------------------------");
2154}
2155
2156fn des_encrypt_array_with_padding_iso_ecb()
2157{
2158 println!("des_encrypt_array_with_padding_iso_ecb()");
2159 use std::io::Write;
2160 use std::fmt::Write as _;
2161 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
2162
2163 let key = 0x_1234567890ABCDEF_u64;
2165 println!("K =\t{:#016X}", key);
2166 let mut a_des = DES::new_with_key_u64(key);
2167
2168 let mes = "In the beginning God created the heavens and the earth.";
2169 println!("M =\t{}", mes);
2170 let mut message = [0_u8; 55];
2171 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2172 let mut cipher = [0_u8; 56];
2173 a_des.encrypt_array(&message, cipher.as_mut_ptr());
2174 print!("C (16 rounds) =\t");
2175 for c in cipher.clone()
2176 { print!("{:02X} ", c); }
2177 println!();
2178 let mut txt = String::new();
2179 for c in cipher.clone()
2180 { write!(txt, "{:02X} ", c); }
2181 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
2182 println!();
2183
2184 let key = 0x_1234567890ABCDEF_u64;
2186 println!("K =\t{:#016X}", key);
2187 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2188
2189 let mes = "In the beginning God created the heavens and the earth.";
2190 println!("M =\t{}", mes);
2191 let mut message = [0_u8; 55];
2192 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2193 let mut cipher = [0_u8; 56];
2194 a_des.encrypt_array(&message, cipher.as_mut_ptr());
2195 print!("C (128 rounds) =\t");
2196 for c in cipher.clone()
2197 { print!("{:02X} ", c); }
2198 println!();
2199 let mut txt = String::new();
2200 for c in cipher.clone()
2201 { write!(txt, "{:02X} ", c); }
2202 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
2203 println!();
2204
2205 let key1 = 0x_1234567890ABCDEF_u64;
2207 let key2 = 0_u64;
2208 println!("K1 =\t{:#016X}", key1);
2209 println!("K2 =\t{:#016X}", key2);
2210 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2211 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2212
2213 let mes = "In the beginning God created the heavens and the earth.";
2214 println!("M =\t{}", mes);
2215 let mut message = [0_u8; 55];
2216 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2217 let mut cipher1 = [0_u8; 56];
2218 let mut cipher2 = [0_u8; 56];
2219 c_des.encrypt_array(&message, cipher1.as_mut_ptr());
2220 d_des.encrypt_array(&message, cipher2.as_mut_ptr());
2221 print!("C (0 rounds) =\t");
2222 for c in cipher1.clone()
2223 { print!("{:02X} ", c); }
2224 println!();
2225 let mut txt = String::new();
2226 for c in cipher1.clone()
2227 { write!(txt, "{:02X} ", c); }
2228 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2229 print!("D (0 rounds) =\t");
2230 for c in cipher2.clone()
2231 { print!("{:02X} ", c); }
2232 println!();
2233 let mut txt = String::new();
2234 for c in cipher2.clone()
2235 { write!(txt, "{:02X} ", c); }
2236 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2237 println!();
2238
2239 let key = 0x_1234567890ABCDEF_u64;
2241 println!("K =\t{:#016X}", key);
2242 let mut a_des = DES::new_with_key_u64(key);
2243
2244 let mes = "";
2245 println!("M =\t{}", mes);
2246 let mut message = [0_u8; 0];
2247 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2248 let mut cipher = [0_u8; 8];
2249 a_des.encrypt_array(&message, cipher.as_mut_ptr());
2250 print!("C =\t");
2251 for c in cipher.clone()
2252 { print!("{:02X} ", c); }
2253 println!();
2254 let mut txt = String::new();
2255 for c in cipher.clone()
2256 { write!(txt, "{:02X} ", c); }
2257 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
2258 println!();
2259
2260 let key = 0x_1234567890ABCDEF_u64;
2262 println!("K =\t{:#016X}", key);
2263 let mut a_des = DES::new_with_key_u64(key);
2264
2265 let mes = "7 bytes";
2266 println!("M =\t{}", mes);
2267 let mut message = [0_u8; 7];
2268 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2269 let mut cipher = [0_u8; 8];
2270 a_des.encrypt_array(&message, cipher.as_mut_ptr());
2271 print!("C =\t");
2272 for c in cipher.clone()
2273 { print!("{:02X} ", c); }
2274 println!();
2275 let mut txt = String::new();
2276 for c in cipher.clone()
2277 { write!(txt, "{:02X} ", c); }
2278 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
2279 println!();
2280
2281 let key = 0x_1234567890ABCDEF_u64;
2283 println!("K =\t{:#016X}", key);
2284 let mut a_des = DES::new_with_key_u64(key);
2285
2286 let mes = "I am OK.";
2287 println!("M =\t{}", mes);
2288 let mut message = [0_u8; 8];
2289 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2290 let mut cipher = [0_u8; 16];
2291 a_des.encrypt_array(&message, cipher.as_mut_ptr());
2292 print!("C =\t");
2293 for c in cipher.clone()
2294 { print!("{:02X} ", c); }
2295 println!();
2296 let mut txt = String::new();
2297 for c in cipher.clone()
2298 { write!(txt, "{:02X} ", c); }
2299 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
2300 println!();
2301
2302 let key = 0x_1234567890ABCDEF_u64;
2304 println!("K =\t{:#016X}", key);
2305 let mut a_des = DES::new_with_key_u64(key);
2306
2307 let mes = "PARK Youngho";
2308 println!("M =\t{}", mes);
2309 let mut message = [0_u8; 12];
2310 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2311 let mut cipher = [0_u8; 16];
2312 a_des.encrypt_array(&message, cipher.as_mut_ptr());
2313 print!("C =\t");
2314 for c in cipher.clone()
2315 { print!("{:02X} ", c); }
2316 println!();
2317 let mut txt = String::new();
2318 for c in cipher.clone()
2319 { write!(txt, "{:02X} ", c); }
2320 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
2321 println!();
2322
2323
2324 let key = 0x_1234567890ABCDEF_u64;
2326 println!("K =\t{:#016X}", key);
2327 let mut a_des = DES::new_with_key_u64(key);
2328
2329 let mes = "고맙습니다.";
2330 println!("M =\t{}", mes);
2331 let mut message = [0_u8; 16];
2332 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2333 let mut cipher = [0_u8; 24];
2334 a_des.encrypt_array(&message, cipher.as_mut_ptr());
2335 print!("C =\t");
2336 for c in cipher.clone()
2337 { print!("{:02X} ", c); }
2338 println!();
2339 let mut txt = String::new();
2340 for c in cipher.clone()
2341 { write!(txt, "{:02X} ", c); }
2342 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
2343 println!("-------------------------------");
2344}
2345
2346fn des_encrypt_array_with_padding_iso_ecb_into_vec()
2347{
2348 println!("des_encrypt_array_with_padding_iso_ecb_into_vec()");
2349 use std::io::Write;
2350 use std::fmt::Write as _;
2351 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
2352
2353 let key = 0x_1234567890ABCDEF_u64;
2355 println!("K =\t{:#016X}", key);
2356 let mut a_des = DES::new_with_key_u64(key);
2357
2358 let mes = "In the beginning God created the heavens and the earth.";
2359 println!("M =\t{}", mes);
2360 let mut message = [0_u8; 55];
2361 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2362 let mut cipher = Vec::<u8>::new();
2363 a_des.encrypt_array_into_vec(&message, &mut cipher);
2364 print!("C (16 rounds) =\t");
2365 for c in cipher.clone()
2366 { print!("{:02X} ", c); }
2367 println!();
2368 let mut txt = String::new();
2369 for c in cipher.clone()
2370 { write!(txt, "{:02X} ", c); }
2371 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
2372 println!();
2373
2374 let key = 0x_1234567890ABCDEF_u64;
2376 println!("K =\t{:#016X}", key);
2377 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2378
2379 let mes = "In the beginning God created the heavens and the earth.";
2380 println!("M =\t{}", mes);
2381 let mut message = [0_u8; 55];
2382 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2383 let mut cipher = Vec::<u8>::new();
2384 a_des.encrypt_array_into_vec(&message, &mut cipher);
2385 print!("C (128 rounds) =\t");
2386 for c in cipher.clone()
2387 { print!("{:02X} ", c); }
2388 println!();
2389 let mut txt = String::new();
2390 for c in cipher.clone()
2391 { write!(txt, "{:02X} ", c); }
2392 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
2393 println!();
2394
2395 let key1 = 0x_1234567890ABCDEF_u64;
2397 let key2 = 0_u64;
2398 println!("K1 =\t{:#016X}", key1);
2399 println!("K2 =\t{:#016X}", key2);
2400 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2401 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2402
2403 let mes = "In the beginning God created the heavens and the earth.";
2404 println!("M =\t{}", mes);
2405 let mut message = [0_u8; 55];
2406 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2407
2408 let mut cipher1 = Vec::<u8>::new();
2409 let mut cipher2 = Vec::<u8>::new();
2410 c_des.encrypt_array_into_vec(&message, &mut cipher1);
2411 d_des.encrypt_array_into_vec(&message, &mut cipher2);
2412 print!("C (0 rounds) =\t");
2413 for c in cipher1.clone()
2414 { print!("{:02X} ", c); }
2415 println!();
2416 let mut txt = String::new();
2417 for c in cipher1.clone()
2418 { write!(txt, "{:02X} ", c); }
2419 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2420 print!("D (0 rounds) =\t");
2421 for c in cipher2.clone()
2422 { print!("{:02X} ", c); }
2423 println!();
2424 let mut txt = String::new();
2425 for c in cipher2.clone()
2426 { write!(txt, "{:02X} ", c); }
2427 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2428 println!();
2429
2430 let key = 0x_1234567890ABCDEF_u64;
2432 println!("K =\t{:#016X}", key);
2433 let mut a_des = DES::new_with_key_u64(key);
2434
2435 let mes = "";
2436 println!("M =\t{}", mes);
2437 let mut message = [0_u8; 0];
2438 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2439 let mut cipher = Vec::<u8>::new();
2440 a_des.encrypt_array_into_vec(&message, &mut cipher);
2441 print!("C =\t");
2442 for c in cipher.clone()
2443 { print!("{:02X} ", c); }
2444 println!();
2445 let mut txt = String::new();
2446 for c in cipher.clone()
2447 { write!(txt, "{:02X} ", c); }
2448 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
2449 println!();
2450
2451 let key = 0x_1234567890ABCDEF_u64;
2453 println!("K =\t{:#016X}", key);
2454 let mut a_des = DES::new_with_key_u64(key);
2455
2456 let mes = "7 bytes";
2457 println!("M =\t{}", mes);
2458 let mut message = [0_u8; 7];
2459 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2460 let mut cipher = Vec::<u8>::new();
2461 a_des.encrypt_array_into_vec(&message, &mut cipher);
2462 print!("C =\t");
2463 for c in cipher.clone()
2464 { print!("{:02X} ", c); }
2465 println!();
2466 let mut txt = String::new();
2467 for c in cipher.clone()
2468 { write!(txt, "{:02X} ", c); }
2469 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
2470 println!();
2471
2472 let key = 0x_1234567890ABCDEF_u64;
2474 println!("K =\t{:#016X}", key);
2475 let mut a_des = DES::new_with_key_u64(key);
2476
2477 let mes = "I am OK.";
2478 println!("M =\t{}", mes);
2479 let mut message = [0_u8; 8];
2480 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2481 let mut cipher = Vec::<u8>::new();
2482 a_des.encrypt_array_into_vec(&message, &mut cipher);
2483 print!("C =\t");
2484 for c in cipher.clone()
2485 { print!("{:02X} ", c); }
2486 println!();
2487 let mut txt = String::new();
2488 for c in cipher.clone()
2489 { write!(txt, "{:02X} ", c); }
2490 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
2491 println!();
2492
2493 let key = 0x_1234567890ABCDEF_u64;
2495 println!("K =\t{:#016X}", key);
2496 let mut a_des = DES::new_with_key_u64(key);
2497
2498 let mes = "PARK Youngho";
2499 println!("M =\t{}", mes);
2500 let mut message = [0_u8; 12];
2501 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2502 let mut cipher = Vec::<u8>::new();
2503 a_des.encrypt_array_into_vec(&message, &mut cipher);
2504 print!("C =\t");
2505 for c in cipher.clone()
2506 { print!("{:02X} ", c); }
2507 println!();
2508 let mut txt = String::new();
2509 for c in cipher.clone()
2510 { write!(txt, "{:02X} ", c); }
2511 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
2512 println!();
2513
2514
2515 let key = 0x_1234567890ABCDEF_u64;
2517 println!("K =\t{:#016X}", key);
2518 let mut a_des = DES::new_with_key_u64(key);
2519
2520 let mes = "고맙습니다.";
2521 println!("M =\t{}", mes);
2522 let mut message = [0_u8; 16];
2523 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2524 let mut cipher = Vec::<u8>::new();
2525 a_des.encrypt_array_into_vec(&message, &mut cipher);
2526 print!("C =\t");
2527 for c in cipher.clone()
2528 { print!("{:02X} ", c); }
2529 println!();
2530 let mut txt = String::new();
2531 for c in cipher.clone()
2532 { write!(txt, "{:02X} ", c); }
2533 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
2534 println!("-------------------------------");
2535}
2536
2537fn des_encrypt_array_with_padding_iso_ecb_into_array()
2538{
2539 println!("des_encrypt_array_with_padding_iso_ecb_into_array()");
2540 use std::io::Write;
2541 use std::fmt::Write as _;
2542 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
2543
2544 let key = 0x_1234567890ABCDEF_u64;
2546 println!("K =\t{:#016X}", key);
2547 let mut a_des = DES::new_with_key_u64(key);
2548
2549 let mes = "In the beginning God created the heavens and the earth.";
2550 println!("M =\t{}", mes);
2551 let mut message = [0_u8; 55];
2552 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2553 let mut cipher = [0_u8; 56];
2554 a_des.encrypt_array_into_array(&message, &mut cipher);
2555 for c in cipher.clone()
2556 { print!("{:02X} ", c); }
2557 println!();
2558 let mut txt = String::new();
2559 for c in cipher.clone()
2560 { write!(txt, "{:02X} ", c); }
2561 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
2562 println!();
2563
2564 let key = 0x_1234567890ABCDEF_u64;
2566 println!("K =\t{:#016X}", key);
2567 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2568
2569 let mes = "In the beginning God created the heavens and the earth.";
2570 println!("M =\t{}", mes);
2571 let mut message = [0_u8; 55];
2572 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2573 let mut cipher = [0_u8; 56];
2574 a_des.encrypt_array_into_array(&message, &mut cipher);
2575 print!("C (128 rounds) =\t");
2576 for c in cipher.clone()
2577 { print!("{:02X} ", c); }
2578 println!();
2579 let mut txt = String::new();
2580 for c in cipher.clone()
2581 { write!(txt, "{:02X} ", c); }
2582 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
2583 println!();
2584
2585 let key1 = 0x_1234567890ABCDEF_u64;
2587 let key2 = 0_u64;
2588 println!("K1 =\t{:#016X}", key1);
2589 println!("K2 =\t{:#016X}", key2);
2590 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2591 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2592
2593 let mes = "In the beginning God created the heavens and the earth.";
2594 println!("M =\t{}", mes);
2595 let mut message = [0_u8; 55];
2596 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2597 let mut cipher1 = [0_u8; 56];
2598 let mut cipher2 = [0_u8; 56];
2599 c_des.encrypt_array_into_array(&message, &mut cipher1);
2600 d_des.encrypt_array_into_array(&message, &mut cipher2);
2601 print!("C (0 rounds) =\t");
2602 for c in cipher1.clone()
2603 { print!("{:02X} ", c); }
2604 println!();
2605 let mut txt = String::new();
2606 for c in cipher1.clone()
2607 { write!(txt, "{:02X} ", c); }
2608 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2609 print!("D (0 rounds) =\t");
2610 for c in cipher2.clone()
2611 { print!("{:02X} ", c); }
2612 println!();
2613 let mut txt = String::new();
2614 for c in cipher2.clone()
2615 { write!(txt, "{:02X} ", c); }
2616 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2617 println!();
2618
2619 let key = 0x_1234567890ABCDEF_u64;
2621 println!("K =\t{:#016X}", key);
2622 let mut a_des = DES::new_with_key_u64(key);
2623
2624 let mes = "";
2625 println!("M =\t{}", mes);
2626 let mut message = [0_u8; 0];
2627 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2628 let mut cipher = [0_u8; 8];
2629 a_des.encrypt_array_into_array(&message, &mut cipher);
2630 print!("C =\t");
2631 for c in cipher.clone()
2632 { print!("{:02X} ", c); }
2633 println!();
2634 let mut txt = String::new();
2635 for c in cipher.clone()
2636 { write!(txt, "{:02X} ", c); }
2637 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
2638 println!();
2639
2640 let key = 0x_1234567890ABCDEF_u64;
2642 println!("K =\t{:#016X}", key);
2643 let mut a_des = DES::new_with_key_u64(key);
2644
2645 let mes = "7 bytes";
2646 println!("M =\t{}", mes);
2647 let mut message = [0_u8; 7];
2648 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2649 let mut cipher = [0_u8; 8];
2650 a_des.encrypt_array_into_array(&message, &mut cipher);
2651 print!("C =\t");
2652 for c in cipher.clone()
2653 { print!("{:02X} ", c); }
2654 println!();
2655 let mut txt = String::new();
2656 for c in cipher.clone()
2657 { write!(txt, "{:02X} ", c); }
2658 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
2659 println!();
2660
2661 let key = 0x_1234567890ABCDEF_u64;
2663 println!("K =\t{:#016X}", key);
2664 let mut a_des = DES::new_with_key_u64(key);
2665
2666 let mes = "I am OK.";
2667 println!("M =\t{}", mes);
2668 let mut message = [0_u8; 8];
2669 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2670 let mut cipher = [0_u8; 16];
2671 a_des.encrypt_array_into_array(&message, &mut cipher);
2672 print!("C =\t");
2673 for c in cipher.clone()
2674 { print!("{:02X} ", c); }
2675 println!();
2676 let mut txt = String::new();
2677 for c in cipher.clone()
2678 { write!(txt, "{:02X} ", c); }
2679 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
2680 println!();
2681
2682 let key = 0x_1234567890ABCDEF_u64;
2684 println!("K =\t{:#016X}", key);
2685 let mut a_des = DES::new_with_key_u64(key);
2686
2687 let mes = "PARK Youngho";
2688 println!("M =\t{}", mes);
2689 let mut message = [0_u8; 12];
2690 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2691 let mut cipher = [0_u8; 16];
2692 a_des.encrypt_array_into_array(&message, &mut cipher);
2693 print!("C =\t");
2694 for c in cipher.clone()
2695 { print!("{:02X} ", c); }
2696 println!();
2697 let mut txt = String::new();
2698 for c in cipher.clone()
2699 { write!(txt, "{:02X} ", c); }
2700 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
2701 println!();
2702
2703
2704 let key = 0x_1234567890ABCDEF_u64;
2706 println!("K =\t{:#016X}", key);
2707 let mut a_des = DES::new_with_key_u64(key);
2708
2709 let mes = "고맙습니다.";
2710 println!("M =\t{}", mes);
2711 let mut message = [0_u8; 16];
2712 message.copy_from_slice(unsafe { mes.to_string().as_mut_vec() });
2713 let mut cipher = [0_u8; 24];
2714 a_des.encrypt_array_into_array(&message, &mut cipher);
2715 print!("C =\t");
2716 for c in cipher.clone()
2717 { print!("{:02X} ", c); }
2718 println!();
2719 let mut txt = String::new();
2720 for c in cipher.clone()
2721 { write!(txt, "{:02X} ", c); }
2722 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
2723 println!("-------------------------------");
2724}
2725
2726fn des_decrypt_with_padding_iso_ecb()
2727{
2728 println!("des_decrypt_with_padding_iso_ecb()");
2729 use std::io::Write;
2730 use std::fmt::Write as _;
2731 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
2732
2733 let key = 0x_1234567890ABCDEF_u64;
2735 println!("K =\t{:#016X}", key);
2736 let mut a_des = DES::new_with_key_u64(key);
2737
2738 let message = "In the beginning God created the heavens and the earth.";
2739 println!("M =\t{}", message);
2740 let mut cipher = Vec::<u8>::new();
2741 a_des.encrypt_str_into_vec(&message, &mut cipher);
2742 print!("C (16 rounds) =\t");
2743 for c in cipher.clone()
2744 { print!("{:02X} ", c); }
2745 println!();
2746 let mut txt = String::new();
2747 for c in cipher.clone()
2748 { write!(txt, "{:02X} ", c); }
2749 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
2750
2751 let mut recovered = vec![0; 55];
2752 a_des.decrypt(cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
2753 print!("Ba (16 rounds) =\t");
2754 for b in recovered.clone()
2755 { print!("{:02X} ", b); }
2756 println!();
2757 let mut txt = String::new();
2758 for c in recovered.clone()
2759 { write!(txt, "{:02X} ", c); }
2760 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
2761
2762 let mut converted = String::new();
2763 unsafe { converted.as_mut_vec() }.append(&mut recovered);
2764
2765 println!("Bb (16 rounds) =\t{}", converted);
2766 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
2767 assert_eq!(converted, message);
2768 println!();
2769
2770 let key = 0x_1234567890ABCDEF_u64;
2772 println!("K =\t{:#016X}", key);
2773 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2774
2775 let message = "In the beginning God created the heavens and the earth.";
2776 println!("M =\t{}", message);
2777 let mut cipher = Vec::<u8>::new();
2778 a_des.encrypt_str_into_vec(&message, &mut cipher);
2779 print!("C (128 rounds) =\t");
2780 for c in cipher.clone()
2781 { print!("{:02X} ", c); }
2782 println!();
2783 let mut txt = String::new();
2784 for c in cipher.clone()
2785 { write!(txt, "{:02X} ", c); }
2786 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
2787
2788 let mut recovered = vec![0; 55];
2789 a_des.decrypt(cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
2790 print!("Ba (128 rounds) =\t");
2791 for b in recovered.clone()
2792 { print!("{:02X} ", b); }
2793 println!();
2794 let mut txt = String::new();
2795 for c in recovered.clone()
2796 { write!(txt, "{:02X} ", c); }
2797 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
2798
2799 let mut converted = String::new();
2800 unsafe { converted.as_mut_vec() }.append(&mut recovered);
2801
2802 println!("Bb (128 rounds) =\t{}", converted);
2803 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
2804 assert_eq!(converted, message);
2805 println!();
2806
2807 let key1 = 0x_1234567890ABCDEF_u64;
2809 let key2 = 0_u64;
2810 println!("K =\t{:#016X}", key);
2811 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2812 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2813
2814 let message = "In the beginning God created the heavens and the earth.";
2815 println!("M =\t{}", message);
2816 let mut cipher1 = Vec::<u8>::new();
2817 let mut cipher2 = Vec::<u8>::new();
2818 c_des.encrypt_str_into_vec(&message, &mut cipher1);
2819 d_des.encrypt_str_into_vec(&message, &mut cipher2);
2820 print!("C (0 rounds) =\t");
2821 for c in cipher1.clone()
2822 { print!("{:02X} ", c); }
2823 println!();
2824 let mut txt = String::new();
2825 for c in cipher1.clone()
2826 { write!(txt, "{:02X} ", c); }
2827 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2828 print!("D (0 rounds) =\t");
2829 for c in cipher2.clone()
2830 { print!("{:02X} ", c); }
2831 println!();
2832 let mut txt = String::new();
2833 for c in cipher2.clone()
2834 { write!(txt, "{:02X} ", c); }
2835 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
2836
2837 let mut recovered1 = vec![0; 55];
2838 let mut recovered2 = vec![0; 55];
2839 c_des.decrypt(cipher1.as_ptr(), cipher1.len() as u64, recovered1.as_mut_ptr());
2840 d_des.decrypt(cipher2.as_ptr(), cipher2.len() as u64, recovered2.as_mut_ptr());
2841 print!("B1a (0 rounds) =\t");
2842 for b in recovered1.clone()
2843 { print!("{:02X} ", b); }
2844 println!();
2845 let mut txt = String::new();
2846 for c in recovered1.clone()
2847 { write!(txt, "{:02X} ", c); }
2848 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
2849 print!("B2a (0 rounds) =\t");
2850 for b in recovered2.clone()
2851 { print!("{:02X} ", b); }
2852 println!();
2853 let mut txt = String::new();
2854 for c in recovered2.clone()
2855 { write!(txt, "{:02X} ", c); }
2856 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
2857
2858 let mut converted1 = String::new();
2859 let mut converted2 = String::new();
2860 unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
2861 unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
2862
2863 println!("B1b (0 rounds) =\t{}", converted1);
2864 assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
2865 assert_eq!(converted1, message);
2866 println!("B2b (0 rounds) =\t{}", converted2);
2867 assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
2868 assert_eq!(converted2, message);
2869 assert_eq!(converted1, converted1);
2870 println!();
2871
2872 let key = 0x_1234567890ABCDEF_u64;
2874 println!("K =\t{:#016X}", key);
2875 let mut a_des = DES::new_with_key_u64(key);
2876
2877 let message = "";
2878 println!("M =\t{}", message);
2879 let mut cipher = Vec::<u8>::new();
2880 a_des.encrypt_str_into_vec(&message, &mut cipher);
2881 print!("C =\t");
2882 for c in cipher.clone()
2883 { print!("{:02X} ", c); }
2884 println!();
2885 let mut txt = String::new();
2886 for c in cipher.clone()
2887 { write!(txt, "{:02X} ", c); }
2888 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
2889
2890 let mut recovered = vec![0; 8];
2891 let len = a_des.decrypt(cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
2892 print!("Ba =\t");
2893 for b in recovered.clone()
2894 { print!("{:02X} ", b); }
2895 println!();
2896 let mut txt = String::new();
2897 for c in recovered.clone()
2898 { write!(txt, "{:02X} ", c); }
2899 assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
2900
2901 let mut converted = String::new();
2902 unsafe { converted.as_mut_vec() }.append(&mut recovered);
2903 converted.truncate(len as usize);
2904
2905 println!("Bb =\t{}", converted);
2906 assert_eq!(converted, "");
2907 assert_eq!(converted, message);
2908 println!();
2909
2910 let key = 0x_1234567890ABCDEF_u64;
2912 println!("K =\t{:#016X}", key);
2913 let mut a_des = DES::new_with_key_u64(key);
2914
2915 let message = "7 bytes";
2916 println!("M =\t{}", message);
2917 let mut cipher = Vec::<u8>::new();
2918 a_des.encrypt_str_into_vec(&message, &mut cipher);
2919 print!("C =\t");
2920 for c in cipher.clone()
2921 { print!("{:02X} ", c); }
2922 println!();
2923 let mut txt = String::new();
2924 for c in cipher.clone()
2925 { write!(txt, "{:02X} ", c); }
2926 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
2927
2928 let mut recovered = vec![0; 8];
2929 let len = a_des.decrypt(cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
2930 print!("Ba =\t");
2931 for b in recovered.clone()
2932 { print!("{:02X} ", b); }
2933 println!();
2934 let mut txt = String::new();
2935 for c in recovered.clone()
2936 { write!(txt, "{:02X} ", c); }
2937 assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
2938
2939 let mut converted = String::new();
2940 unsafe { converted.as_mut_vec() }.append(&mut recovered);
2941 converted.truncate(len as usize);
2942
2943 println!("Bb =\t{}", converted);
2944 assert_eq!(converted, "7 bytes");
2945 assert_eq!(converted, message);
2946 println!();
2947
2948 let key = 0x_1234567890ABCDEF_u64;
2950 println!("K =\t{:#016X}", key);
2951 let mut a_des = DES::new_with_key_u64(key);
2952
2953 let message = "I am OK.";
2954 println!("M =\t{}", message);
2955 let mut cipher = Vec::<u8>::new();
2956 a_des.encrypt_str_into_vec(&message, &mut cipher);
2957 print!("C =\t");
2958 for c in cipher.clone()
2959 { print!("{:02X} ", c); }
2960 println!();
2961 let mut txt = String::new();
2962 for c in cipher.clone()
2963 { write!(txt, "{:02X} ", c); }
2964 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
2965
2966 let mut recovered = vec![0; 16];
2967 let len = a_des.decrypt(cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
2968 print!("Ba =\t");
2969 for b in recovered.clone()
2970 { print!("{:02X} ", b); }
2971 println!();
2972 let mut txt = String::new();
2973 for c in recovered.clone()
2974 { write!(txt, "{:02X} ", c); }
2975 assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
2976
2977 let mut converted = String::new();
2978 unsafe { converted.as_mut_vec() }.append(&mut recovered);
2979 converted.truncate(len as usize);
2980
2981 println!("Bb =\t{}", converted);
2982 assert_eq!(converted, "I am OK.");
2983 assert_eq!(converted, message);
2984 println!();
2985
2986 let key = 0x_1234567890ABCDEF_u64;
2988 println!("K =\t{:#016X}", key);
2989 let mut a_des = DES::new_with_key_u64(key);
2990
2991 let message = "PARK Youngho";
2992 println!("M =\t{}", message);
2993 let mut cipher = Vec::<u8>::new();
2994 a_des.encrypt_str_into_vec(&message, &mut cipher);
2995 print!("C =\t");
2996 for c in cipher.clone()
2997 { print!("{:02X} ", c); }
2998 println!();
2999 let mut txt = String::new();
3000 for c in cipher.clone()
3001 { write!(txt, "{:02X} ", c); }
3002 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
3003
3004 let mut recovered = vec![0; 16];
3005 let len = a_des.decrypt(cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
3006 print!("Ba =\t");
3007 for b in recovered.clone()
3008 { print!("{:02X} ", b); }
3009 println!();
3010 let mut txt = String::new();
3011 for c in recovered.clone()
3012 { write!(txt, "{:02X} ", c); }
3013 assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
3014
3015 let mut converted = String::new();
3016 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3017 converted.truncate(len as usize);
3018
3019 println!("Bb =\t{}", converted);
3020 assert_eq!(converted, "PARK Youngho");
3021 assert_eq!(converted, message);
3022 println!();
3023
3024
3025 let key = 0x_1234567890ABCDEF_u64;
3027 println!("K =\t{:#016X}", key);
3028 let mut a_des = DES::new_with_key_u64(key);
3029
3030 let message = "고맙습니다.";
3031 println!("M =\t{}", message);
3032 let mut cipher = Vec::<u8>::new();
3033 a_des.encrypt_str_into_vec(&message, &mut cipher);
3034 print!("C =\t");
3035 for c in cipher.clone()
3036 { print!("{:02X} ", c); }
3037 println!();
3038 let mut txt = String::new();
3039 for c in cipher.clone()
3040 { write!(txt, "{:02X} ", c); }
3041 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
3042
3043 let mut recovered = vec![0; 24];
3044 let len = a_des.decrypt(cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
3045 print!("Ba =\t");
3046 for b in recovered.clone()
3047 { print!("{:02X} ", b); }
3048 println!();
3049 let mut txt = String::new();
3050 for c in recovered.clone()
3051 { write!(txt, "{:02X} ", c); }
3052 assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
3053
3054 let mut converted = String::new();
3055 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3056 converted.truncate(len as usize);
3057
3058 println!("Bb =\t{}", converted);
3059 assert_eq!(converted, "고맙습니다.");
3060 assert_eq!(converted, message);
3061 println!("-------------------------------");
3062}
3063
3064fn des_decrypt_with_padding_iso_ecb_into_vec()
3065{
3066 println!("des_decrypt_with_padding_iso_ecb_into_vec()");
3067 use std::io::Write;
3068 use std::fmt::Write as _;
3069 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
3070
3071 let key = 0x_1234567890ABCDEF_u64;
3073 println!("K =\t{:#016X}", key);
3074 let mut a_des = DES::new_with_key_u64(key);
3075
3076 let message = "In the beginning God created the heavens and the earth.";
3077 println!("M =\t{}", message);
3078 let mut cipher = Vec::<u8>::new();
3079 a_des.encrypt_str_into_vec(&message, &mut cipher);
3080 print!("C (16 rounds) =\t");
3081 for c in cipher.clone()
3082 { print!("{:02X} ", c); }
3083 println!();
3084 let mut txt = String::new();
3085 for c in cipher.clone()
3086 { write!(txt, "{:02X} ", c); }
3087 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
3088
3089 let mut recovered = Vec::<u8>::new();
3090 a_des.decrypt_into_vec(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3091 print!("Ba (16 rounds) =\t");
3092 for b in recovered.clone()
3093 { print!("{:02X} ", b); }
3094 println!();
3095 let mut txt = String::new();
3096 for c in recovered.clone()
3097 { write!(txt, "{:02X} ", c); }
3098 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
3099
3100 let mut converted = String::new();
3101 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3102
3103 println!("Bb (16 rounds) =\t{}", converted);
3104 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
3105 assert_eq!(converted, message);
3106 println!();
3107
3108 let key = 0x_1234567890ABCDEF_u64;
3110 println!("K =\t{:#016X}", key);
3111 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
3112
3113 let message = "In the beginning God created the heavens and the earth.";
3114 println!("M =\t{}", message);
3115 let mut cipher = Vec::<u8>::new();
3116 a_des.encrypt_str_into_vec(&message, &mut cipher);
3117 print!("C (128 rounds) =\t");
3118 for c in cipher.clone()
3119 { print!("{:02X} ", c); }
3120 println!();
3121 let mut txt = String::new();
3122 for c in cipher.clone()
3123 { write!(txt, "{:02X} ", c); }
3124 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
3125
3126 let mut recovered = Vec::<u8>::new();
3127 a_des.decrypt_into_vec(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3128 print!("Ba (128 rounds) =\t");
3129 for b in recovered.clone()
3130 { print!("{:02X} ", b); }
3131 println!();
3132 let mut txt = String::new();
3133 for c in recovered.clone()
3134 { write!(txt, "{:02X} ", c); }
3135 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
3136
3137 let mut converted = String::new();
3138 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3139
3140 println!("Bb (128 rounds) =\t{}", converted);
3141 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
3142 assert_eq!(converted, message);
3143 println!();
3144
3145 let key1 = 0x_1234567890ABCDEF_u64;
3147 let key2 = 0_u64;
3148 println!("K =\t{:#016X}", key);
3149 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
3150 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
3151
3152 let message = "In the beginning God created the heavens and the earth.";
3153 println!("M =\t{}", message);
3154 let mut cipher1 = Vec::<u8>::new();
3155 let mut cipher2 = Vec::<u8>::new();
3156 c_des.encrypt_str_into_vec(&message, &mut cipher1);
3157 d_des.encrypt_str_into_vec(&message, &mut cipher2);
3158 print!("C (0 rounds) =\t");
3159 for c in cipher1.clone()
3160 { print!("{:02X} ", c); }
3161 println!();
3162 let mut txt = String::new();
3163 for c in cipher1.clone()
3164 { write!(txt, "{:02X} ", c); }
3165 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
3166 print!("D (0 rounds) =\t");
3167 for c in cipher2.clone()
3168 { print!("{:02X} ", c); }
3169 println!();
3170 let mut txt = String::new();
3171 for c in cipher2.clone()
3172 { write!(txt, "{:02X} ", c); }
3173 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
3174
3175 let mut recovered1 = Vec::<u8>::new();
3176 let mut recovered2 = Vec::<u8>::new();
3177 c_des.decrypt_into_vec(cipher1.as_ptr(), cipher1.len() as u64, &mut recovered1);
3178 d_des.decrypt_into_vec(cipher2.as_ptr(), cipher2.len() as u64, &mut recovered2);
3179 print!("B1a (0 rounds) =\t");
3180 for b in recovered1.clone()
3181 { print!("{:02X} ", b); }
3182 println!();
3183 let mut txt = String::new();
3184 for c in recovered1.clone()
3185 { write!(txt, "{:02X} ", c); }
3186 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
3187 print!("B2a (0 rounds) =\t");
3188 for b in recovered2.clone()
3189 { print!("{:02X} ", b); }
3190 println!();
3191 let mut txt = String::new();
3192 for c in recovered2.clone()
3193 { write!(txt, "{:02X} ", c); }
3194 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
3195
3196 let mut converted1 = String::new();
3197 let mut converted2 = String::new();
3198 unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
3199 unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
3200
3201 println!("B1b (0 rounds) =\t{}", converted1);
3202 assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
3203 assert_eq!(converted1, message);
3204 println!("B2b (0 rounds) =\t{}", converted2);
3205 assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
3206 assert_eq!(converted2, message);
3207 assert_eq!(converted1, converted1);
3208 println!();
3209
3210 let key = 0x_1234567890ABCDEF_u64;
3212 println!("K =\t{:#016X}", key);
3213 let mut a_des = DES::new_with_key_u64(key);
3214
3215 let message = "";
3216 println!("M =\t{}", message);
3217 let mut cipher = Vec::<u8>::new();
3218 a_des.encrypt_str_into_vec(&message, &mut cipher);
3219 print!("C =\t");
3220 for c in cipher.clone()
3221 { print!("{:02X} ", c); }
3222 println!();
3223 let mut txt = String::new();
3224 for c in cipher.clone()
3225 { write!(txt, "{:02X} ", c); }
3226 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
3227
3228 let mut recovered = Vec::<u8>::new();
3229 a_des.decrypt_into_vec(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3230 print!("Ba =\t");
3231 for b in recovered.clone()
3232 { print!("{:02X} ", b); }
3233 println!();
3234 let mut txt = String::new();
3235 for c in recovered.clone()
3236 { write!(txt, "{:02X} ", c); }
3237 assert_eq!(txt, "");
3238
3239 let mut converted = String::new();
3240 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3241
3242 println!("Bb =\t{}", converted);
3243 assert_eq!(converted, "");
3244 assert_eq!(converted, message);
3245 println!();
3246
3247 let key = 0x_1234567890ABCDEF_u64;
3249 println!("K =\t{:#016X}", key);
3250 let mut a_des = DES::new_with_key_u64(key);
3251
3252 let message = "7 bytes";
3253 println!("M =\t{}", message);
3254 let mut cipher = Vec::<u8>::new();
3255 a_des.encrypt_str_into_vec(&message, &mut cipher);
3256 print!("C =\t");
3257 for c in cipher.clone()
3258 { print!("{:02X} ", c); }
3259 println!();
3260 let mut txt = String::new();
3261 for c in cipher.clone()
3262 { write!(txt, "{:02X} ", c); }
3263 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
3264
3265 let mut recovered = Vec::<u8>::new();
3266 a_des.decrypt_into_vec(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3267 print!("Ba =\t");
3268 for b in recovered.clone()
3269 { print!("{:02X} ", b); }
3270 println!();
3271 let mut txt = String::new();
3272 for c in recovered.clone()
3273 { write!(txt, "{:02X} ", c); }
3274 assert_eq!(txt, "37 20 62 79 74 65 73 ");
3275
3276 let mut converted = String::new();
3277 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3278
3279 println!("Bb =\t{}", converted);
3280 assert_eq!(converted, "7 bytes");
3281 assert_eq!(converted, message);
3282 println!();
3283
3284 let key = 0x_1234567890ABCDEF_u64;
3286 println!("K =\t{:#016X}", key);
3287 let mut a_des = DES::new_with_key_u64(key);
3288
3289 let message = "I am OK.";
3290 println!("M =\t{}", message);
3291 let mut cipher = Vec::<u8>::new();
3292 a_des.encrypt_str_into_vec(&message, &mut cipher);
3293 print!("C =\t");
3294 for c in cipher.clone()
3295 { print!("{:02X} ", c); }
3296 println!();
3297 let mut txt = String::new();
3298 for c in cipher.clone()
3299 { write!(txt, "{:02X} ", c); }
3300 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
3301
3302 let mut recovered = Vec::<u8>::new();
3303 a_des.decrypt_into_vec(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3304 print!("Ba =\t");
3305 for b in recovered.clone()
3306 { print!("{:02X} ", b); }
3307 println!();
3308 let mut txt = String::new();
3309 for c in recovered.clone()
3310 { write!(txt, "{:02X} ", c); }
3311 assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E ");
3312
3313 let mut converted = String::new();
3314 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3315
3316 println!("Bb =\t{}", converted);
3317 assert_eq!(converted, "I am OK.");
3318 assert_eq!(converted, message);
3319 println!();
3320
3321 let key = 0x_1234567890ABCDEF_u64;
3323 println!("K =\t{:#016X}", key);
3324 let mut a_des = DES::new_with_key_u64(key);
3325
3326 let message = "PARK Youngho";
3327 println!("M =\t{}", message);
3328 let mut cipher = Vec::<u8>::new();
3329 a_des.encrypt_str_into_vec(&message, &mut cipher);
3330 print!("C =\t");
3331 for c in cipher.clone()
3332 { print!("{:02X} ", c); }
3333 println!();
3334 let mut txt = String::new();
3335 for c in cipher.clone()
3336 { write!(txt, "{:02X} ", c); }
3337 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
3338
3339 let mut recovered = Vec::<u8>::new();
3340 a_des.decrypt_into_vec(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3341 print!("Ba =\t");
3342 for b in recovered.clone()
3343 { print!("{:02X} ", b); }
3344 println!();
3345 let mut txt = String::new();
3346 for c in recovered.clone()
3347 { write!(txt, "{:02X} ", c); }
3348 assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F ");
3349
3350 let mut converted = String::new();
3351 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3352
3353 println!("Bb =\t{}", converted);
3354 assert_eq!(converted, "PARK Youngho");
3355 assert_eq!(converted, message);
3356 println!();
3357
3358 let key = 0x_1234567890ABCDEF_u64;
3360 println!("K =\t{:#016X}", key);
3361 let mut a_des = DES::new_with_key_u64(key);
3362
3363 let message = "고맙습니다.";
3364 println!("M =\t{}", message);
3365 let mut cipher = Vec::<u8>::new();
3366 a_des.encrypt_str_into_vec(&message, &mut cipher);
3367 print!("C =\t");
3368 for c in cipher.clone()
3369 { print!("{:02X} ", c); }
3370 println!();
3371 let mut txt = String::new();
3372 for c in cipher.clone()
3373 { write!(txt, "{:02X} ", c); }
3374 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
3375
3376 let mut recovered = Vec::<u8>::new();
3377 a_des.decrypt_into_vec(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3378 print!("Ba =\t");
3379 for b in recovered.clone()
3380 { print!("{:02X} ", b); }
3381 println!();
3382 let mut txt = String::new();
3383 for c in recovered.clone()
3384 { write!(txt, "{:02X} ", c); }
3385 assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E ");
3386
3387 let mut converted = String::new();
3388 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3389
3390 println!("Bb =\t{}", converted);
3391 assert_eq!(converted, "고맙습니다.");
3392 assert_eq!(converted, message);
3393 println!("-------------------------------");
3394}
3395
3396fn des_decrypt_with_padding_iso_ecb_into_array()
3397{
3398 println!("des_decrypt_with_padding_iso_ecb_into_array()");
3399 use std::io::Write;
3400 use std::fmt::Write as _;
3401 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
3402
3403 let key = 0x_1234567890ABCDEF_u64;
3405 println!("K =\t{:#016X}", key);
3406 let mut a_des = DES::new_with_key_u64(key);
3407
3408 let message = "In the beginning God created the heavens and the earth.";
3409 println!("M =\t{}", message);
3410 let mut cipher = Vec::<u8>::new();
3411 a_des.encrypt_str_into_vec(&message, &mut cipher);
3412 print!("C (16 rounds) =\t");
3413 for c in cipher.clone()
3414 { print!("{:02X} ", c); }
3415 println!();
3416 let mut txt = String::new();
3417 for c in cipher.clone()
3418 { write!(txt, "{:02X} ", c); }
3419 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
3420
3421 let mut recovered = [0u8; 56];
3422 let len = a_des.decrypt_into_array(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3423 print!("Ba (16 rounds) =\t");
3424 for b in recovered.clone()
3425 { print!("{:02X} ", b); }
3426 println!();
3427 let mut txt = String::new();
3428 for c in recovered.clone()
3429 { write!(txt, "{:02X} ", c); }
3430 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
3431
3432 let mut converted = String::new();
3433 unsafe { converted.as_mut_vec() }.write(&recovered);
3434 unsafe { converted.as_mut_vec() }.truncate(len as usize);
3435 println!("Bb (16 rounds) =\t{}", converted);
3436 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
3437 assert_eq!(converted, message);
3438 println!();
3439
3440 let key = 0x_1234567890ABCDEF_u64;
3442 println!("K =\t{:#016X}", key);
3443 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
3444
3445 let message = "In the beginning God created the heavens and the earth.";
3446 println!("M =\t{}", message);
3447 let mut cipher = Vec::<u8>::new();
3448 a_des.encrypt_str_into_vec(&message, &mut cipher);
3449 print!("C (128 rounds) =\t");
3450 for c in cipher.clone()
3451 { print!("{:02X} ", c); }
3452 println!();
3453 let mut txt = String::new();
3454 for c in cipher.clone()
3455 { write!(txt, "{:02X} ", c); }
3456 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
3457
3458 let mut recovered = [0u8; 56];
3459 let len = a_des.decrypt_into_array(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3460 print!("Ba (16 rounds) =\t");
3461 for b in recovered.clone()
3462 { print!("{:02X} ", b); }
3463 println!();
3464 let mut txt = String::new();
3465 for c in recovered.clone()
3466 { write!(txt, "{:02X} ", c); }
3467 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
3468
3469 let mut converted = String::new();
3470 unsafe { converted.as_mut_vec() }.write(&recovered);
3471 unsafe { converted.as_mut_vec() }.truncate(len as usize);
3472 println!("Bb (16 rounds) =\t{}", converted);
3473 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
3474 assert_eq!(converted, message);
3475 println!();
3476
3477 let key1 = 0x_1234567890ABCDEF_u64;
3479 let key2 = 0_u64;
3480 println!("K =\t{:#016X}", key);
3481 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
3482 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
3483
3484 let message = "In the beginning God created the heavens and the earth.";
3485 println!("M =\t{}", message);
3486 let mut cipher1 = Vec::<u8>::new();
3487 let mut cipher2 = Vec::<u8>::new();
3488 c_des.encrypt_str_into_vec(&message, &mut cipher1);
3489 d_des.encrypt_str_into_vec(&message, &mut cipher2);
3490 print!("C (0 rounds) =\t");
3491 for c in cipher1.clone()
3492 { print!("{:02X} ", c); }
3493 println!();
3494 let mut txt = String::new();
3495 for c in cipher1.clone()
3496 { write!(txt, "{:02X} ", c); }
3497 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
3498 print!("D (0 rounds) =\t");
3499 for c in cipher2.clone()
3500 { print!("{:02X} ", c); }
3501 println!();
3502 let mut txt = String::new();
3503 for c in cipher2.clone()
3504 { write!(txt, "{:02X} ", c); }
3505 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
3506
3507 let mut recovered1 = [0u8; 56];
3508 let mut recovered2 = [0u8; 56];
3509 let len1 = c_des.decrypt_into_array(cipher1.as_ptr(), cipher1.len() as u64, &mut recovered1);
3510 let len2 = d_des.decrypt_into_array(cipher2.as_ptr(), cipher2.len() as u64, &mut recovered2);
3511 print!("B1a (0 rounds) =\t");
3512 for b in recovered1.clone()
3513 { print!("{:02X} ", b); }
3514 println!();
3515 let mut txt = String::new();
3516 for c in recovered1.clone()
3517 { write!(txt, "{:02X} ", c); }
3518 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
3519 print!("B2a (0 rounds) =\t");
3520 for b in recovered2.clone()
3521 { print!("{:02X} ", b); }
3522 println!();
3523 let mut txt = String::new();
3524 for c in recovered.clone()
3525 { write!(txt, "{:02X} ", c); }
3526 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
3527
3528 let mut converted1 = String::new();
3529 let mut converted2 = String::new();
3530 unsafe { converted1.as_mut_vec() }.write(&recovered1);
3531 unsafe { converted2.as_mut_vec() }.write(&recovered2);
3532 unsafe { converted1.as_mut_vec() }.truncate(len1 as usize);
3533 unsafe { converted2.as_mut_vec() }.truncate(len2 as usize);
3534 println!("B1b (0 rounds) =\t{}", converted1);
3535 println!("B2b (0 rounds) =\t{}", converted2);
3536 assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
3537 assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
3538 assert_eq!(converted1, message);
3539 assert_eq!(converted2, message);
3540 assert_eq!(converted1, converted2);
3541 println!();
3542
3543 let key = 0x_1234567890ABCDEF_u64;
3545 println!("K =\t{:#016X}", key);
3546 let mut a_des = DES::new_with_key_u64(key);
3547
3548 let message = "";
3549 println!("M =\t{}", message);
3550 let mut cipher = Vec::<u8>::new();
3551 a_des.encrypt_str_into_vec(&message, &mut cipher);
3552 print!("C =\t");
3553 for c in cipher.clone()
3554 { print!("{:02X} ", c); }
3555 println!();
3556 let mut txt = String::new();
3557 for c in cipher.clone()
3558 { write!(txt, "{:02X} ", c); }
3559 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
3560
3561 let mut recovered = [0u8; 8];
3562 let len = a_des.decrypt_into_array(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3563
3564 print!("Ba =\t");
3565 for b in recovered.clone()
3566 { print!("{:02X} ", b); }
3567 println!();
3568 let mut txt = String::new();
3569 for c in recovered.clone()
3570 { write!(txt, "{:02X} ", c); }
3571 assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
3572
3573 let mut converted = String::new();
3574 unsafe { converted.as_mut_vec() }.write(&recovered);
3575 unsafe { converted.as_mut_vec() }.truncate(len as usize);
3576 println!("Bb =\t{}", converted);
3577 assert_eq!(converted, "");
3578 assert_eq!(converted, message);
3579 println!();
3580
3581 let key = 0x_1234567890ABCDEF_u64;
3583 println!("K =\t{:#016X}", key);
3584 let mut a_des = DES::new_with_key_u64(key);
3585
3586 let message = "7 bytes";
3587 println!("M =\t{}", message);
3588 let mut cipher = Vec::<u8>::new();
3589 a_des.encrypt_str_into_vec(&message, &mut cipher);
3590 print!("C =\t");
3591 for c in cipher.clone()
3592 { print!("{:02X} ", c); }
3593 println!();
3594 let mut txt = String::new();
3595 for c in cipher.clone()
3596 { write!(txt, "{:02X} ", c); }
3597 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
3598
3599 let mut recovered = [0u8; 8];
3600 let len = a_des.decrypt_into_array(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3601
3602 print!("Ba =\t");
3603 for b in recovered.clone()
3604 { print!("{:02X} ", b); }
3605 println!();
3606 let mut txt = String::new();
3607 for c in recovered.clone()
3608 { write!(txt, "{:02X} ", c); }
3609 assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
3610
3611 let mut converted = String::new();
3612 unsafe { converted.as_mut_vec() }.write(&recovered);
3613 unsafe { converted.as_mut_vec() }.truncate(len as usize);
3614 println!("Bb =\t{}", converted);
3615 assert_eq!(converted, "7 bytes");
3616 assert_eq!(converted, message);
3617 println!();
3618
3619 let key = 0x_1234567890ABCDEF_u64;
3621 println!("K =\t{:#016X}", key);
3622 let mut a_des = DES::new_with_key_u64(key);
3623
3624 let message = "I am OK.";
3625 println!("M =\t{}", message);
3626 let mut cipher = Vec::<u8>::new();
3627 a_des.encrypt_str_into_vec(&message, &mut cipher);
3628 print!("C =\t");
3629 for c in cipher.clone()
3630 { print!("{:02X} ", c); }
3631 println!();
3632 let mut txt = String::new();
3633 for c in cipher.clone()
3634 { write!(txt, "{:02X} ", c); }
3635 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
3636
3637 let mut recovered = [0u8; 16];
3638 let len = a_des.decrypt_into_array(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3639
3640 print!("Ba =\t");
3641 for b in recovered.clone()
3642 { print!("{:02X} ", b); }
3643 println!();
3644 let mut txt = String::new();
3645 for c in recovered.clone()
3646 { write!(txt, "{:02X} ", c); }
3647 assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
3648
3649 let mut converted = String::new();
3650 unsafe { converted.as_mut_vec() }.write(&recovered);
3651 unsafe { converted.as_mut_vec() }.truncate(len as usize);
3652 println!("Bb =\t{}", converted);
3653 assert_eq!(converted, "I am OK.");
3654 assert_eq!(converted, message);
3655 println!();
3656
3657 let key = 0x_1234567890ABCDEF_u64;
3659 println!("K =\t{:#016X}", key);
3660 let mut a_des = DES::new_with_key_u64(key);
3661
3662 let message = "PARK Youngho";
3663 println!("M =\t{}", message);
3664 let mut cipher = Vec::<u8>::new();
3665 a_des.encrypt_str_into_vec(&message, &mut cipher);
3666 print!("C =\t");
3667 for c in cipher.clone()
3668 { print!("{:02X} ", c); }
3669 println!();
3670 let mut txt = String::new();
3671 for c in cipher.clone()
3672 { write!(txt, "{:02X} ", c); }
3673 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
3674
3675 let mut recovered = [0u8; 16];
3676 let len = a_des.decrypt_into_array(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3677
3678 print!("Ba =\t");
3679 for b in recovered.clone()
3680 { print!("{:02X} ", b); }
3681 println!();
3682 let mut txt = String::new();
3683 for c in recovered.clone()
3684 { write!(txt, "{:02X} ", c); }
3685 assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
3686
3687 let mut converted = String::new();
3688 unsafe { converted.as_mut_vec() }.write(&recovered);
3689 unsafe { converted.as_mut_vec() }.truncate(len as usize);
3690 println!("Bb =\t{}", converted);
3691 assert_eq!(converted, "PARK Youngho");
3692 assert_eq!(converted, message);
3693 println!();
3694
3695 let key = 0x_1234567890ABCDEF_u64;
3697 println!("K =\t{:#016X}", key);
3698 let mut a_des = DES::new_with_key_u64(key);
3699
3700 let message = "고맙습니다.";
3701 println!("M =\t{}", message);
3702 let mut cipher = Vec::<u8>::new();
3703 a_des.encrypt_str_into_vec(&message, &mut cipher);
3704 print!("C =\t");
3705 for c in cipher.clone()
3706 { print!("{:02X} ", c); }
3707 println!();
3708 let mut txt = String::new();
3709 for c in cipher.clone()
3710 { write!(txt, "{:02X} ", c); }
3711 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
3712
3713 let mut recovered = [0u8; 24];
3714 let len = a_des.decrypt_into_array(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3715
3716 print!("Ba =\t");
3717 for b in recovered.clone()
3718 { print!("{:02X} ", b); }
3719 println!();
3720 let mut txt = String::new();
3721 for c in recovered.clone()
3722 { write!(txt, "{:02X} ", c); }
3723 assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
3724
3725 let mut converted = String::new();
3726 unsafe { converted.as_mut_vec() }.write(&recovered);
3727 unsafe { converted.as_mut_vec() }.truncate(len as usize);
3728 println!("Bb =\t{}", converted);
3729 assert_eq!(converted, "고맙습니다.");
3730 assert_eq!(converted, message);
3731 println!("-------------------------------");
3732}
3733
3734fn des_decrypt_with_padding_iso_ecb_into_string()
3735{
3736 println!("des_decrypt_with_padding_iso_ecb_into_string()");
3737 use std::io::Write;
3738 use std::fmt::Write as _;
3739 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
3740
3741 let key = 0x_1234567890ABCDEF_u64;
3743 println!("K =\t{:#016X}", key);
3744 let mut a_des = DES::new_with_key_u64(key);
3745
3746 let message = "In the beginning God created the heavens and the earth.";
3747 println!("M =\t{}", message);
3748 let mut cipher = Vec::<u8>::new();
3749 a_des.encrypt_str_into_vec(&message, &mut cipher);
3750 print!("C (16 rounds) =\t");
3751 for c in cipher.clone()
3752 { print!("{:02X} ", c); }
3753 println!();
3754 let mut txt = String::new();
3755 for c in cipher.clone()
3756 { write!(txt, "{:02X} ", c); }
3757 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
3758
3759 let mut recovered = String::new();
3760 a_des.decrypt_into_string(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3761 println!("B (16 rounds) =\t{}", recovered);
3762 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
3763 assert_eq!(recovered, message);
3764 println!();
3765
3766 let key = 0x_1234567890ABCDEF_u64;
3768 println!("K =\t{:#016X}", key);
3769 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
3770
3771 let message = "In the beginning God created the heavens and the earth.";
3772 println!("M =\t{}", message);
3773 let mut cipher = Vec::<u8>::new();
3774 a_des.encrypt_str_into_vec(&message, &mut cipher);
3775 print!("C (128 rounds) =\t");
3776 for c in cipher.clone()
3777 { print!("{:02X} ", c); }
3778 println!();
3779 let mut txt = String::new();
3780 for c in cipher.clone()
3781 { write!(txt, "{:02X} ", c); }
3782 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
3783
3784 let mut recovered = String::new();
3785 a_des.decrypt_into_string(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3786 println!("B (128 rounds) =\t{}", recovered);
3787 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
3788 assert_eq!(recovered, message);
3789 println!();
3790
3791 let key1 = 0x_1234567890ABCDEF_u64;
3793 let key2 = 0_u64;
3794 println!("K =\t{:#016X}", key);
3795 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
3796 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
3797
3798 let message = "In the beginning God created the heavens and the earth.";
3799 println!("M =\t{}", message);
3800 let mut cipher1 = Vec::<u8>::new();
3801 let mut cipher2 = Vec::<u8>::new();
3802 c_des.encrypt_str_into_vec(&message, &mut cipher1);
3803 d_des.encrypt_str_into_vec(&message, &mut cipher2);
3804 print!("C (0 rounds) =\t");
3805 for c in cipher1.clone()
3806 { print!("{:02X} ", c); }
3807 println!();
3808 let mut txt = String::new();
3809 for c in cipher1.clone()
3810 { write!(txt, "{:02X} ", c); }
3811 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
3812 print!("D (0 rounds) =\t");
3813 for c in cipher2.clone()
3814 { print!("{:02X} ", c); }
3815 println!();
3816 let mut txt = String::new();
3817 for c in cipher2.clone()
3818 { write!(txt, "{:02X} ", c); }
3819 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
3820
3821 let mut recovered1 = String::new();
3822 let mut recovered2 = String::new();
3823 c_des.decrypt_into_string(cipher1.as_ptr(), cipher1.len() as u64, &mut recovered1);
3824 d_des.decrypt_into_string(cipher2.as_ptr(), cipher2.len() as u64, &mut recovered2);
3825 println!("B1 (0 rounds) =\t{}", recovered1);
3826 println!("B2 (0 rounds) =\t{}", recovered2);
3827 assert_eq!(recovered1, "In the beginning God created the heavens and the earth.");
3828 assert_eq!(recovered2, "In the beginning God created the heavens and the earth.");
3829 assert_eq!(recovered1, message);
3830 assert_eq!(recovered2, message);
3831 assert_eq!(recovered1, recovered2);
3832 println!();
3833
3834 let key = 0x_1234567890ABCDEF_u64;
3836 println!("K =\t{:#016X}", key);
3837 let mut a_des = DES::new_with_key_u64(key);
3838
3839 let message = "";
3840 println!("M =\t{}", message);
3841 let mut cipher = Vec::<u8>::new();
3842 a_des.encrypt_str_into_vec(&message, &mut cipher);
3843 print!("C =\t");
3844 for c in cipher.clone()
3845 { print!("{:02X} ", c); }
3846 println!();
3847 let mut txt = String::new();
3848 for c in cipher.clone()
3849 { write!(txt, "{:02X} ", c); }
3850 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
3851
3852 let mut recovered = String::new();
3853 a_des.decrypt_into_string(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3854 println!("B =\t{}", recovered);
3855 assert_eq!(recovered, "");
3856 assert_eq!(recovered, message);
3857 println!();
3858
3859 let key = 0x_1234567890ABCDEF_u64;
3861 println!("K =\t{:#016X}", key);
3862 let mut a_des = DES::new_with_key_u64(key);
3863
3864 let message = "7 bytes";
3865 println!("M =\t{}", message);
3866 let mut cipher = Vec::<u8>::new();
3867 a_des.encrypt_str_into_vec(&message, &mut cipher);
3868 print!("C =\t");
3869 for c in cipher.clone()
3870 { print!("{:02X} ", c); }
3871 println!();
3872 let mut txt = String::new();
3873 for c in cipher.clone()
3874 { write!(txt, "{:02X} ", c); }
3875 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
3876
3877 let mut recovered = String::new();
3878 a_des.decrypt_into_string(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3879 println!("B =\t{}", recovered);
3880 assert_eq!(recovered, "7 bytes");
3881 assert_eq!(recovered, message);
3882 println!();
3883
3884 let key = 0x_1234567890ABCDEF_u64;
3886 println!("K =\t{:#016X}", key);
3887 let mut a_des = DES::new_with_key_u64(key);
3888
3889 let message = "I am OK.";
3890 println!("M =\t{}", message);
3891 let mut cipher = Vec::<u8>::new();
3892 a_des.encrypt_str_into_vec(&message, &mut cipher);
3893 print!("C =\t");
3894 for c in cipher.clone()
3895 { print!("{:02X} ", c); }
3896 println!();
3897 let mut txt = String::new();
3898 for c in cipher.clone()
3899 { write!(txt, "{:02X} ", c); }
3900 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
3901
3902 let mut recovered = String::new();
3903 a_des.decrypt_into_string(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3904 println!("B =\t{}", recovered);
3905 assert_eq!(recovered, "I am OK.");
3906 assert_eq!(recovered, message);
3907 println!();
3908
3909 let key = 0x_1234567890ABCDEF_u64;
3911 println!("K =\t{:#016X}", key);
3912 let mut a_des = DES::new_with_key_u64(key);
3913
3914 let message = "PARK Youngho";
3915 println!("M =\t{}", message);
3916 let mut cipher = Vec::<u8>::new();
3917 a_des.encrypt_str_into_vec(&message, &mut cipher);
3918 print!("C =\t");
3919 for c in cipher.clone()
3920 { print!("{:02X} ", c); }
3921 println!();
3922 let mut txt = String::new();
3923 for c in cipher.clone()
3924 { write!(txt, "{:02X} ", c); }
3925 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
3926
3927 let mut recovered = String::new();
3928 a_des.decrypt_into_string(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3929 println!("B =\t{}", recovered);
3930 assert_eq!(recovered, "PARK Youngho");
3931 assert_eq!(recovered, message);
3932 println!();
3933
3934 let key = 0x_1234567890ABCDEF_u64;
3936 println!("K =\t{:#016X}", key);
3937 let mut a_des = DES::new_with_key_u64(key);
3938
3939 let message = "고맙습니다.";
3940 println!("M =\t{}", message);
3941 let mut cipher = Vec::<u8>::new();
3942 a_des.encrypt_str_into_vec(&message, &mut cipher);
3943 print!("C =\t");
3944 for c in cipher.clone()
3945 { print!("{:02X} ", c); }
3946 println!();
3947 let mut txt = String::new();
3948 for c in cipher.clone()
3949 { write!(txt, "{:02X} ", c); }
3950 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
3951
3952 let mut recovered = String::new();
3953 a_des.decrypt_into_string(cipher.as_ptr(), cipher.len() as u64, &mut recovered);
3954 println!("B =\t{}", recovered);
3955 assert_eq!(recovered, "고맙습니다.");
3956 assert_eq!(recovered, message);
3957 println!("-------------------------------");
3958}
3959
3960fn des_decrypt_vec_with_padding_iso_ecb()
3961{
3962 println!("des_decrypt_vec_with_padding_iso_ecb()");
3963 use std::io::Write;
3964 use std::fmt::Write as _;
3965 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
3966
3967 let key = 0x_1234567890ABCDEF_u64;
3969 println!("K =\t{:#016X}", key);
3970 let mut a_des = DES::new_with_key_u64(key);
3971
3972 let message = "In the beginning God created the heavens and the earth.";
3973 println!("M =\t{}", message);
3974 let mut cipher = Vec::<u8>::new();
3975 a_des.encrypt_str_into_vec(&message, &mut cipher);
3976 print!("C (16 rounds) =\t");
3977 for c in cipher.clone()
3978 { print!("{:02X} ", c); }
3979 println!();
3980 let mut txt = String::new();
3981 for c in cipher.clone()
3982 { write!(txt, "{:02X} ", c); }
3983 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
3984
3985 let mut recovered = vec![0; 55];
3986 a_des.decrypt_vec(&cipher, recovered.as_mut_ptr());
3987 print!("Ba (16 rounds) =\t");
3988 for b in recovered.clone()
3989 { print!("{:02X} ", b); }
3990 println!();
3991 let mut txt = String::new();
3992 for c in recovered.clone()
3993 { write!(txt, "{:02X} ", c); }
3994 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
3995
3996 let mut converted = String::new();
3997 unsafe { converted.as_mut_vec() }.append(&mut recovered);
3998
3999 println!("Bb (16 rounds) =\t{}", converted);
4000 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
4001 assert_eq!(converted, message);
4002 println!();
4003
4004 let key = 0x_1234567890ABCDEF_u64;
4006 println!("K =\t{:#016X}", key);
4007 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
4008
4009 let message = "In the beginning God created the heavens and the earth.";
4010 println!("M =\t{}", message);
4011 let mut cipher = Vec::<u8>::new();
4012 a_des.encrypt_str_into_vec(&message, &mut cipher);
4013 print!("C (128 rounds) =\t");
4014 for c in cipher.clone()
4015 { print!("{:02X} ", c); }
4016 println!();
4017 let mut txt = String::new();
4018 for c in cipher.clone()
4019 { write!(txt, "{:02X} ", c); }
4020 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
4021
4022 let mut recovered = vec![0; 55];
4023 a_des.decrypt_vec(&cipher, recovered.as_mut_ptr());
4024 print!("Ba (128 rounds) =\t");
4025 for b in recovered.clone()
4026 { print!("{:02X} ", b); }
4027 println!();
4028 let mut txt = String::new();
4029 for c in recovered.clone()
4030 { write!(txt, "{:02X} ", c); }
4031 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
4032
4033 let mut converted = String::new();
4034 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4035
4036 println!("Bb (128 rounds) =\t{}", converted);
4037 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
4038 assert_eq!(converted, message);
4039 println!();
4040
4041 let key1 = 0x_1234567890ABCDEF_u64;
4043 let key2 = 0_u64;
4044 println!("K =\t{:#016X}", key);
4045 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
4046 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
4047
4048 let message = "In the beginning God created the heavens and the earth.";
4049 println!("M =\t{}", message);
4050 let mut cipher1 = Vec::<u8>::new();
4051 let mut cipher2 = Vec::<u8>::new();
4052 c_des.encrypt_str_into_vec(&message, &mut cipher1);
4053 d_des.encrypt_str_into_vec(&message, &mut cipher2);
4054 print!("C (0 rounds) =\t");
4055 for c in cipher1.clone()
4056 { print!("{:02X} ", c); }
4057 println!();
4058 let mut txt = String::new();
4059 for c in cipher1.clone()
4060 { write!(txt, "{:02X} ", c); }
4061 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
4062 print!("D (0 rounds) =\t");
4063 for c in cipher2.clone()
4064 { print!("{:02X} ", c); }
4065 println!();
4066 let mut txt = String::new();
4067 for c in cipher2.clone()
4068 { write!(txt, "{:02X} ", c); }
4069 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
4070
4071 let mut recovered1 = vec![0; 55];
4072 let mut recovered2 = vec![0; 55];
4073 c_des.decrypt_vec(&cipher1, recovered1.as_mut_ptr());
4074 d_des.decrypt_vec(&cipher2, recovered2.as_mut_ptr());
4075 print!("B1a (0 rounds) =\t");
4076 for b in recovered1.clone()
4077 { print!("{:02X} ", b); }
4078 println!();
4079 let mut txt = String::new();
4080 for c in recovered1.clone()
4081 { write!(txt, "{:02X} ", c); }
4082 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
4083 print!("B2a (0 rounds) =\t");
4084 for b in recovered2.clone()
4085 { print!("{:02X} ", b); }
4086 println!();
4087 let mut txt = String::new();
4088 for c in recovered2.clone()
4089 { write!(txt, "{:02X} ", c); }
4090 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
4091
4092 let mut converted1 = String::new();
4093 let mut converted2 = String::new();
4094 unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
4095 unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
4096
4097 println!("B1b (0 rounds) =\t{}", converted1);
4098 assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
4099 assert_eq!(converted1, message);
4100 println!("B2b (0 rounds) =\t{}", converted2);
4101 assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
4102 assert_eq!(converted2, message);
4103 assert_eq!(converted1, converted1);
4104 println!();
4105
4106 let key = 0x_1234567890ABCDEF_u64;
4108 println!("K =\t{:#016X}", key);
4109 let mut a_des = DES::new_with_key_u64(key);
4110
4111 let message = "";
4112 println!("M =\t{}", message);
4113 let mut cipher = Vec::<u8>::new();
4114 a_des.encrypt_str_into_vec(&message, &mut cipher);
4115 print!("C =\t");
4116 for c in cipher.clone()
4117 { print!("{:02X} ", c); }
4118 println!();
4119 let mut txt = String::new();
4120 for c in cipher.clone()
4121 { write!(txt, "{:02X} ", c); }
4122 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
4123
4124 let mut recovered = vec![0; 8];
4125 let len = a_des.decrypt_vec(&cipher, recovered.as_mut_ptr());
4126 print!("Ba =\t");
4127 for b in recovered.clone()
4128 { print!("{:02X} ", b); }
4129 println!();
4130 let mut txt = String::new();
4131 for c in recovered.clone()
4132 { write!(txt, "{:02X} ", c); }
4133 assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
4134
4135 let mut converted = String::new();
4136 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4137 converted.truncate(len as usize);
4138
4139 println!("Bb =\t{}", converted);
4140 assert_eq!(converted, "");
4141 assert_eq!(converted, message);
4142 println!();
4143
4144 let key = 0x_1234567890ABCDEF_u64;
4146 println!("K =\t{:#016X}", key);
4147 let mut a_des = DES::new_with_key_u64(key);
4148
4149 let message = "7 bytes";
4150 println!("M =\t{}", message);
4151 let mut cipher = Vec::<u8>::new();
4152 a_des.encrypt_str_into_vec(&message, &mut cipher);
4153 print!("C =\t");
4154 for c in cipher.clone()
4155 { print!("{:02X} ", c); }
4156 println!();
4157 let mut txt = String::new();
4158 for c in cipher.clone()
4159 { write!(txt, "{:02X} ", c); }
4160 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
4161
4162 let mut recovered = vec![0; 8];
4163 let len = a_des.decrypt_vec(&cipher, recovered.as_mut_ptr());
4164 print!("Ba =\t");
4165 for b in recovered.clone()
4166 { print!("{:02X} ", b); }
4167 println!();
4168 let mut txt = String::new();
4169 for c in recovered.clone()
4170 { write!(txt, "{:02X} ", c); }
4171 assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
4172
4173 let mut converted = String::new();
4174 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4175 converted.truncate(len as usize);
4176
4177 println!("Bb =\t{}", converted);
4178 assert_eq!(converted, "7 bytes");
4179 assert_eq!(converted, message);
4180 println!();
4181
4182 let key = 0x_1234567890ABCDEF_u64;
4184 println!("K =\t{:#016X}", key);
4185 let mut a_des = DES::new_with_key_u64(key);
4186
4187 let message = "I am OK.";
4188 println!("M =\t{}", message);
4189 let mut cipher = Vec::<u8>::new();
4190 a_des.encrypt_str_into_vec(&message, &mut cipher);
4191 print!("C =\t");
4192 for c in cipher.clone()
4193 { print!("{:02X} ", c); }
4194 println!();
4195 let mut txt = String::new();
4196 for c in cipher.clone()
4197 { write!(txt, "{:02X} ", c); }
4198 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
4199
4200 let mut recovered = vec![0; 16];
4201 let len = a_des.decrypt_vec(&cipher, recovered.as_mut_ptr());
4202 print!("Ba =\t");
4203 for b in recovered.clone()
4204 { print!("{:02X} ", b); }
4205 println!();
4206 let mut txt = String::new();
4207 for c in recovered.clone()
4208 { write!(txt, "{:02X} ", c); }
4209 assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
4210
4211 let mut converted = String::new();
4212 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4213 converted.truncate(len as usize);
4214
4215 println!("Bb =\t{}", converted);
4216 assert_eq!(converted, "I am OK.");
4217 assert_eq!(converted, message);
4218 println!();
4219
4220 let key = 0x_1234567890ABCDEF_u64;
4222 println!("K =\t{:#016X}", key);
4223 let mut a_des = DES::new_with_key_u64(key);
4224
4225 let message = "PARK Youngho";
4226 println!("M =\t{}", message);
4227 let mut cipher = Vec::<u8>::new();
4228 a_des.encrypt_str_into_vec(&message, &mut cipher);
4229 print!("C =\t");
4230 for c in cipher.clone()
4231 { print!("{:02X} ", c); }
4232 println!();
4233 let mut txt = String::new();
4234 for c in cipher.clone()
4235 { write!(txt, "{:02X} ", c); }
4236 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
4237
4238 let mut recovered = vec![0; 16];
4239 let len = a_des.decrypt_vec(&cipher, recovered.as_mut_ptr());
4240 print!("Ba =\t");
4241 for b in recovered.clone()
4242 { print!("{:02X} ", b); }
4243 println!();
4244 let mut txt = String::new();
4245 for c in recovered.clone()
4246 { write!(txt, "{:02X} ", c); }
4247 assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
4248
4249 let mut converted = String::new();
4250 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4251 converted.truncate(len as usize);
4252
4253 println!("Bb =\t{}", converted);
4254 assert_eq!(converted, "PARK Youngho");
4255 assert_eq!(converted, message);
4256 println!();
4257
4258 let key = 0x_1234567890ABCDEF_u64;
4260 println!("K =\t{:#016X}", key);
4261 let mut a_des = DES::new_with_key_u64(key);
4262
4263 let message = "고맙습니다.";
4264 println!("M =\t{}", message);
4265 let mut cipher = Vec::<u8>::new();
4266 a_des.encrypt_str_into_vec(&message, &mut cipher);
4267 print!("C =\t");
4268 for c in cipher.clone()
4269 { print!("{:02X} ", c); }
4270 println!();
4271 let mut txt = String::new();
4272 for c in cipher.clone()
4273 { write!(txt, "{:02X} ", c); }
4274 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
4275
4276 let mut recovered = vec![0; 24];
4277 let len = a_des.decrypt_vec(&cipher, recovered.as_mut_ptr());
4278 print!("Ba =\t");
4279 for b in recovered.clone()
4280 { print!("{:02X} ", b); }
4281 println!();
4282 let mut txt = String::new();
4283 for c in recovered.clone()
4284 { write!(txt, "{:02X} ", c); }
4285 assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
4286
4287 let mut converted = String::new();
4288 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4289 converted.truncate(len as usize);
4290
4291 println!("Bb =\t{}", converted);
4292 assert_eq!(converted, "고맙습니다.");
4293 assert_eq!(converted, message);
4294 println!("-------------------------------");
4295}
4296
4297fn des_decrypt_vec_with_padding_iso_ecb_into_vec()
4298{
4299 println!("des_decrypt_vec_with_padding_iso_ecb_into_vec()");
4300 use std::io::Write;
4301 use std::fmt::Write as _;
4302 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
4303
4304 let key = 0x_1234567890ABCDEF_u64;
4306 println!("K =\t{:#016X}", key);
4307 let mut a_des = DES::new_with_key_u64(key);
4308
4309 let message = "In the beginning God created the heavens and the earth.";
4310 println!("M =\t{}", message);
4311 let mut cipher = Vec::<u8>::new();
4312 a_des.encrypt_str_into_vec(&message, &mut cipher);
4313 print!("C (16 rounds) =\t");
4314 for c in cipher.clone()
4315 { print!("{:02X} ", c); }
4316 println!();
4317 let mut txt = String::new();
4318 for c in cipher.clone()
4319 { write!(txt, "{:02X} ", c); }
4320 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
4321
4322 let mut recovered = Vec::<u8>::new();
4323 a_des.decrypt_vec_into_vec(&cipher, &mut recovered);
4324 print!("Ba (16 rounds) =\t");
4325 for b in recovered.clone()
4326 { print!("{:02X} ", b); }
4327 println!();
4328 let mut txt = String::new();
4329 for c in recovered.clone()
4330 { write!(txt, "{:02X} ", c); }
4331 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
4332
4333 let mut converted = String::new();
4334 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4335
4336 println!("Bb (16 rounds) =\t{}", converted);
4337 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
4338 assert_eq!(converted, message);
4339 println!();
4340
4341 let key = 0x_1234567890ABCDEF_u64;
4343 println!("K =\t{:#016X}", key);
4344 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
4345
4346 let message = "In the beginning God created the heavens and the earth.";
4347 println!("M =\t{}", message);
4348 let mut cipher = Vec::<u8>::new();
4349 a_des.encrypt_str_into_vec(&message, &mut cipher);
4350 print!("C (128 rounds) =\t");
4351 for c in cipher.clone()
4352 { print!("{:02X} ", c); }
4353 println!();
4354 let mut txt = String::new();
4355 for c in cipher.clone()
4356 { write!(txt, "{:02X} ", c); }
4357 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
4358
4359 let mut recovered = Vec::<u8>::new();
4360 a_des.decrypt_vec_into_vec(&cipher, &mut recovered);
4361 print!("Ba (128 rounds) =\t");
4362 for b in recovered.clone()
4363 { print!("{:02X} ", b); }
4364 println!();
4365 let mut txt = String::new();
4366 for c in recovered.clone()
4367 { write!(txt, "{:02X} ", c); }
4368 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
4369
4370 let mut converted = String::new();
4371 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4372
4373 println!("Bb (128 rounds) =\t{}", converted);
4374 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
4375 assert_eq!(converted, message);
4376 println!();
4377
4378 let key1 = 0x_1234567890ABCDEF_u64;
4380 let key2 = 0_u64;
4381 println!("K =\t{:#016X}", key);
4382 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
4383 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
4384
4385 let message = "In the beginning God created the heavens and the earth.";
4386 println!("M =\t{}", message);
4387 let mut cipher1 = Vec::<u8>::new();
4388 let mut cipher2 = Vec::<u8>::new();
4389 c_des.encrypt_str_into_vec(&message, &mut cipher1);
4390 d_des.encrypt_str_into_vec(&message, &mut cipher2);
4391 print!("C (0 rounds) =\t");
4392 for c in cipher1.clone()
4393 { print!("{:02X} ", c); }
4394 println!();
4395 let mut txt = String::new();
4396 for c in cipher1.clone()
4397 { write!(txt, "{:02X} ", c); }
4398 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
4399 print!("D (0 rounds) =\t");
4400 for c in cipher2.clone()
4401 { print!("{:02X} ", c); }
4402 println!();
4403 let mut txt = String::new();
4404 for c in cipher2.clone()
4405 { write!(txt, "{:02X} ", c); }
4406 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
4407
4408 let mut recovered1 = Vec::<u8>::new();
4409 let mut recovered2 = Vec::<u8>::new();
4410 c_des.decrypt_vec_into_vec(&cipher1, &mut recovered1);
4411 d_des.decrypt_vec_into_vec(&cipher2, &mut recovered2);
4412 print!("B1a (0 rounds) =\t");
4413 for b in recovered1.clone()
4414 { print!("{:02X} ", b); }
4415 println!();
4416 let mut txt = String::new();
4417 for c in recovered1.clone()
4418 { write!(txt, "{:02X} ", c); }
4419 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
4420 print!("B2a (0 rounds) =\t");
4421 for b in recovered2.clone()
4422 { print!("{:02X} ", b); }
4423 println!();
4424 let mut txt = String::new();
4425 for c in recovered2.clone()
4426 { write!(txt, "{:02X} ", c); }
4427 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
4428
4429 let mut converted1 = String::new();
4430 let mut converted2 = String::new();
4431 unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
4432 unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
4433
4434 println!("B1b (0 rounds) =\t{}", converted1);
4435 assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
4436 assert_eq!(converted1, message);
4437 println!("B2b (0 rounds) =\t{}", converted2);
4438 assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
4439 assert_eq!(converted2, message);
4440 assert_eq!(converted1, converted1);
4441 println!();
4442
4443 let key = 0x_1234567890ABCDEF_u64;
4445 println!("K =\t{:#016X}", key);
4446 let mut a_des = DES::new_with_key_u64(key);
4447
4448 let message = "";
4449 println!("M =\t{}", message);
4450 let mut cipher = Vec::<u8>::new();
4451 a_des.encrypt_str_into_vec(&message, &mut cipher);
4452 print!("C =\t");
4453 for c in cipher.clone()
4454 { print!("{:02X} ", c); }
4455 println!();
4456 let mut txt = String::new();
4457 for c in cipher.clone()
4458 { write!(txt, "{:02X} ", c); }
4459 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
4460
4461 let mut recovered = Vec::<u8>::new();
4462 a_des.decrypt_vec_into_vec(&cipher, &mut recovered);
4463 print!("Ba =\t");
4464 for b in recovered.clone()
4465 { print!("{:02X} ", b); }
4466 println!();
4467 let mut txt = String::new();
4468 for c in recovered.clone()
4469 { write!(txt, "{:02X} ", c); }
4470 assert_eq!(txt, "");
4471
4472 let mut converted = String::new();
4473 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4474
4475 println!("Bb =\t{}", converted);
4476 assert_eq!(converted, "");
4477 assert_eq!(converted, message);
4478 println!();
4479
4480 let key = 0x_1234567890ABCDEF_u64;
4482 println!("K =\t{:#016X}", key);
4483 let mut a_des = DES::new_with_key_u64(key);
4484
4485 let message = "7 bytes";
4486 println!("M =\t{}", message);
4487 let mut cipher = Vec::<u8>::new();
4488 a_des.encrypt_str_into_vec(&message, &mut cipher);
4489 print!("C =\t");
4490 for c in cipher.clone()
4491 { print!("{:02X} ", c); }
4492 println!();
4493 let mut txt = String::new();
4494 for c in cipher.clone()
4495 { write!(txt, "{:02X} ", c); }
4496 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
4497
4498 let mut recovered = Vec::<u8>::new();
4499 a_des.decrypt_vec_into_vec(&cipher, &mut recovered);
4500 print!("Ba =\t");
4501 for b in recovered.clone()
4502 { print!("{:02X} ", b); }
4503 println!();
4504 let mut txt = String::new();
4505 for c in recovered.clone()
4506 { write!(txt, "{:02X} ", c); }
4507 assert_eq!(txt, "37 20 62 79 74 65 73 ");
4508
4509 let mut converted = String::new();
4510 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4511
4512 println!("Bb =\t{}", converted);
4513 assert_eq!(converted, "7 bytes");
4514 assert_eq!(converted, message);
4515 println!();
4516
4517 let key = 0x_1234567890ABCDEF_u64;
4519 println!("K =\t{:#016X}", key);
4520 let mut a_des = DES::new_with_key_u64(key);
4521
4522 let message = "I am OK.";
4523 println!("M =\t{}", message);
4524 let mut cipher = Vec::<u8>::new();
4525 a_des.encrypt_str_into_vec(&message, &mut cipher);
4526 print!("C =\t");
4527 for c in cipher.clone()
4528 { print!("{:02X} ", c); }
4529 println!();
4530 let mut txt = String::new();
4531 for c in cipher.clone()
4532 { write!(txt, "{:02X} ", c); }
4533 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
4534
4535 let mut recovered = Vec::<u8>::new();
4536 a_des.decrypt_vec_into_vec(&cipher, &mut recovered);
4537 print!("Ba =\t");
4538 for b in recovered.clone()
4539 { print!("{:02X} ", b); }
4540 println!();
4541 let mut txt = String::new();
4542 for c in recovered.clone()
4543 { write!(txt, "{:02X} ", c); }
4544 assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E ");
4545
4546 let mut converted = String::new();
4547 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4548
4549 println!("Bb =\t{}", converted);
4550 assert_eq!(converted, "I am OK.");
4551 assert_eq!(converted, message);
4552 println!();
4553
4554 let key = 0x_1234567890ABCDEF_u64;
4556 println!("K =\t{:#016X}", key);
4557 let mut a_des = DES::new_with_key_u64(key);
4558
4559 let message = "PARK Youngho";
4560 println!("M =\t{}", message);
4561 let mut cipher = Vec::<u8>::new();
4562 a_des.encrypt_str_into_vec(&message, &mut cipher);
4563 print!("C =\t");
4564 for c in cipher.clone()
4565 { print!("{:02X} ", c); }
4566 println!();
4567 let mut txt = String::new();
4568 for c in cipher.clone()
4569 { write!(txt, "{:02X} ", c); }
4570 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
4571
4572 let mut recovered = Vec::<u8>::new();
4573 a_des.decrypt_vec_into_vec(&cipher, &mut recovered);
4574 print!("Ba =\t");
4575 for b in recovered.clone()
4576 { print!("{:02X} ", b); }
4577 println!();
4578 let mut txt = String::new();
4579 for c in recovered.clone()
4580 { write!(txt, "{:02X} ", c); }
4581 assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F ");
4582
4583 let mut converted = String::new();
4584 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4585
4586 println!("Bb =\t{}", converted);
4587 assert_eq!(converted, "PARK Youngho");
4588 assert_eq!(converted, message);
4589 println!();
4590
4591 let key = 0x_1234567890ABCDEF_u64;
4593 println!("K =\t{:#016X}", key);
4594 let mut a_des = DES::new_with_key_u64(key);
4595
4596 let message = "고맙습니다.";
4597 println!("M =\t{}", message);
4598 let mut cipher = Vec::<u8>::new();
4599 a_des.encrypt_str_into_vec(&message, &mut cipher);
4600 print!("C =\t");
4601 for c in cipher.clone()
4602 { print!("{:02X} ", c); }
4603 println!();
4604 let mut txt = String::new();
4605 for c in cipher.clone()
4606 { write!(txt, "{:02X} ", c); }
4607 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
4608
4609 let mut recovered = Vec::<u8>::new();
4610 a_des.decrypt_vec_into_vec(&cipher, &mut recovered);
4611 print!("Ba =\t");
4612 for b in recovered.clone()
4613 { print!("{:02X} ", b); }
4614 println!();
4615 let mut txt = String::new();
4616 for c in recovered.clone()
4617 { write!(txt, "{:02X} ", c); }
4618 assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E ");
4619
4620 let mut converted = String::new();
4621 unsafe { converted.as_mut_vec() }.append(&mut recovered);
4622
4623 println!("Bb =\t{}", converted);
4624 assert_eq!(converted, "고맙습니다.");
4625 assert_eq!(converted, message);
4626 println!("-------------------------------");
4627}
4628
4629fn des_decrypt_vec_with_padding_iso_ecb_into_array()
4630{
4631 println!("des_decrypt_vec_with_padding_iso_ecb_into_array()");
4632 use std::io::Write;
4633 use std::fmt::Write as _;
4634 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
4635
4636 let key = 0x_1234567890ABCDEF_u64;
4638 println!("K =\t{:#016X}", key);
4639 let mut a_des = DES::new_with_key_u64(key);
4640
4641 let message = "In the beginning God created the heavens and the earth.";
4642 println!("M =\t{}", message);
4643 let mut cipher = Vec::<u8>::new();
4644 a_des.encrypt_str_into_vec(&message, &mut cipher);
4645 print!("C (16 rounds) =\t");
4646 for c in cipher.clone()
4647 { print!("{:02X} ", c); }
4648 println!();
4649 let mut txt = String::new();
4650 for c in cipher.clone()
4651 { write!(txt, "{:02X} ", c); }
4652 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
4653
4654 let mut recovered = [0u8; 56];
4655 let len = a_des.decrypt_vec_into_array(&cipher, &mut recovered);
4656 print!("Ba (16 rounds) =\t");
4657 for b in recovered.clone()
4658 { print!("{:02X} ", b); }
4659 println!();
4660 let mut txt = String::new();
4661 for c in recovered.clone()
4662 { write!(txt, "{:02X} ", c); }
4663 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
4664
4665 let mut converted = String::new();
4666 unsafe { converted.as_mut_vec() }.write(&recovered);
4667 unsafe { converted.as_mut_vec() }.truncate(len as usize);
4668 println!("Bb (16 rounds) =\t{}", converted);
4669 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
4670 assert_eq!(converted, message);
4671 println!();
4672
4673 let key = 0x_1234567890ABCDEF_u64;
4675 println!("K =\t{:#016X}", key);
4676 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
4677
4678 let message = "In the beginning God created the heavens and the earth.";
4679 println!("M =\t{}", message);
4680 let mut cipher = Vec::<u8>::new();
4681 a_des.encrypt_str_into_vec(&message, &mut cipher);
4682 print!("C (128 rounds) =\t");
4683 for c in cipher.clone()
4684 { print!("{:02X} ", c); }
4685 println!();
4686 let mut txt = String::new();
4687 for c in cipher.clone()
4688 { write!(txt, "{:02X} ", c); }
4689 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
4690
4691 let mut recovered = [0u8; 56];
4692 let len = a_des.decrypt_vec_into_array(&cipher, &mut recovered);
4693 print!("Ba (16 rounds) =\t");
4694 for b in recovered.clone()
4695 { print!("{:02X} ", b); }
4696 println!();
4697 let mut txt = String::new();
4698 for c in recovered.clone()
4699 { write!(txt, "{:02X} ", c); }
4700 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
4701
4702 let mut converted = String::new();
4703 unsafe { converted.as_mut_vec() }.write(&recovered);
4704 unsafe { converted.as_mut_vec() }.truncate(len as usize);
4705 println!("Bb (16 rounds) =\t{}", converted);
4706 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
4707 assert_eq!(converted, message);
4708 println!();
4709
4710 let key1 = 0x_1234567890ABCDEF_u64;
4712 let key2 = 0_u64;
4713 println!("K =\t{:#016X}", key);
4714 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
4715 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
4716
4717 let message = "In the beginning God created the heavens and the earth.";
4718 println!("M =\t{}", message);
4719 let mut cipher1 = Vec::<u8>::new();
4720 let mut cipher2 = Vec::<u8>::new();
4721 c_des.encrypt_str_into_vec(&message, &mut cipher1);
4722 d_des.encrypt_str_into_vec(&message, &mut cipher2);
4723 print!("C (0 rounds) =\t");
4724 for c in cipher1.clone()
4725 { print!("{:02X} ", c); }
4726 println!();
4727 let mut txt = String::new();
4728 for c in cipher1.clone()
4729 { write!(txt, "{:02X} ", c); }
4730 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
4731 print!("D (0 rounds) =\t");
4732 for c in cipher2.clone()
4733 { print!("{:02X} ", c); }
4734 println!();
4735 let mut txt = String::new();
4736 for c in cipher2.clone()
4737 { write!(txt, "{:02X} ", c); }
4738 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
4739
4740 let mut recovered1 = [0u8; 56];
4741 let mut recovered2 = [0u8; 56];
4742 let len1 = c_des.decrypt_vec_into_array(&cipher1, &mut recovered1);
4743 let len2 = d_des.decrypt_vec_into_array(&cipher2, &mut recovered2);
4744 print!("B1a (0 rounds) =\t");
4745 for b in recovered1.clone()
4746 { print!("{:02X} ", b); }
4747 println!();
4748 let mut txt = String::new();
4749 for c in recovered1.clone()
4750 { write!(txt, "{:02X} ", c); }
4751 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
4752 print!("B2a (0 rounds) =\t");
4753 for b in recovered2.clone()
4754 { print!("{:02X} ", b); }
4755 println!();
4756 let mut txt = String::new();
4757 for c in recovered.clone()
4758 { write!(txt, "{:02X} ", c); }
4759 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
4760
4761 let mut converted1 = String::new();
4762 let mut converted2 = String::new();
4763 unsafe { converted1.as_mut_vec() }.write(&recovered1);
4764 unsafe { converted2.as_mut_vec() }.write(&recovered2);
4765 unsafe { converted1.as_mut_vec() }.truncate(len1 as usize);
4766 unsafe { converted2.as_mut_vec() }.truncate(len2 as usize);
4767 println!("B1b (0 rounds) =\t{}", converted1);
4768 println!("B2b (0 rounds) =\t{}", converted2);
4769 assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
4770 assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
4771 assert_eq!(converted1, message);
4772 assert_eq!(converted2, message);
4773 assert_eq!(converted1, converted2);
4774 println!();
4775
4776 let key = 0x_1234567890ABCDEF_u64;
4778 println!("K =\t{:#016X}", key);
4779 let mut a_des = DES::new_with_key_u64(key);
4780
4781 let message = "";
4782 println!("M =\t{}", message);
4783 let mut cipher = Vec::<u8>::new();
4784 a_des.encrypt_str_into_vec(&message, &mut cipher);
4785 print!("C =\t");
4786 for c in cipher.clone()
4787 { print!("{:02X} ", c); }
4788 println!();
4789 let mut txt = String::new();
4790 for c in cipher.clone()
4791 { write!(txt, "{:02X} ", c); }
4792 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
4793
4794 let mut recovered = [0u8; 8];
4795 let len = a_des.decrypt_vec_into_array(&cipher, &mut recovered);
4796
4797 print!("Ba =\t");
4798 for b in recovered.clone()
4799 { print!("{:02X} ", b); }
4800 println!();
4801 let mut txt = String::new();
4802 for c in recovered.clone()
4803 { write!(txt, "{:02X} ", c); }
4804 assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
4805
4806 let mut converted = String::new();
4807 unsafe { converted.as_mut_vec() }.write(&recovered);
4808 unsafe { converted.as_mut_vec() }.truncate(len as usize);
4809 println!("Bb =\t{}", converted);
4810 assert_eq!(converted, "");
4811 assert_eq!(converted, message);
4812 println!();
4813
4814 let key = 0x_1234567890ABCDEF_u64;
4816 println!("K =\t{:#016X}", key);
4817 let mut a_des = DES::new_with_key_u64(key);
4818
4819 let message = "7 bytes";
4820 println!("M =\t{}", message);
4821 let mut cipher = Vec::<u8>::new();
4822 a_des.encrypt_str_into_vec(&message, &mut cipher);
4823 print!("C =\t");
4824 for c in cipher.clone()
4825 { print!("{:02X} ", c); }
4826 println!();
4827 let mut txt = String::new();
4828 for c in cipher.clone()
4829 { write!(txt, "{:02X} ", c); }
4830 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
4831
4832 let mut recovered = [0u8; 8];
4833 let len = a_des.decrypt_vec_into_array(&cipher, &mut recovered);
4834
4835 print!("Ba =\t");
4836 for b in recovered.clone()
4837 { print!("{:02X} ", b); }
4838 println!();
4839 let mut txt = String::new();
4840 for c in recovered.clone()
4841 { write!(txt, "{:02X} ", c); }
4842 assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
4843
4844 let mut converted = String::new();
4845 unsafe { converted.as_mut_vec() }.write(&recovered);
4846 unsafe { converted.as_mut_vec() }.truncate(len as usize);
4847 println!("Bb =\t{}", converted);
4848 assert_eq!(converted, "7 bytes");
4849 assert_eq!(converted, message);
4850 println!();
4851
4852 let key = 0x_1234567890ABCDEF_u64;
4854 println!("K =\t{:#016X}", key);
4855 let mut a_des = DES::new_with_key_u64(key);
4856
4857 let message = "I am OK.";
4858 println!("M =\t{}", message);
4859 let mut cipher = Vec::<u8>::new();
4860 a_des.encrypt_str_into_vec(&message, &mut cipher);
4861 print!("C =\t");
4862 for c in cipher.clone()
4863 { print!("{:02X} ", c); }
4864 println!();
4865 let mut txt = String::new();
4866 for c in cipher.clone()
4867 { write!(txt, "{:02X} ", c); }
4868 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
4869
4870 let mut recovered = [0u8; 16];
4871 let len = a_des.decrypt_vec_into_array(&cipher, &mut recovered);
4872
4873 print!("Ba =\t");
4874 for b in recovered.clone()
4875 { print!("{:02X} ", b); }
4876 println!();
4877 let mut txt = String::new();
4878 for c in recovered.clone()
4879 { write!(txt, "{:02X} ", c); }
4880 assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
4881
4882 let mut converted = String::new();
4883 unsafe { converted.as_mut_vec() }.write(&recovered);
4884 unsafe { converted.as_mut_vec() }.truncate(len as usize);
4885 println!("Bb =\t{}", converted);
4886 assert_eq!(converted, "I am OK.");
4887 assert_eq!(converted, message);
4888 println!();
4889
4890 let key = 0x_1234567890ABCDEF_u64;
4892 println!("K =\t{:#016X}", key);
4893 let mut a_des = DES::new_with_key_u64(key);
4894
4895 let message = "PARK Youngho";
4896 println!("M =\t{}", message);
4897 let mut cipher = Vec::<u8>::new();
4898 a_des.encrypt_str_into_vec(&message, &mut cipher);
4899 print!("C =\t");
4900 for c in cipher.clone()
4901 { print!("{:02X} ", c); }
4902 println!();
4903 let mut txt = String::new();
4904 for c in cipher.clone()
4905 { write!(txt, "{:02X} ", c); }
4906 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
4907
4908 let mut recovered = [0u8; 16];
4909 let len = a_des.decrypt_vec_into_array(&cipher, &mut recovered);
4910
4911 print!("Ba =\t");
4912 for b in recovered.clone()
4913 { print!("{:02X} ", b); }
4914 println!();
4915 let mut txt = String::new();
4916 for c in recovered.clone()
4917 { write!(txt, "{:02X} ", c); }
4918 assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
4919
4920 let mut converted = String::new();
4921 unsafe { converted.as_mut_vec() }.write(&recovered);
4922 unsafe { converted.as_mut_vec() }.truncate(len as usize);
4923 println!("Bb =\t{}", converted);
4924 assert_eq!(converted, "PARK Youngho");
4925 assert_eq!(converted, message);
4926 println!();
4927
4928 let key = 0x_1234567890ABCDEF_u64;
4930 println!("K =\t{:#016X}", key);
4931 let mut a_des = DES::new_with_key_u64(key);
4932
4933 let message = "고맙습니다.";
4934 println!("M =\t{}", message);
4935 let mut cipher = Vec::<u8>::new();
4936 a_des.encrypt_str_into_vec(&message, &mut cipher);
4937 print!("C =\t");
4938 for c in cipher.clone()
4939 { print!("{:02X} ", c); }
4940 println!();
4941 let mut txt = String::new();
4942 for c in cipher.clone()
4943 { write!(txt, "{:02X} ", c); }
4944 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
4945
4946 let mut recovered = [0u8; 24];
4947 let len = a_des.decrypt_vec_into_array(&cipher, &mut recovered);
4948
4949 print!("Ba =\t");
4950 for b in recovered.clone()
4951 { print!("{:02X} ", b); }
4952 println!();
4953 let mut txt = String::new();
4954 for c in recovered.clone()
4955 { write!(txt, "{:02X} ", c); }
4956 assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
4957
4958 let mut converted = String::new();
4959 unsafe { converted.as_mut_vec() }.write(&recovered);
4960 unsafe { converted.as_mut_vec() }.truncate(len as usize);
4961 println!("Bb =\t{}", converted);
4962 assert_eq!(converted, "고맙습니다.");
4963 assert_eq!(converted, message);
4964 println!("-------------------------------");
4965}
4966
4967fn des_decrypt_vec_with_padding_iso_ecb_into_string()
4968{
4969 println!("des_decrypt_vec_with_padding_iso_ecb_into_string()");
4970 use std::io::Write;
4971 use std::fmt::Write as _;
4972 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
4973
4974 let key = 0x_1234567890ABCDEF_u64;
4976 println!("K =\t{:#016X}", key);
4977 let mut a_des = DES::new_with_key_u64(key);
4978
4979 let message = "In the beginning God created the heavens and the earth.";
4980 println!("M =\t{}", message);
4981 let mut cipher = Vec::<u8>::new();
4982 a_des.encrypt_str_into_vec(&message, &mut cipher);
4983 print!("C (16 rounds) =\t");
4984 for c in cipher.clone()
4985 { print!("{:02X} ", c); }
4986 println!();
4987 let mut txt = String::new();
4988 for c in cipher.clone()
4989 { write!(txt, "{:02X} ", c); }
4990 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
4991
4992 let mut recovered = String::new();
4993 a_des.decrypt_vec_into_string(&cipher, &mut recovered);
4994 println!("B (16 rounds) =\t{}", recovered);
4995 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
4996 assert_eq!(recovered, message);
4997 println!();
4998
4999 let key = 0x_1234567890ABCDEF_u64;
5001 println!("K =\t{:#016X}", key);
5002 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
5003
5004 let message = "In the beginning God created the heavens and the earth.";
5005 println!("M =\t{}", message);
5006 let mut cipher = Vec::<u8>::new();
5007 a_des.encrypt_str_into_vec(&message, &mut cipher);
5008 print!("C (128 rounds) =\t");
5009 for c in cipher.clone()
5010 { print!("{:02X} ", c); }
5011 println!();
5012 let mut txt = String::new();
5013 for c in cipher.clone()
5014 { write!(txt, "{:02X} ", c); }
5015 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
5016
5017 let mut recovered = String::new();
5018 a_des.decrypt_vec_into_string(&cipher, &mut recovered);
5019 println!("B (128 rounds) =\t{}", recovered);
5020 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
5021 assert_eq!(recovered, message);
5022 println!();
5023
5024 let key1 = 0x_1234567890ABCDEF_u64;
5026 let key2 = 0_u64;
5027 println!("K =\t{:#016X}", key);
5028 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
5029 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
5030
5031 let message = "In the beginning God created the heavens and the earth.";
5032 println!("M =\t{}", message);
5033 let mut cipher1 = Vec::<u8>::new();
5034 let mut cipher2 = Vec::<u8>::new();
5035 c_des.encrypt_str_into_vec(&message, &mut cipher1);
5036 d_des.encrypt_str_into_vec(&message, &mut cipher2);
5037 print!("C (0 rounds) =\t");
5038 for c in cipher1.clone()
5039 { print!("{:02X} ", c); }
5040 println!();
5041 let mut txt = String::new();
5042 for c in cipher1.clone()
5043 { write!(txt, "{:02X} ", c); }
5044 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
5045 print!("D (0 rounds) =\t");
5046 for c in cipher2.clone()
5047 { print!("{:02X} ", c); }
5048 println!();
5049 let mut txt = String::new();
5050 for c in cipher2.clone()
5051 { write!(txt, "{:02X} ", c); }
5052 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
5053
5054 let mut recovered1 = String::new();
5055 let mut recovered2 = String::new();
5056 c_des.decrypt_vec_into_string(&cipher1, &mut recovered1);
5057 d_des.decrypt_vec_into_string(&cipher2, &mut recovered2);
5058 println!("B1 (0 rounds) =\t{}", recovered1);
5059 println!("B2 (0 rounds) =\t{}", recovered2);
5060 assert_eq!(recovered1, "In the beginning God created the heavens and the earth.");
5061 assert_eq!(recovered2, "In the beginning God created the heavens and the earth.");
5062 assert_eq!(recovered1, message);
5063 assert_eq!(recovered2, message);
5064 assert_eq!(recovered1, recovered2);
5065 println!();
5066
5067 let key = 0x_1234567890ABCDEF_u64;
5069 println!("K =\t{:#016X}", key);
5070 let mut a_des = DES::new_with_key_u64(key);
5071
5072 let message = "";
5073 println!("M =\t{}", message);
5074 let mut cipher = Vec::<u8>::new();
5075 a_des.encrypt_str_into_vec(&message, &mut cipher);
5076 print!("C =\t");
5077 for c in cipher.clone()
5078 { print!("{:02X} ", c); }
5079 println!();
5080 let mut txt = String::new();
5081 for c in cipher.clone()
5082 { write!(txt, "{:02X} ", c); }
5083 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
5084
5085 let mut recovered = String::new();
5086 a_des.decrypt_vec_into_string(&cipher, &mut recovered);
5087 println!("B =\t{}", recovered);
5088 assert_eq!(recovered, "");
5089 assert_eq!(recovered, message);
5090 println!();
5091
5092 let key = 0x_1234567890ABCDEF_u64;
5094 println!("K =\t{:#016X}", key);
5095 let mut a_des = DES::new_with_key_u64(key);
5096
5097 let message = "7 bytes";
5098 println!("M =\t{}", message);
5099 let mut cipher = Vec::<u8>::new();
5100 a_des.encrypt_str_into_vec(&message, &mut cipher);
5101 print!("C =\t");
5102 for c in cipher.clone()
5103 { print!("{:02X} ", c); }
5104 println!();
5105 let mut txt = String::new();
5106 for c in cipher.clone()
5107 { write!(txt, "{:02X} ", c); }
5108 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
5109
5110 let mut recovered = String::new();
5111 a_des.decrypt_vec_into_string(&cipher, &mut recovered);
5112 println!("B =\t{}", recovered);
5113 assert_eq!(recovered, "7 bytes");
5114 assert_eq!(recovered, message);
5115 println!();
5116
5117 let key = 0x_1234567890ABCDEF_u64;
5119 println!("K =\t{:#016X}", key);
5120 let mut a_des = DES::new_with_key_u64(key);
5121
5122 let message = "I am OK.";
5123 println!("M =\t{}", message);
5124 let mut cipher = Vec::<u8>::new();
5125 a_des.encrypt_str_into_vec(&message, &mut cipher);
5126 print!("C =\t");
5127 for c in cipher.clone()
5128 { print!("{:02X} ", c); }
5129 println!();
5130 let mut txt = String::new();
5131 for c in cipher.clone()
5132 { write!(txt, "{:02X} ", c); }
5133 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
5134
5135 let mut recovered = String::new();
5136 a_des.decrypt_vec_into_string(&cipher, &mut recovered);
5137 println!("B =\t{}", recovered);
5138 assert_eq!(recovered, "I am OK.");
5139 assert_eq!(recovered, message);
5140 println!();
5141
5142 let key = 0x_1234567890ABCDEF_u64;
5144 println!("K =\t{:#016X}", key);
5145 let mut a_des = DES::new_with_key_u64(key);
5146
5147 let message = "PARK Youngho";
5148 println!("M =\t{}", message);
5149 let mut cipher = Vec::<u8>::new();
5150 a_des.encrypt_str_into_vec(&message, &mut cipher);
5151 print!("C =\t");
5152 for c in cipher.clone()
5153 { print!("{:02X} ", c); }
5154 println!();
5155 let mut txt = String::new();
5156 for c in cipher.clone()
5157 { write!(txt, "{:02X} ", c); }
5158 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
5159
5160 let mut recovered = String::new();
5161 a_des.decrypt_vec_into_string(&cipher, &mut recovered);
5162 println!("B =\t{}", recovered);
5163 assert_eq!(recovered, "PARK Youngho");
5164 assert_eq!(recovered, message);
5165 println!();
5166
5167 let key = 0x_1234567890ABCDEF_u64;
5169 println!("K =\t{:#016X}", key);
5170 let mut a_des = DES::new_with_key_u64(key);
5171
5172 let message = "고맙습니다.";
5173 println!("M =\t{}", message);
5174 let mut cipher = Vec::<u8>::new();
5175 a_des.encrypt_str_into_vec(&message, &mut cipher);
5176 print!("C =\t");
5177 for c in cipher.clone()
5178 { print!("{:02X} ", c); }
5179 println!();
5180 let mut txt = String::new();
5181 for c in cipher.clone()
5182 { write!(txt, "{:02X} ", c); }
5183 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
5184
5185 let mut recovered = String::new();
5186 a_des.decrypt_vec_into_string(&cipher, &mut recovered);
5187 println!("B =\t{}", recovered);
5188 assert_eq!(recovered, "고맙습니다.");
5189 assert_eq!(recovered, message);
5190 println!("-------------------------------");
5191}
5192
5193fn des_decrypt_array_with_padding_iso_ecb()
5194{
5195 println!("des_decrypt_array_with_padding_iso_ecb()");
5196 use std::io::Write;
5197 use std::fmt::Write as _;
5198 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
5199
5200 let key = 0x_1234567890ABCDEF_u64;
5202 println!("K =\t{:#016X}", key);
5203 let mut a_des = DES::new_with_key_u64(key);
5204
5205 let message = "In the beginning God created the heavens and the earth.";
5206 println!("M =\t{}", message);
5207 let mut cipher = [0_u8; 56];
5208 a_des.encrypt_str_into_array(&message, &mut cipher);
5209 print!("C (16 rounds) =\t");
5210 for c in cipher.clone()
5211 { print!("{:02X} ", c); }
5212 println!();
5213 let mut txt = String::new();
5214 for c in cipher.clone()
5215 { write!(txt, "{:02X} ", c); }
5216 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
5217
5218 let mut recovered = vec![0; 55];
5219 let len = a_des.decrypt_array(&cipher, recovered.as_mut_ptr());
5220 recovered.truncate(len as usize);
5221 print!("Ba (16 rounds) =\t");
5222 for b in recovered.clone()
5223 { print!("{:02X} ", b); }
5224 println!();
5225 let mut txt = String::new();
5226 for c in recovered.clone()
5227 { write!(txt, "{:02X} ", c); }
5228 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
5229
5230 let mut converted = String::new();
5231 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5232
5233 println!("Bb (16 rounds) =\t{}", converted);
5234 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
5235 assert_eq!(converted, message);
5236 println!();
5237
5238 let key = 0x_1234567890ABCDEF_u64;
5240 println!("K =\t{:#016X}", key);
5241 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
5242
5243 let message = "In the beginning God created the heavens and the earth.";
5244 println!("M =\t{}", message);
5245 let mut cipher = [0_u8; 56];
5246 a_des.encrypt_str_into_array(&message, &mut cipher);
5247 print!("C (128 rounds) =\t");
5248 for c in cipher.clone()
5249 { print!("{:02X} ", c); }
5250 println!();
5251 let mut txt = String::new();
5252 for c in cipher.clone()
5253 { write!(txt, "{:02X} ", c); }
5254 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
5255
5256 let mut recovered = vec![0; 55];
5257 let len = a_des.decrypt_array(&cipher, recovered.as_mut_ptr());
5258 recovered.truncate(len as usize);
5259 print!("Ba (128 rounds) =\t");
5260 for b in recovered.clone()
5261 { print!("{:02X} ", b); }
5262 println!();
5263 let mut txt = String::new();
5264 for c in recovered.clone()
5265 { write!(txt, "{:02X} ", c); }
5266 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
5267
5268 let mut converted = String::new();
5269 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5270
5271 println!("Bb (128 rounds) =\t{}", converted);
5272 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
5273 assert_eq!(converted, message);
5274 println!();
5275
5276 let key1 = 0x_1234567890ABCDEF_u64;
5278 let key2 = 0_u64;
5279 println!("K =\t{:#016X}", key);
5280 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
5281 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
5282
5283 let message = "In the beginning God created the heavens and the earth.";
5284 println!("M =\t{}", message);
5285 let mut cipher1 = [0_u8; 56];
5286 let mut cipher2 = [0_u8; 56];
5287 c_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher1);
5288 d_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher2);
5289 print!("C (0 rounds) =\t");
5290 for c in cipher1.clone()
5291 { print!("{:02X} ", c); }
5292 println!();
5293 let mut txt = String::new();
5294 for c in cipher1.clone()
5295 { write!(txt, "{:02X} ", c); }
5296 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
5297 print!("D (0 rounds) =\t");
5298 for c in cipher2.clone()
5299 { print!("{:02X} ", c); }
5300 println!();
5301 let mut txt = String::new();
5302 for c in cipher2.clone()
5303 { write!(txt, "{:02X} ", c); }
5304 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
5305
5306 let mut recovered1 = vec![0; 55];
5307 let mut recovered2 = vec![0; 55];
5308 let len1 = c_des.decrypt_array(&cipher1, recovered1.as_mut_ptr());
5309 let len2 = d_des.decrypt_array(&cipher2, recovered2.as_mut_ptr());
5310 recovered1.truncate(len1 as usize);
5311 recovered2.truncate(len2 as usize);
5312
5313 print!("B1a (0 rounds) =\t");
5314 for b in recovered1.clone()
5315 { print!("{:02X} ", b); }
5316 println!();
5317 let mut txt = String::new();
5318 for c in recovered1.clone()
5319 { write!(txt, "{:02X} ", c); }
5320 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
5321 print!("B2a (0 rounds) =\t");
5322 for b in recovered2.clone()
5323 { print!("{:02X} ", b); }
5324 println!();
5325 let mut txt = String::new();
5326 for c in recovered2.clone()
5327 { write!(txt, "{:02X} ", c); }
5328 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
5329
5330 let mut converted1 = String::new();
5331 let mut converted2 = String::new();
5332 unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
5333 unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
5334
5335 println!("B1b (0 rounds) =\t{}", converted1);
5336 assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
5337 assert_eq!(converted1, message);
5338 println!("B2b (0 rounds) =\t{}", converted2);
5339 assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
5340 assert_eq!(converted2, message);
5341 assert_eq!(converted1, converted1);
5342 println!();
5343
5344 let key = 0x_1234567890ABCDEF_u64;
5346 println!("K =\t{:#016X}", key);
5347 let mut a_des = DES::new_with_key_u64(key);
5348
5349 let message = "";
5350 println!("M =\t{}", message);
5351 let mut cipher = [0_u8; 8];
5352 a_des.encrypt_str_into_array(&message, &mut cipher);
5353 print!("C =\t");
5354 for c in cipher.clone()
5355 { print!("{:02X} ", c); }
5356 println!();
5357 let mut txt = String::new();
5358 for c in cipher.clone()
5359 { write!(txt, "{:02X} ", c); }
5360 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
5361
5362 let mut recovered = vec![0; 8];
5363 let len = a_des.decrypt_array(&cipher, recovered.as_mut_ptr());
5364 recovered.truncate(len as usize);
5365
5366 print!("Ba =\t");
5367 for b in recovered.clone()
5368 { print!("{:02X} ", b); }
5369 println!();
5370 let mut txt = String::new();
5371 for c in recovered.clone()
5372 { write!(txt, "{:02X} ", c); }
5373 assert_eq!(txt, "");
5374
5375 let mut converted = String::new();
5376 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5377
5378 println!("Bb =\t{}", converted);
5379 assert_eq!(converted, "");
5380 assert_eq!(converted, message);
5381 println!();
5382
5383 let key = 0x_1234567890ABCDEF_u64;
5385 println!("K =\t{:#016X}", key);
5386 let mut a_des = DES::new_with_key_u64(key);
5387
5388 let message = "7 bytes";
5389 println!("M =\t{}", message);
5390 let mut cipher = [0_u8; 8];
5391 a_des.encrypt_str_into_array(&message, &mut cipher);
5392 print!("C =\t");
5393 for c in cipher.clone()
5394 { print!("{:02X} ", c); }
5395 println!();
5396 let mut txt = String::new();
5397 for c in cipher.clone()
5398 { write!(txt, "{:02X} ", c); }
5399 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
5400
5401 let mut recovered = vec![0; 8];
5402 let len = a_des.decrypt_array(&cipher, recovered.as_mut_ptr());
5403 recovered.truncate(len as usize);
5404
5405 print!("Ba =\t");
5406 for b in recovered.clone()
5407 { print!("{:02X} ", b); }
5408 println!();
5409 let mut txt = String::new();
5410 for c in recovered.clone()
5411 { write!(txt, "{:02X} ", c); }
5412 assert_eq!(txt, "37 20 62 79 74 65 73 ");
5413
5414 let mut converted = String::new();
5415 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5416
5417 println!("Bb =\t{}", converted);
5418 assert_eq!(converted, "7 bytes");
5419 assert_eq!(converted, message);
5420 println!();
5421
5422 let key = 0x_1234567890ABCDEF_u64;
5424 println!("K =\t{:#016X}", key);
5425 let mut a_des = DES::new_with_key_u64(key);
5426
5427 let message = "I am OK.";
5428 println!("M =\t{}", message);
5429 let mut cipher = [0_u8; 16];
5430 a_des.encrypt_str_into_array(&message, &mut cipher);
5431 print!("C =\t");
5432 for c in cipher.clone()
5433 { print!("{:02X} ", c); }
5434 println!();
5435 let mut txt = String::new();
5436 for c in cipher.clone()
5437 { write!(txt, "{:02X} ", c); }
5438 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
5439
5440 let mut recovered = vec![0; 16];
5441 let len = a_des.decrypt_array(&cipher, recovered.as_mut_ptr());
5442 recovered.truncate(len as usize);
5443
5444 print!("Ba =\t");
5445 for b in recovered.clone()
5446 { print!("{:02X} ", b); }
5447 println!();
5448 let mut txt = String::new();
5449 for c in recovered.clone()
5450 { write!(txt, "{:02X} ", c); }
5451 assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E ");
5452
5453 let mut converted = String::new();
5454 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5455
5456 println!("Bb =\t{}", converted);
5457 assert_eq!(converted, "I am OK.");
5458 assert_eq!(converted, message);
5459 println!();
5460
5461 let key = 0x_1234567890ABCDEF_u64;
5463 println!("K =\t{:#016X}", key);
5464 let mut a_des = DES::new_with_key_u64(key);
5465
5466 let message = "PARK Youngho";
5467 println!("M =\t{}", message);
5468 let mut cipher = [0_u8; 16];
5469 a_des.encrypt_str_into_array(&message, &mut cipher);
5470 print!("C =\t");
5471 for c in cipher.clone()
5472 { print!("{:02X} ", c); }
5473 println!();
5474 let mut txt = String::new();
5475 for c in cipher.clone()
5476 { write!(txt, "{:02X} ", c); }
5477 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
5478
5479 let mut recovered = vec![0; 16];
5480 let len = a_des.decrypt_array(&cipher, recovered.as_mut_ptr());
5481 recovered.truncate(len as usize);
5482 print!("Ba =\t");
5483 for b in recovered.clone()
5484 { print!("{:02X} ", b); }
5485 println!();
5486 let mut txt = String::new();
5487 for c in recovered.clone()
5488 { write!(txt, "{:02X} ", c); }
5489 assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F ");
5490
5491 let mut converted = String::new();
5492 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5493
5494 println!("Bb =\t{}", converted);
5495 assert_eq!(converted, "PARK Youngho");
5496 assert_eq!(converted, message);
5497 println!();
5498
5499 let key = 0x_1234567890ABCDEF_u64;
5501 println!("K =\t{:#016X}", key);
5502 let mut a_des = DES::new_with_key_u64(key);
5503
5504 let message = "고맙습니다.";
5505 println!("M =\t{}", message);
5506 let mut cipher = [0_u8; 24];
5507 a_des.encrypt_str_into_array(&message, &mut cipher);
5508 print!("C =\t");
5509 for c in cipher.clone()
5510 { print!("{:02X} ", c); }
5511 println!();
5512 let mut txt = String::new();
5513 for c in cipher.clone()
5514 { write!(txt, "{:02X} ", c); }
5515 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
5516
5517 let mut recovered = vec![0; 24];
5518 let len = a_des.decrypt_array(&cipher, recovered.as_mut_ptr());
5519 recovered.truncate(len as usize);
5520
5521 print!("Ba =\t");
5522 for b in recovered.clone()
5523 { print!("{:02X} ", b); }
5524 println!();
5525 let mut txt = String::new();
5526 for c in recovered.clone()
5527 { write!(txt, "{:02X} ", c); }
5528 assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E ");
5529
5530 let mut converted = String::new();
5531 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5532
5533 println!("Bb =\t{}", converted);
5534 assert_eq!(converted, "고맙습니다.");
5535 assert_eq!(converted, message);
5536 println!("-------------------------------");
5537}
5538
5539fn des_decrypt_array_with_padding_iso_ecb_into_vec()
5540{
5541 println!("des_decrypt_array_with_padding_iso_ecb_into_vec()");
5542 use std::io::Write;
5543 use std::fmt::Write as _;
5544 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
5545
5546 let key = 0x_1234567890ABCDEF_u64;
5548 println!("K =\t{:#016X}", key);
5549 let mut a_des = DES::new_with_key_u64(key);
5550
5551 let message = "In the beginning God created the heavens and the earth.";
5552 println!("M =\t{}", message);
5553 let mut cipher = [0_u8; 56];
5554 a_des.encrypt_str_into_array(&message, &mut cipher);
5555 print!("C (16 rounds) =\t");
5556 for c in cipher.clone()
5557 { print!("{:02X} ", c); }
5558 println!();
5559 let mut txt = String::new();
5560 for c in cipher.clone()
5561 { write!(txt, "{:02X} ", c); }
5562 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
5563
5564 let mut recovered = Vec::<u8>::new();
5565 a_des.decrypt_array_into_vec(&cipher, &mut recovered);
5566 print!("Ba (16 rounds) =\t");
5567 for b in recovered.clone()
5568 { print!("{:02X} ", b); }
5569 println!();
5570 let mut txt = String::new();
5571 for c in recovered.clone()
5572 { write!(txt, "{:02X} ", c); }
5573 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
5574
5575 let mut converted = String::new();
5576 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5577
5578 println!("Bb (16 rounds) =\t{}", converted);
5579 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
5580 assert_eq!(converted, message);
5581 println!();
5582
5583 let key = 0x_1234567890ABCDEF_u64;
5585 println!("K =\t{:#016X}", key);
5586 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
5587
5588 let message = "In the beginning God created the heavens and the earth.";
5589 println!("M =\t{}", message);
5590 let mut cipher = [0_u8; 56];
5591 a_des.encrypt_str_into_array(&message, &mut cipher);
5592 print!("C (128 rounds) =\t");
5593 for c in cipher.clone()
5594 { print!("{:02X} ", c); }
5595 println!();
5596 let mut txt = String::new();
5597 for c in cipher.clone()
5598 { write!(txt, "{:02X} ", c); }
5599 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
5600
5601 let mut recovered = Vec::<u8>::new();
5602 a_des.decrypt_array_into_vec(&cipher, &mut recovered);
5603 print!("Ba (128 rounds) =\t");
5604 for b in recovered.clone()
5605 { print!("{:02X} ", b); }
5606 println!();
5607 let mut txt = String::new();
5608 for c in recovered.clone()
5609 { write!(txt, "{:02X} ", c); }
5610 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
5611
5612 let mut converted = String::new();
5613 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5614
5615 println!("Bb (128 rounds) =\t{}", converted);
5616 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
5617 assert_eq!(converted, message);
5618 println!();
5619
5620 let key1 = 0x_1234567890ABCDEF_u64;
5622 let key2 = 0_u64;
5623 println!("K =\t{:#016X}", key);
5624 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
5625 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
5626
5627 let message = "In the beginning God created the heavens and the earth.";
5628 println!("M =\t{}", message);
5629 let mut cipher1 = [0_u8; 56];
5630 let mut cipher2 = [0_u8; 56];
5631 c_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher1);
5632 d_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher2);
5633 print!("C (0 rounds) =\t");
5634 for c in cipher1.clone()
5635 { print!("{:02X} ", c); }
5636 println!();
5637 let mut txt = String::new();
5638 for c in cipher1.clone()
5639 { write!(txt, "{:02X} ", c); }
5640 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
5641 print!("D (0 rounds) =\t");
5642 for c in cipher2.clone()
5643 { print!("{:02X} ", c); }
5644 println!();
5645 let mut txt = String::new();
5646 for c in cipher2.clone()
5647 { write!(txt, "{:02X} ", c); }
5648 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
5649
5650 let mut recovered1 = Vec::<u8>::new();
5651 let mut recovered2 = Vec::<u8>::new();
5652 c_des.decrypt_array_into_vec(&cipher1, &mut recovered1);
5653 d_des.decrypt_array_into_vec(&cipher2, &mut recovered2);
5654 print!("B1a (0 rounds) =\t");
5655 for b in recovered1.clone()
5656 { print!("{:02X} ", b); }
5657 println!();
5658 let mut txt = String::new();
5659 for c in recovered1.clone()
5660 { write!(txt, "{:02X} ", c); }
5661 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
5662 print!("B2a (0 rounds) =\t");
5663 for b in recovered2.clone()
5664 { print!("{:02X} ", b); }
5665 println!();
5666 let mut txt = String::new();
5667 for c in recovered2.clone()
5668 { write!(txt, "{:02X} ", c); }
5669 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
5670
5671 let mut converted1 = String::new();
5672 let mut converted2 = String::new();
5673 unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
5674 unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
5675
5676 println!("B1b (0 rounds) =\t{}", converted1);
5677 assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
5678 assert_eq!(converted1, message);
5679 println!("B2b (0 rounds) =\t{}", converted2);
5680 assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
5681 assert_eq!(converted2, message);
5682 assert_eq!(converted1, converted1);
5683 println!();
5684
5685 let key = 0x_1234567890ABCDEF_u64;
5687 println!("K =\t{:#016X}", key);
5688 let mut a_des = DES::new_with_key_u64(key);
5689
5690 let message = "";
5691 println!("M =\t{}", message);
5692 let mut cipher = [0_u8; 8];
5693 a_des.encrypt_str_into_array(&message, &mut cipher);
5694 print!("C =\t");
5695 for c in cipher.clone()
5696 { print!("{:02X} ", c); }
5697 println!();
5698 let mut txt = String::new();
5699 for c in cipher.clone()
5700 { write!(txt, "{:02X} ", c); }
5701 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
5702
5703 let mut recovered = Vec::<u8>::new();
5704 a_des.decrypt_array_into_vec(&cipher, &mut recovered);
5705 print!("Ba =\t");
5706 for b in recovered.clone()
5707 { print!("{:02X} ", b); }
5708 println!();
5709 let mut txt = String::new();
5710 for c in recovered.clone()
5711 { write!(txt, "{:02X} ", c); }
5712 assert_eq!(txt, "");
5713
5714 let mut converted = String::new();
5715 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5716
5717 println!("Bb =\t{}", converted);
5718 assert_eq!(converted, "");
5719 assert_eq!(converted, message);
5720 println!();
5721
5722 let key = 0x_1234567890ABCDEF_u64;
5724 println!("K =\t{:#016X}", key);
5725 let mut a_des = DES::new_with_key_u64(key);
5726
5727 let message = "7 bytes";
5728 println!("M =\t{}", message);
5729 let mut cipher = [0_u8; 8];
5730 a_des.encrypt_str_into_array(&message, &mut cipher);
5731 print!("C =\t");
5732 for c in cipher.clone()
5733 { print!("{:02X} ", c); }
5734 println!();
5735 let mut txt = String::new();
5736 for c in cipher.clone()
5737 { write!(txt, "{:02X} ", c); }
5738 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
5739
5740 let mut recovered = Vec::<u8>::new();
5741 a_des.decrypt_array_into_vec(&cipher, &mut recovered);
5742 print!("Ba =\t");
5743 for b in recovered.clone()
5744 { print!("{:02X} ", b); }
5745 println!();
5746 let mut txt = String::new();
5747 for c in recovered.clone()
5748 { write!(txt, "{:02X} ", c); }
5749 assert_eq!(txt, "37 20 62 79 74 65 73 ");
5750
5751 let mut converted = String::new();
5752 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5753
5754 println!("Bb =\t{}", converted);
5755 assert_eq!(converted, "7 bytes");
5756 assert_eq!(converted, message);
5757 println!();
5758
5759 let key = 0x_1234567890ABCDEF_u64;
5761 println!("K =\t{:#016X}", key);
5762 let mut a_des = DES::new_with_key_u64(key);
5763
5764 let message = "I am OK.";
5765 println!("M =\t{}", message);
5766 let mut cipher = [0_u8; 16];
5767 a_des.encrypt_str_into_array(&message, &mut cipher);
5768 print!("C =\t");
5769 for c in cipher.clone()
5770 { print!("{:02X} ", c); }
5771 println!();
5772 let mut txt = String::new();
5773 for c in cipher.clone()
5774 { write!(txt, "{:02X} ", c); }
5775 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
5776
5777 let mut recovered = Vec::<u8>::new();
5778 a_des.decrypt_array_into_vec(&cipher, &mut recovered);
5779 print!("Ba =\t");
5780 for b in recovered.clone()
5781 { print!("{:02X} ", b); }
5782 println!();
5783 let mut txt = String::new();
5784 for c in recovered.clone()
5785 { write!(txt, "{:02X} ", c); }
5786 assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E ");
5787
5788 let mut converted = String::new();
5789 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5790
5791 println!("Bb =\t{}", converted);
5792 assert_eq!(converted, "I am OK.");
5793 assert_eq!(converted, message);
5794 println!();
5795
5796 let key = 0x_1234567890ABCDEF_u64;
5798 println!("K =\t{:#016X}", key);
5799 let mut a_des = DES::new_with_key_u64(key);
5800
5801 let message = "PARK Youngho";
5802 println!("M =\t{}", message);
5803 let mut cipher = [0_u8; 16];
5804 a_des.encrypt_str_into_array(&message, &mut cipher);
5805 print!("C =\t");
5806 for c in cipher.clone()
5807 { print!("{:02X} ", c); }
5808 println!();
5809 let mut txt = String::new();
5810 for c in cipher.clone()
5811 { write!(txt, "{:02X} ", c); }
5812 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
5813
5814 let mut recovered = Vec::<u8>::new();
5815 a_des.decrypt_array_into_vec(&cipher, &mut recovered);
5816 print!("Ba =\t");
5817 for b in recovered.clone()
5818 { print!("{:02X} ", b); }
5819 println!();
5820 let mut txt = String::new();
5821 for c in recovered.clone()
5822 { write!(txt, "{:02X} ", c); }
5823 assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F ");
5824
5825 let mut converted = String::new();
5826 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5827
5828 println!("Bb =\t{}", converted);
5829 assert_eq!(converted, "PARK Youngho");
5830 assert_eq!(converted, message);
5831 println!();
5832
5833 let key = 0x_1234567890ABCDEF_u64;
5835 println!("K =\t{:#016X}", key);
5836 let mut a_des = DES::new_with_key_u64(key);
5837
5838 let message = "고맙습니다.";
5839 println!("M =\t{}", message);
5840 let mut cipher = [0_u8; 24];
5841 a_des.encrypt_str_into_array(&message, &mut cipher);
5842 print!("C =\t");
5843 for c in cipher.clone()
5844 { print!("{:02X} ", c); }
5845 println!();
5846 let mut txt = String::new();
5847 for c in cipher.clone()
5848 { write!(txt, "{:02X} ", c); }
5849 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
5850
5851 let mut recovered = Vec::<u8>::new();
5852 a_des.decrypt_array_into_vec(&cipher, &mut recovered);
5853 print!("Ba =\t");
5854 for b in recovered.clone()
5855 { print!("{:02X} ", b); }
5856 println!();
5857 let mut txt = String::new();
5858 for c in recovered.clone()
5859 { write!(txt, "{:02X} ", c); }
5860 assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E ");
5861
5862 let mut converted = String::new();
5863 unsafe { converted.as_mut_vec() }.append(&mut recovered);
5864
5865 println!("Bb =\t{}", converted);
5866 assert_eq!(converted, "고맙습니다.");
5867 assert_eq!(converted, message);
5868 println!("-------------------------------");
5869}
5870
5871fn des_decrypt_array_with_padding_iso_ecb_into_array()
5872{
5873 println!("des_decrypt_array_with_padding_iso_ecb_into_array()");
5874 use std::io::Write;
5875 use std::fmt::Write as _;
5876 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
5877
5878 let key = 0x_1234567890ABCDEF_u64;
5880 println!("K =\t{:#016X}", key);
5881 let mut a_des = DES::new_with_key_u64(key);
5882
5883 let message = "In the beginning God created the heavens and the earth.";
5884 println!("M =\t{}", message);
5885 let mut cipher = [0_u8; 56];
5886 a_des.encrypt_str_into_array(&message, &mut cipher);
5887 print!("C (16 rounds) =\t");
5888 for c in cipher.clone()
5889 { print!("{:02X} ", c); }
5890 println!();
5891 let mut txt = String::new();
5892 for c in cipher.clone()
5893 { write!(txt, "{:02X} ", c); }
5894 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
5895
5896 let mut recovered = [0u8; 56];
5897 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
5898 print!("Ba (16 rounds) =\t");
5899 for b in recovered.clone()
5900 { print!("{:02X} ", b); }
5901 println!();
5902 let mut txt = String::new();
5903 for c in recovered.clone()
5904 { write!(txt, "{:02X} ", c); }
5905 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
5906
5907 let mut converted = String::new();
5908 unsafe { converted.as_mut_vec() }.write(&recovered);
5909 unsafe { converted.as_mut_vec() }.truncate(len as usize);
5910 println!("Bb (16 rounds) =\t{}", converted);
5911 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
5912 assert_eq!(converted, message);
5913 println!();
5914
5915 let key = 0x_1234567890ABCDEF_u64;
5917 println!("K =\t{:#016X}", key);
5918 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
5919
5920 let message = "In the beginning God created the heavens and the earth.";
5921 println!("M =\t{}", message);
5922 let mut cipher = [0_u8; 56];
5923 a_des.encrypt_str_into_array(&message, &mut cipher);
5924 print!("C (128 rounds) =\t");
5925 for c in cipher.clone()
5926 { print!("{:02X} ", c); }
5927 println!();
5928 let mut txt = String::new();
5929 for c in cipher.clone()
5930 { write!(txt, "{:02X} ", c); }
5931 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
5932
5933 let mut recovered = [0u8; 56];
5934 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
5935 print!("Ba (16 rounds) =\t");
5936 for b in recovered.clone()
5937 { print!("{:02X} ", b); }
5938 println!();
5939 let mut txt = String::new();
5940 for c in recovered.clone()
5941 { write!(txt, "{:02X} ", c); }
5942 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
5943
5944 let mut converted = String::new();
5945 unsafe { converted.as_mut_vec() }.write(&recovered);
5946 unsafe { converted.as_mut_vec() }.truncate(len as usize);
5947 println!("Bb (16 rounds) =\t{}", converted);
5948 assert_eq!(converted, "In the beginning God created the heavens and the earth.");
5949 assert_eq!(converted, message);
5950 println!();
5951
5952 let key1 = 0x_1234567890ABCDEF_u64;
5954 let key2 = 0_u64;
5955 println!("K =\t{:#016X}", key);
5956 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
5957 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
5958
5959 let message = "In the beginning God created the heavens and the earth.";
5960 println!("M =\t{}", message);
5961 let mut cipher1 = [0_u8; 56];
5962 let mut cipher2 = [0_u8; 56];
5963 c_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher1);
5964 d_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher2);
5965 print!("C (0 rounds) =\t");
5966 for c in cipher1.clone()
5967 { print!("{:02X} ", c); }
5968 println!();
5969 let mut txt = String::new();
5970 for c in cipher1.clone()
5971 { write!(txt, "{:02X} ", c); }
5972 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
5973 print!("D (0 rounds) =\t");
5974 for c in cipher2.clone()
5975 { print!("{:02X} ", c); }
5976 println!();
5977 let mut txt = String::new();
5978 for c in cipher2.clone()
5979 { write!(txt, "{:02X} ", c); }
5980 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
5981
5982 let mut recovered1 = [0u8; 56];
5983 let mut recovered2 = [0u8; 56];
5984 let len1 = c_des.decrypt_array_into_array(&cipher1, &mut recovered1);
5985 let len2 = d_des.decrypt_array_into_array(&cipher2, &mut recovered2);
5986 print!("B1a (0 rounds) =\t");
5987 for b in recovered1.clone()
5988 { print!("{:02X} ", b); }
5989 println!();
5990 let mut txt = String::new();
5991 for c in recovered1.clone()
5992 { write!(txt, "{:02X} ", c); }
5993 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
5994 print!("B2a (0 rounds) =\t");
5995 for b in recovered2.clone()
5996 { print!("{:02X} ", b); }
5997 println!();
5998 let mut txt = String::new();
5999 for c in recovered.clone()
6000 { write!(txt, "{:02X} ", c); }
6001 assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
6002
6003 let mut converted1 = String::new();
6004 let mut converted2 = String::new();
6005 unsafe { converted1.as_mut_vec() }.write(&recovered1);
6006 unsafe { converted2.as_mut_vec() }.write(&recovered2);
6007 unsafe { converted1.as_mut_vec() }.truncate(len1 as usize);
6008 unsafe { converted2.as_mut_vec() }.truncate(len2 as usize);
6009 println!("B1b (0 rounds) =\t{}", converted1);
6010 println!("B2b (0 rounds) =\t{}", converted2);
6011 assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
6012 assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
6013 assert_eq!(converted1, message);
6014 assert_eq!(converted2, message);
6015 assert_eq!(converted1, converted2);
6016 println!();
6017
6018 let key = 0x_1234567890ABCDEF_u64;
6020 println!("K =\t{:#016X}", key);
6021 let mut a_des = DES::new_with_key_u64(key);
6022
6023 let message = "";
6024 println!("M =\t{}", message);
6025 let mut cipher = [0_u8; 8];
6026 a_des.encrypt_str_into_array(&message, &mut cipher);
6027 print!("C =\t");
6028 for c in cipher.clone()
6029 { print!("{:02X} ", c); }
6030 println!();
6031 let mut txt = String::new();
6032 for c in cipher.clone()
6033 { write!(txt, "{:02X} ", c); }
6034 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
6035
6036 let mut recovered = [0u8; 8];
6037 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
6038
6039 print!("Ba =\t");
6040 for b in recovered.clone()
6041 { print!("{:02X} ", b); }
6042 println!();
6043 let mut txt = String::new();
6044 for c in recovered.clone()
6045 { write!(txt, "{:02X} ", c); }
6046 assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
6047
6048 let mut converted = String::new();
6049 unsafe { converted.as_mut_vec() }.write(&recovered);
6050 unsafe { converted.as_mut_vec() }.truncate(len as usize);
6051 println!("Bb =\t{}", converted);
6052 assert_eq!(converted, "");
6053 assert_eq!(converted, message);
6054 println!();
6055
6056 let key = 0x_1234567890ABCDEF_u64;
6058 println!("K =\t{:#016X}", key);
6059 let mut a_des = DES::new_with_key_u64(key);
6060
6061 let message = "7 bytes";
6062 println!("M =\t{}", message);
6063 let mut cipher = [0_u8; 8];
6064 a_des.encrypt_str_into_array(&message, &mut cipher);
6065 print!("C =\t");
6066 for c in cipher.clone()
6067 { print!("{:02X} ", c); }
6068 println!();
6069 let mut txt = String::new();
6070 for c in cipher.clone()
6071 { write!(txt, "{:02X} ", c); }
6072 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
6073
6074 let mut recovered = [0u8; 8];
6075 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
6076
6077 print!("Ba =\t");
6078 for b in recovered.clone()
6079 { print!("{:02X} ", b); }
6080 println!();
6081 let mut txt = String::new();
6082 for c in recovered.clone()
6083 { write!(txt, "{:02X} ", c); }
6084 assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
6085
6086 let mut converted = String::new();
6087 unsafe { converted.as_mut_vec() }.write(&recovered);
6088 unsafe { converted.as_mut_vec() }.truncate(len as usize);
6089 println!("Bb =\t{}", converted);
6090 assert_eq!(converted, "7 bytes");
6091 assert_eq!(converted, message);
6092 println!();
6093
6094 let key = 0x_1234567890ABCDEF_u64;
6096 println!("K =\t{:#016X}", key);
6097 let mut a_des = DES::new_with_key_u64(key);
6098
6099 let message = "I am OK.";
6100 println!("M =\t{}", message);
6101 let mut cipher = [0_u8; 16];
6102 a_des.encrypt_str_into_array(&message, &mut cipher);
6103 print!("C =\t");
6104 for c in cipher.clone()
6105 { print!("{:02X} ", c); }
6106 println!();
6107 let mut txt = String::new();
6108 for c in cipher.clone()
6109 { write!(txt, "{:02X} ", c); }
6110 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
6111
6112 let mut recovered = [0u8; 16];
6113 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
6114
6115 print!("Ba =\t");
6116 for b in recovered.clone()
6117 { print!("{:02X} ", b); }
6118 println!();
6119 let mut txt = String::new();
6120 for c in recovered.clone()
6121 { write!(txt, "{:02X} ", c); }
6122 assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
6123
6124 let mut converted = String::new();
6125 unsafe { converted.as_mut_vec() }.write(&recovered);
6126 unsafe { converted.as_mut_vec() }.truncate(len as usize);
6127 println!("Bb =\t{}", converted);
6128 assert_eq!(converted, "I am OK.");
6129 assert_eq!(converted, message);
6130 println!();
6131
6132 let key = 0x_1234567890ABCDEF_u64;
6134 println!("K =\t{:#016X}", key);
6135 let mut a_des = DES::new_with_key_u64(key);
6136
6137 let message = "PARK Youngho";
6138 println!("M =\t{}", message);
6139 let mut cipher = [0_u8; 16];
6140 a_des.encrypt_str_into_array(&message, &mut cipher);
6141 print!("C =\t");
6142 for c in cipher.clone()
6143 { print!("{:02X} ", c); }
6144 println!();
6145 let mut txt = String::new();
6146 for c in cipher.clone()
6147 { write!(txt, "{:02X} ", c); }
6148 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
6149
6150 let mut recovered = [0u8; 16];
6151 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
6152
6153 print!("Ba =\t");
6154 for b in recovered.clone()
6155 { print!("{:02X} ", b); }
6156 println!();
6157 let mut txt = String::new();
6158 for c in recovered.clone()
6159 { write!(txt, "{:02X} ", c); }
6160 assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
6161
6162 let mut converted = String::new();
6163 unsafe { converted.as_mut_vec() }.write(&recovered);
6164 unsafe { converted.as_mut_vec() }.truncate(len as usize);
6165 println!("Bb =\t{}", converted);
6166 assert_eq!(converted, "PARK Youngho");
6167 assert_eq!(converted, message);
6168 println!();
6169
6170 let key = 0x_1234567890ABCDEF_u64;
6172 println!("K =\t{:#016X}", key);
6173 let mut a_des = DES::new_with_key_u64(key);
6174
6175 let message = "고맙습니다.";
6176 println!("M =\t{}", message);
6177 let mut cipher = [0_u8; 24];
6178 a_des.encrypt_str_into_array(&message, &mut cipher);
6179 print!("C =\t");
6180 for c in cipher.clone()
6181 { print!("{:02X} ", c); }
6182 println!();
6183 let mut txt = String::new();
6184 for c in cipher.clone()
6185 { write!(txt, "{:02X} ", c); }
6186 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
6187
6188 let mut recovered = [0u8; 24];
6189 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
6190
6191 print!("Ba =\t");
6192 for b in recovered.clone()
6193 { print!("{:02X} ", b); }
6194 println!();
6195 let mut txt = String::new();
6196 for c in recovered.clone()
6197 { write!(txt, "{:02X} ", c); }
6198 assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
6199
6200 let mut converted = String::new();
6201 unsafe { converted.as_mut_vec() }.write(&recovered);
6202 unsafe { converted.as_mut_vec() }.truncate(len as usize);
6203 println!("Bb =\t{}", converted);
6204 assert_eq!(converted, "고맙습니다.");
6205 assert_eq!(converted, message);
6206 println!("-------------------------------");
6207}
6208
6209fn des_decrypt_array_with_padding_iso_ecb_into_string()
6210{
6211 println!("des_decrypt_array_with_padding_iso_ecb_into_string()");
6212 use std::io::Write;
6213 use std::fmt::Write as _;
6214 use cryptocol::symmetric::{ DES, DES_Expanded, ECB_ISO };
6215
6216 let key = 0x_1234567890ABCDEF_u64;
6218 println!("K =\t{:#016X}", key);
6219 let mut a_des = DES::new_with_key_u64(key);
6220
6221 let message = "In the beginning God created the heavens and the earth.";
6222 println!("M =\t{}", message);
6223 let mut cipher = [0_u8; 56];
6224 a_des.encrypt_str_into_array(&message, &mut cipher);
6225 print!("C (16 rounds) =\t");
6226 for c in cipher.clone()
6227 { print!("{:02X} ", c); }
6228 println!();
6229 let mut txt = String::new();
6230 for c in cipher.clone()
6231 { write!(txt, "{:02X} ", c); }
6232 assert_eq!(txt, "6F 10 01 6D 99 BF 41 F8 BC 00 A8 1D 81 B7 4B 20 6F B5 30 0A 14 03 A9 8E 69 E7 A6 33 42 AF 97 59 ED 9D E0 95 35 DC DF 0D 99 58 FA 92 13 50 4D 50 F4 BE 6B A5 C5 7D F6 5D ");
6233
6234 let mut recovered = String::new();
6235 a_des.decrypt_array_into_string(&cipher, &mut recovered);
6236 println!("B (16 rounds) =\t{}", recovered);
6237 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
6238 assert_eq!(recovered, message);
6239 println!();
6240
6241 let key = 0x_1234567890ABCDEF_u64;
6243 println!("K =\t{:#016X}", key);
6244 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
6245
6246 let message = "In the beginning God created the heavens and the earth.";
6247 println!("M =\t{}", message);
6248 let mut cipher = [0_u8; 56];
6249 a_des.encrypt_str_into_array(&message, &mut cipher);
6250 print!("C (128 rounds) =\t");
6251 for c in cipher.clone()
6252 { print!("{:02X} ", c); }
6253 println!();
6254 let mut txt = String::new();
6255 for c in cipher.clone()
6256 { write!(txt, "{:02X} ", c); }
6257 assert_eq!(txt, "DD C6 D8 D1 B0 66 D9 AC F7 F3 B4 FD D6 6C ED 78 20 FB A6 8D 35 38 EA 65 B0 65 23 05 FF D4 53 B1 D1 E0 C5 52 36 1E AC E2 19 EF 94 B8 98 04 A9 69 22 62 41 CF 85 0E E5 3F ");
6258
6259 let mut recovered = String::new();
6260 a_des.decrypt_array_into_string(&cipher, &mut recovered);
6261 println!("B (128 rounds) =\t{}", recovered);
6262 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
6263 assert_eq!(recovered, message);
6264 println!();
6265
6266 let key1 = 0x_1234567890ABCDEF_u64;
6268 let key2 = 0_u64;
6269 println!("K =\t{:#016X}", key);
6270 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
6271 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
6272
6273 let message = "In the beginning God created the heavens and the earth.";
6274 println!("M =\t{}", message);
6275 let mut cipher1 = [0_u8; 56];
6276 let mut cipher2 = [0_u8; 56];
6277 c_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher1);
6278 d_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher2);
6279 print!("C (0 rounds) =\t");
6280 for c in cipher1.clone()
6281 { print!("{:02X} ", c); }
6282 println!();
6283 let mut txt = String::new();
6284 for c in cipher1.clone()
6285 { write!(txt, "{:02X} ", c); }
6286 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
6287 print!("D (0 rounds) =\t");
6288 for c in cipher2.clone()
6289 { print!("{:02X} ", c); }
6290 println!();
6291 let mut txt = String::new();
6292 for c in cipher2.clone()
6293 { write!(txt, "{:02X} ", c); }
6294 assert_eq!(txt, "86 9D 10 B8 94 9A 10 91 9A 9B 96 9D 9D 96 9D 9B 10 8B 9F 98 10 93 B1 9A 92 B8 9A 98 10 B8 94 9A 10 94 9A 92 B9 9A 9D B3 10 92 9D 98 10 B8 94 9A 10 9A 92 B1 B8 94 1D 40 ");
6295
6296 let mut recovered1 = String::new();
6297 let mut recovered2 = String::new();
6298 c_des.decrypt_array_into_string(&cipher1, &mut recovered1);
6299 d_des.decrypt_array_into_string(&cipher2, &mut recovered2);
6300 println!("B1 (0 rounds) =\t{}", recovered1);
6301 println!("B2 (0 rounds) =\t{}", recovered2);
6302 assert_eq!(recovered1, "In the beginning God created the heavens and the earth.");
6303 assert_eq!(recovered2, "In the beginning God created the heavens and the earth.");
6304 assert_eq!(recovered1, message);
6305 assert_eq!(recovered2, message);
6306 assert_eq!(recovered1, recovered2);
6307 println!();
6308
6309 let key = 0x_1234567890ABCDEF_u64;
6311 println!("K =\t{:#016X}", key);
6312 let mut a_des = DES::new_with_key_u64(key);
6313
6314 let message = "";
6315 println!("M =\t{}", message);
6316 let mut cipher = [0_u8; 8];
6317 a_des.encrypt_str_into_array(&message, &mut cipher);
6318 print!("C =\t");
6319 for c in cipher.clone()
6320 { print!("{:02X} ", c); }
6321 println!();
6322 let mut txt = String::new();
6323 for c in cipher.clone()
6324 { write!(txt, "{:02X} ", c); }
6325 assert_eq!(txt, "E2 22 32 FE 87 E8 0A 93 ");
6326
6327 let mut recovered = String::new();
6328 a_des.decrypt_array_into_string(&cipher, &mut recovered);
6329 println!("B =\t{}", recovered);
6330 assert_eq!(recovered, "");
6331 assert_eq!(recovered, message);
6332 println!();
6333
6334 let key = 0x_1234567890ABCDEF_u64;
6336 println!("K =\t{:#016X}", key);
6337 let mut a_des = DES::new_with_key_u64(key);
6338
6339 let message = "7 bytes";
6340 println!("M =\t{}", message);
6341 let mut cipher = [0_u8; 8];
6342 a_des.encrypt_str_into_array(&message, &mut cipher);
6343 print!("C =\t");
6344 for c in cipher.clone()
6345 { print!("{:02X} ", c); }
6346 println!();
6347 let mut txt = String::new();
6348 for c in cipher.clone()
6349 { write!(txt, "{:02X} ", c); }
6350 assert_eq!(txt, "ED 30 F1 06 B7 E3 E7 07 ");
6351
6352 let mut recovered = String::new();
6353 a_des.decrypt_array_into_string(&cipher, &mut recovered);
6354 println!("B =\t{}", recovered);
6355 assert_eq!(recovered, "7 bytes");
6356 assert_eq!(recovered, message);
6357 println!();
6358
6359 let key = 0x_1234567890ABCDEF_u64;
6361 println!("K =\t{:#016X}", key);
6362 let mut a_des = DES::new_with_key_u64(key);
6363
6364 let message = "I am OK.";
6365 println!("M =\t{}", message);
6366 let mut cipher = [0_u8; 16];
6367 a_des.encrypt_str_into_array(&message, &mut cipher);
6368 print!("C =\t");
6369 for c in cipher.clone()
6370 { print!("{:02X} ", c); }
6371 println!();
6372 let mut txt = String::new();
6373 for c in cipher.clone()
6374 { write!(txt, "{:02X} ", c); }
6375 assert_eq!(txt, "27 F5 93 EE 76 DC 64 87 E2 22 32 FE 87 E8 0A 93 ");
6376
6377 let mut recovered = String::new();
6378 a_des.decrypt_array_into_string(&cipher, &mut recovered);
6379 println!("B =\t{}", recovered);
6380 assert_eq!(recovered, "I am OK.");
6381 assert_eq!(recovered, message);
6382 println!();
6383
6384 let key = 0x_1234567890ABCDEF_u64;
6386 println!("K =\t{:#016X}", key);
6387 let mut a_des = DES::new_with_key_u64(key);
6388
6389 let message = "PARK Youngho";
6390 println!("M =\t{}", message);
6391 let mut cipher = [0_u8; 16];
6392 a_des.encrypt_str_into_array(&message, &mut cipher);
6393 print!("C =\t");
6394 for c in cipher.clone()
6395 { print!("{:02X} ", c); }
6396 println!();
6397 let mut txt = String::new();
6398 for c in cipher.clone()
6399 { write!(txt, "{:02X} ", c); }
6400 assert_eq!(txt, "8E 52 20 47 78 78 51 B7 BB 55 6A 78 71 84 72 58 ");
6401
6402 let mut recovered = String::new();
6403 a_des.decrypt_array_into_string(&cipher, &mut recovered);
6404 println!("B =\t{}", recovered);
6405 assert_eq!(recovered, "PARK Youngho");
6406 assert_eq!(recovered, message);
6407 println!();
6408
6409 let key = 0x_1234567890ABCDEF_u64;
6411 println!("K =\t{:#016X}", key);
6412 let mut a_des = DES::new_with_key_u64(key);
6413
6414 let message = "고맙습니다.";
6415 println!("M =\t{}", message);
6416 let mut cipher = [0_u8; 24];
6417 a_des.encrypt_str_into_array(&message, &mut cipher);
6418 print!("C =\t");
6419 for c in cipher.clone()
6420 { print!("{:02X} ", c); }
6421 println!();
6422 let mut txt = String::new();
6423 for c in cipher.clone()
6424 { write!(txt, "{:02X} ", c); }
6425 assert_eq!(txt, "20 83 6B 12 1D 3A 5D BA 4D D6 5F 5A 8E 2E AC E7 E2 22 32 FE 87 E8 0A 93 ");
6426
6427 let mut recovered = String::new();
6428 a_des.decrypt_array_into_string(&cipher, &mut recovered);
6429 println!("B =\t{}", recovered);
6430 assert_eq!(recovered, "고맙습니다.");
6431 assert_eq!(recovered, message);
6432 println!("-------------------------------");
6433}