1#![allow(missing_docs)]
10#![allow(unused_must_use)]
11#![allow(dead_code)]
12#![allow(unused_imports)]
13#![allow(non_snake_case)]
14
15pub fn main()
410{
411 des_quick_start_main();
412 des_basic_operation_main();
413 des_encrypt_decrypt_u64_array_u64_main();
414}
415
416fn des_quick_start_main()
417{
418 des_quick_start_instantiation_with_key();
419 des_quick_start_instantiation_without_key();
420 des_quick_start_encryption_decryption_16_rounds();
421 des_quick_start_encryption_decryption_256_rounds();
422}
423
424fn des_quick_start_instantiation_with_key()
425{
426 println!("des_quick_start_instantiation_with_key()");
427 use cryptocol::symmetric::DES;
428
429 let key = 0x_1234567890ABCDEF_u64;
430 let mut _a_des = DES::new_with_key_u64(key);
431
432 let key = [0xEFu8, 0xCDu8, 0xABu8, 0x90u8, 0x78u8, 0x56u8, 0x34u8, 0x12u8];
433 let mut _a_des = DES::new_with_key(key);
434 println!("-------------------------------");
435}
436
437fn des_quick_start_instantiation_without_key()
438{
439 println!("des_quick_start_instantiation_without_key()");
440 use cryptocol::symmetric::DES;
441
442 let mut a_des = DES::new();
443 let key = 0x_1234567890ABCDEF_u64;
444 a_des.set_key_u64(key);
445
446 let mut a_des = DES::new();
447 let key = [0xEFu8, 0xCDu8, 0xABu8, 0x90u8, 0x78u8, 0x56u8, 0x34u8, 0x12u8];
448 a_des.set_key(key);
449 println!("-------------------------------");
450}
451
452fn des_quick_start_encryption_decryption_16_rounds()
453{
454 println!("des_quick_start_encryption_decryption_16_rounds()");
455 use std::io::Write;
456 use std::fmt::Write as _;
457 use cryptocol::symmetric::{ CBC_PKCS7, DES };
458
459 let mut a_des = DES::new_with_key([0xEFu8, 0xCDu8, 0xABu8, 0x90u8, 0x78u8, 0x56u8, 0x34u8, 0x12u8]);
460 let message = "In the beginning God created the heavens and the earth.";
461 println!("M =\t{}", message);
462 let iv = 0x_FEDCBA0987654321_u64;
463 println!("IV =\t{}", iv);
464 let mut cipher = Vec::<u8>::new();
465 a_des.encrypt_str_into_vec(iv, message, &mut cipher);
466 print!("C =\t");
467 for c in cipher.clone()
468 { print!("{:02X} ", c); }
469 println!();
470 let mut txt = String::new();
471 for c in cipher.clone()
472 { write!(txt, "{:02X} ", c); }
473 assert_eq!(txt, "4B B5 ED DC A0 58 7E 6D 6C 3B A2 00 38 C3 D4 29 42 B1 CF 0D E9 FA EA 11 11 6B C8 30 73 39 DD B7 3F 96 9B A3 76 05 34 7E 64 2F D4 CC B2 68 33 64 C5 9E EF 01 A9 4A FD 5B ");
474
475 let mut recovered = String::new();
476 a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
477 println!("B (16 rounds) =\t{}", recovered);
478 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
479 assert_eq!(recovered, message);
480 println!("-------------------------------");
481}
482
483fn des_quick_start_encryption_decryption_256_rounds()
484{
485 println!("des_quick_start_encryption_decryption_256_rounds()");
486 use std::io::Write;
487 use std::fmt::Write as _;
488 use cryptocol::symmetric::{ CBC_PKCS7, DES_Expanded };
489
490 let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key([0xEFu8, 0xCDu8, 0xABu8, 0x90u8, 0x78u8, 0x56u8, 0x34u8, 0x12u8]);
491 let message = "In the beginning God created the heavens and the earth.";
492 println!("M =\t{}", message);
493 let iv = 0x_FEDCBA0987654321_u64;
494 println!("IV =\t{}", iv);
495 let mut cipher = Vec::<u8>::new();
496 a_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher);
497 print!("C =\t");
498 for c in cipher.clone()
499 { print!("{:02X} ", c); }
500 println!();
501 let mut txt = String::new();
502 for c in cipher.clone()
503 { write!(txt, "{:02X} ", c); }
504 assert_eq!(txt, "0B EA 6B BC 68 F9 B0 3E 7D AF DE 71 9C 08 AA 16 42 40 1C C8 DC 40 51 C6 8D D4 E7 D2 0B A4 F2 09 02 02 C2 6E 99 BC 9E 2A F4 11 7E 48 A7 ED 76 70 C6 9D C6 BD A6 9B 58 8B ");
505
506 let mut recovered = String::new();
507 a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
508 println!("B =\t{}", recovered);
509 assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
510 assert_eq!(recovered, message);
511 println!("-------------------------------");
512}
513
514fn des_basic_operation_main()
515{
516 des_new();
517 des_new_with_key();
518 des_new_with_key_u64();
519 des_encryptor_with_key();
520 des_encryptor_with_key_u64();
521 des_decryptor_with_key();
522 des_decryptor_with_key_u64();
523 des_get_key();
524 des_get_key_u64();
525 des_set_key();
526 des_set_key_u64();
527 des_turn_inverse();
528 des_turn_encryptor();
529 des_turn_decryptor();
530}
531
532fn des_new()
533{
534 println!("des_new()");
535 use cryptocol::symmetric::DES;
536
537 let mut des = DES::new(); let plaintext = 0x1234567890ABCDEF_u64;
539 let ciphertext = des.encrypt_u64(plaintext);
540
541 println!("Plaintext:\t\t{:#016X}", plaintext);
542 println!("Ciphertext:\t\t{:#016X}", ciphertext);
543 assert_eq!(ciphertext, 0x1E32B46B44C69201_u64);
544
545 let cipher_cipher_text = des.encrypt_u64(ciphertext);
546 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
547 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
548 assert_eq!(cipher_cipher_text, plaintext); #[cfg(test)]
551 des_compile_fail_new();
552 println!("-------------------------------");
553}
554
555#[test]
556fn des_compile_fail_new()
557{
558 use cryptocol::symmetric::DES;
559 let des = DES::new();
560 #[cfg(compile_fail)] des.encrypt_u64(0x1E32B46B44C69201_u64);
562}
563
564fn des_new_with_key()
565{
566 println!("des_new_with_key()");
567 use cryptocol::symmetric::DES;
568
569 let mut des = DES::new_with_key([0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
571 let plaintext = 0x1234567890ABCDEF_u64;
572 let ciphertext = des.encrypt_u64(plaintext);
573
574 println!("Plaintext:\t\t{:#016X}", plaintext);
575 println!("Ciphertext:\t\t{:#016X}", ciphertext);
576 assert_eq!(ciphertext, 0x3B6041D76AF28F23_u64);
577
578 let cipher_cipher_text = des.encrypt_u64(ciphertext);
579 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
580 assert_eq!(cipher_cipher_text, 0x7C5AAE491DC1310D_u64);
581 assert_ne!(cipher_cipher_text, plaintext);
582 println!();
583
584 let mut des1 = DES::new_with_key([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
588 let mut des2 = DES::new_with_key([0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01]);
589
590 let plaintext = 0x1234567890ABCDEF_u64;
591 let ciphertext1 = des1.encrypt_u64(plaintext);
592 let ciphertext2 = des2.encrypt_u64(plaintext);
593
594 println!("Plaintext:\t\t{:#016X}", plaintext);
595 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
596 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
597 assert_eq!(ciphertext1, 0x1E32B46B44C69201_u64);
598 assert_eq!(ciphertext2, 0x1E32B46B44C69201_u64);
599 assert_eq!(ciphertext1, ciphertext2);
600
601 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
602 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
603 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
604 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
605 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
606 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
607 assert_eq!(cipher_cipher_text1, plaintext);
608 assert_eq!(cipher_cipher_text2, plaintext);
609 println!();
610 let mut des1 = DES::new_with_key([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
618 let mut des2 = DES::new_with_key([0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE]);
619 let plaintext = 0x1234567890ABCDEF_u64;
620 let ciphertext1 = des1.encrypt_u64(plaintext);
621 let ciphertext2 = des2.encrypt_u64(plaintext);
622
623 println!("Plaintext:\t\t{:#016X}", plaintext);
624 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
625 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
626 assert_eq!(ciphertext1, 0xA5997AB38BC07250_u64);
627 assert_eq!(ciphertext2, 0xA5997AB38BC07250_u64);
628 assert_eq!(ciphertext1, ciphertext2);
629
630 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
631 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
632 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
633 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
634 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
635 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
636 assert_eq!(cipher_cipher_text1, plaintext);
637 assert_eq!(cipher_cipher_text2, plaintext);
638 println!();
639 let mut des1 = DES::new_with_key([0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1]);
646 let mut des2 = DES::new_with_key([0xE1, 0xE1, 0xE1, 0xE1, 0xF0, 0xF0, 0xF0, 0xF0]);
647 let plaintext = 0x1234567890ABCDEF_u64;
648 let ciphertext1 = des1.encrypt_u64(plaintext);
649 let ciphertext2 = des2.encrypt_u64(plaintext);
650
651 println!("Plaintext:\t\t{:#016X}", plaintext);
652 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
653 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
654 assert_eq!(ciphertext1, 0x94CCA0201F033101_u64);
655 assert_eq!(ciphertext2, 0x94CCA0201F033101_u64);
656 assert_eq!(ciphertext1, ciphertext2);
657
658 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
659 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
660 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
661 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
662 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
663 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
664 assert_eq!(cipher_cipher_text1, plaintext);
665 assert_eq!(cipher_cipher_text2, plaintext);
666 println!();
667 let mut des1 = DES::new_with_key([0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E]);
674 let mut des2 = DES::new_with_key([0x1E, 0x1E, 0x1E, 0x1E, 0x0F, 0x0F, 0x0F, 0x0F]);
675 let plaintext = 0x1234567890ABCDEF_u64;
676 let ciphertext1 = des1.encrypt_u64(plaintext);
677 let ciphertext2 = des2.encrypt_u64(plaintext);
678
679 println!("Plaintext:\t\t{:#016X}", plaintext);
680 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
681 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
682 assert_eq!(ciphertext1, 0x4FB6397B5352DB0C_u64);
683 assert_eq!(ciphertext2, 0x4FB6397B5352DB0C_u64);
684 assert_eq!(ciphertext1, ciphertext2);
685
686 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
687 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
688 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
689 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
690 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
691 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
692 assert_eq!(cipher_cipher_text1, plaintext);
693 assert_eq!(cipher_cipher_text2, plaintext);
694 println!();
695 let mut des1 = DES::new_with_key([0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E]);
700 let mut des2 = DES::new_with_key([0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01]);
701
702 let plaintext = 0x1234567890ABCDEF_u64;
703 let ciphertext = des1.encrypt_u64(plaintext);
704 println!("Plaintext:\t\t{:#016X}", plaintext);
705 println!("Ciphertext:\t\t{:#016X}", ciphertext);
706 assert_eq!(ciphertext, 0xC2C71D736E97876C_u64);
707
708 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
709 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
710 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
711 assert_eq!(cipher_cipher_text, plaintext);
712
713 let ciphertext = des2.encrypt_u64(plaintext);
714 println!("Plaintext:\t\t{:#016X}", plaintext);
715 println!("Ciphertext:\t\t{:#016X}", ciphertext);
716 assert_eq!(ciphertext, 0x063A6E55466423D2_u64);
717
718 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
719 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
720 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
721 assert_eq!(cipher_cipher_text, plaintext);
722 println!();
723 let mut des1 = DES::new_with_key([0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1]);
727 let mut des2 = DES::new_with_key([0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01]);
728
729 let plaintext = 0x1234567890ABCDEF_u64;
730 let ciphertext = des1.encrypt_u64(plaintext);
731 println!("Plaintext:\t\t{:#016X}", plaintext);
732 println!("Ciphertext:\t\t{:#016X}", ciphertext);
733 assert_eq!(ciphertext, 0x85A63690E79AAA15_u64);
734
735 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
736 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
737 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
738 assert_eq!(cipher_cipher_text, plaintext);
739
740 let ciphertext = des2.encrypt_u64(plaintext);
741 println!("Plaintext:\t\t{:#016X}", plaintext);
742 println!("Ciphertext:\t\t{:#016X}", ciphertext);
743 assert_eq!(ciphertext, 0x15B721BBB44A12F5_u64);
744
745 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
746 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
747 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
748 assert_eq!(cipher_cipher_text, plaintext);
749 println!();
750 let mut des1 = DES::new_with_key([0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE]);
754 let mut des2 = DES::new_with_key([0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01]);
755
756 let plaintext = 0x1234567890ABCDEF_u64;
757 let ciphertext = des1.encrypt_u64(plaintext);
758 println!("Plaintext:\t\t{:#016X}", plaintext);
759 println!("Ciphertext:\t\t{:#016X}", ciphertext);
760 assert_eq!(ciphertext, 0xAE38CC9D9FA48581_u64);
761
762 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
763 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
764 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
765 assert_eq!(cipher_cipher_text, plaintext);
766
767 let ciphertext = des2.encrypt_u64(plaintext);
768 println!("Plaintext:\t\t{:#016X}", plaintext);
769 println!("Ciphertext:\t\t{:#016X}", ciphertext);
770 assert_eq!(ciphertext, 0x7EE95658A653960D_u64);
771
772 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
773 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
774 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
775 assert_eq!(cipher_cipher_text, plaintext);
776 println!();
777 let mut des1 = DES::new_with_key([0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1]);
781 let mut des2 = DES::new_with_key([0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E]);
782
783 let plaintext = 0x1234567890ABCDEF_u64;
784 let ciphertext = des1.encrypt_u64(plaintext);
785 println!("Plaintext:\t\t{:#016X}", plaintext);
786 println!("Ciphertext:\t\t{:#016X}", ciphertext);
787 assert_eq!(ciphertext, 0x81ECC05B173F793E_u64);
788
789 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
790 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
791 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
792 assert_eq!(cipher_cipher_text, plaintext);
793
794 let ciphertext = des2.encrypt_u64(plaintext);
795 println!("Plaintext:\t\t{:#016X}", plaintext);
796 println!("Ciphertext:\t\t{:#016X}", ciphertext);
797 assert_eq!(ciphertext, 0x4D0AD4DC147E4BDF_u64);
798
799 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
800 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
801 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
802 assert_eq!(cipher_cipher_text, plaintext);
803 println!();
804 let mut des1 = DES::new_with_key([0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE]);
808 let mut des2 = DES::new_with_key([0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E]);
809
810 let plaintext = 0x1234567890ABCDEF_u64;
811 let ciphertext = des1.encrypt_u64(plaintext);
812 println!("Plaintext:\t\t{:#016X}", plaintext);
813 println!("Ciphertext:\t\t{:#016X}", ciphertext);
814 assert_eq!(ciphertext, 0x59735490F84A0AD0_u64);
815
816 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
817 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
818 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
819 assert_eq!(cipher_cipher_text, plaintext);
820
821 let ciphertext = des2.encrypt_u64(plaintext);
822 println!("Plaintext:\t\t{:#016X}", plaintext);
823 println!("Ciphertext:\t\t{:#016X}", ciphertext);
824 assert_eq!(ciphertext, 0x79FD3CBFE57F4B0B_u64);
825
826 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
827 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
828 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
829 assert_eq!(cipher_cipher_text, plaintext);
830 println!();
831 let mut des1 = DES::new_with_key([0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE]);
835 let mut des2 = DES::new_with_key([0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1]);
836
837 let plaintext = 0x1234567890ABCDEF_u64;
838 let ciphertext = des1.encrypt_u64(plaintext);
839 println!("Plaintext:\t\t{:#016X}", plaintext);
840 println!("Ciphertext:\t\t{:#016X}", ciphertext);
841 assert_eq!(ciphertext, 0x27C83AAE29571889_u64);
842
843 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
844 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
845 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
846 assert_eq!(cipher_cipher_text, plaintext);
847
848 let ciphertext = des2.encrypt_u64(plaintext);
849 println!("Plaintext:\t\t{:#016X}", plaintext);
850 println!("Ciphertext:\t\t{:#016X}", ciphertext);
851 assert_eq!(ciphertext, 0xDE76DF630C033919_u64);
852
853 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
854 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
855 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
856 assert_eq!(cipher_cipher_text, plaintext);
857 #[cfg(test)]
860 des_compile_fail_new_with_key();
861 println!("-------------------------------");
862}
863
864#[test]
865fn des_compile_fail_new_with_key()
866{
867 use cryptocol::symmetric::DES;
868 let des = DES::new_with_key([0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
869 #[cfg(compile_fail)] des.encrypt_u64(0x1E32B46B44C69201_u64);
871}
872
873fn des_new_with_key_u64()
874{
875 println!("des_new_with_key_u64");
876 use cryptocol::symmetric::DES;
877
878 let mut des = DES::new_with_key_u64(0xEFCDAB9078563412);
880 let plaintext = 0x1234567890ABCDEF_u64;
881 let ciphertext = des.encrypt_u64(plaintext);
882
883 println!("Plaintext:\t\t{:#016X}", plaintext);
884 println!("Ciphertext:\t\t{:#016X}", ciphertext);
885 assert_eq!(ciphertext, 0x3B6041D76AF28F23_u64);
886
887 let cipher_cipher_text = des.encrypt_u64(ciphertext);
888 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
889 assert_eq!(cipher_cipher_text, 0x7C5AAE491DC1310D_u64);
890 assert_ne!(cipher_cipher_text, plaintext);
891 println!();
892
893 let mut des1 = DES::new_with_key_u64(0x0000000000000000);
896 let mut des2 = DES::new_with_key_u64(0x0101010101010101);
897
898 let plaintext = 0x1234567890ABCDEF_u64;
899 let ciphertext1 = des1.encrypt_u64(plaintext);
900 let ciphertext2 = des2.encrypt_u64(plaintext);
901
902 println!("Plaintext:\t\t{:#016X}", plaintext);
903 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
904 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
905 assert_eq!(ciphertext1, 0x1E32B46B44C69201_u64);
906 assert_eq!(ciphertext2, 0x1E32B46B44C69201_u64);
907 assert_eq!(ciphertext1, ciphertext2);
908
909 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
910 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
911 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
912 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
913 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
914 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
915 assert_eq!(cipher_cipher_text1, plaintext);
916 assert_eq!(cipher_cipher_text2, plaintext);
917 println!();
918 let mut des1 = DES::new_with_key_u64(0xFFFFFFFFFFFFFFFF);
923 let mut des2 = DES::new_with_key_u64(0xFEFEFEFEFEFEFEFE);
924 let plaintext = 0x1234567890ABCDEF_u64;
925 let ciphertext1 = des1.encrypt_u64(plaintext);
926 let ciphertext2 = des2.encrypt_u64(plaintext);
927
928 println!("Plaintext:\t\t{:#016X}", plaintext);
929 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
930 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
931 assert_eq!(ciphertext1, 0xA5997AB38BC07250_u64);
932 assert_eq!(ciphertext2, 0xA5997AB38BC07250_u64);
933 assert_eq!(ciphertext1, ciphertext2);
934
935 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
936 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
937 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
938 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
939 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
940 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
941 assert_eq!(cipher_cipher_text1, plaintext);
942 assert_eq!(cipher_cipher_text2, plaintext);
943 println!();
944 let mut des1 = DES::new_with_key_u64(0xF1F1F1F1E0E0E0E0);
949 let mut des2 = DES::new_with_key_u64(0xF0F0F0F0E1E1E1E1);
950 let plaintext = 0x1234567890ABCDEF_u64;
951 let ciphertext1 = des1.encrypt_u64(plaintext);
952 let ciphertext2 = des2.encrypt_u64(plaintext);
953
954 println!("Plaintext:\t\t{:#016X}", plaintext);
955 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
956 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
957 assert_eq!(ciphertext1, 0x94CCA0201F033101_u64);
958 assert_eq!(ciphertext2, 0x94CCA0201F033101_u64);
959 assert_eq!(ciphertext1, ciphertext2);
960
961 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
962 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
963 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
964 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
965 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
966 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
967 assert_eq!(cipher_cipher_text1, plaintext);
968 assert_eq!(cipher_cipher_text2, plaintext);
969 println!();
970 let mut des1 = DES::new_with_key_u64(0x0E0E0E0E1F1F1F1F);
975 let mut des2 = DES::new_with_key_u64(0x0F0F0F0F1E1E1E1E);
976 let plaintext = 0x1234567890ABCDEF_u64;
977 let ciphertext1 = des1.encrypt_u64(plaintext);
978 let ciphertext2 = des2.encrypt_u64(plaintext);
979
980 println!("Plaintext:\t\t{:#016X}", plaintext);
981 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
982 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
983 assert_eq!(ciphertext1, 0x4FB6397B5352DB0C_u64);
984 assert_eq!(ciphertext2, 0x4FB6397B5352DB0C_u64);
985 assert_eq!(ciphertext1, ciphertext2);
986
987 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
988 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
989 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
990 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
991 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
992 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
993 assert_eq!(cipher_cipher_text1, plaintext);
994 assert_eq!(cipher_cipher_text2, plaintext);
995 println!();
996 let mut des1 = DES::new_with_key_u64(0x0E010E011F011F01);
1000 let mut des2 = DES::new_with_key_u64(0x010E010E011F011F);
1001
1002 let plaintext = 0x1234567890ABCDEF_u64;
1003 let ciphertext = des1.encrypt_u64(plaintext);
1004 println!("Plaintext:\t\t{:#016X}", plaintext);
1005 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1006 assert_eq!(ciphertext, 0xC2C71D736E97876C_u64);
1007
1008 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1009 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1010 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1011 assert_eq!(cipher_cipher_text, plaintext);
1012
1013 let ciphertext = des2.encrypt_u64(plaintext);
1014 println!("Plaintext:\t\t{:#016X}", plaintext);
1015 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1016 assert_eq!(ciphertext, 0x063A6E55466423D2_u64);
1017
1018 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1019 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1020 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1021 assert_eq!(cipher_cipher_text, plaintext);
1022 println!();
1023 let mut des1 = DES::new_with_key_u64(0xF101F101E001E001);
1027 let mut des2 = DES::new_with_key_u64(0x01F101F101E001E0);
1028
1029 let plaintext = 0x1234567890ABCDEF_u64;
1030 let ciphertext = des1.encrypt_u64(plaintext);
1031 println!("Plaintext:\t\t{:#016X}", plaintext);
1032 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1033 assert_eq!(ciphertext, 0x85A63690E79AAA15_u64);
1034
1035 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1036 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1037 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1038 assert_eq!(cipher_cipher_text, plaintext);
1039
1040 let ciphertext = des2.encrypt_u64(plaintext);
1041 println!("Plaintext:\t\t{:#016X}", plaintext);
1042 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1043 assert_eq!(ciphertext, 0x15B721BBB44A12F5_u64);
1044
1045 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1046 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1047 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1048 assert_eq!(cipher_cipher_text, plaintext);
1049 println!();
1050 let mut des1 = DES::new_with_key_u64(0xFE01FE01FE01FE01);
1054 let mut des2 = DES::new_with_key_u64(0x01FE01FE01FE01FE);
1055
1056 let plaintext = 0x1234567890ABCDEF_u64;
1057 let ciphertext = des1.encrypt_u64(plaintext);
1058 println!("Plaintext:\t\t{:#016X}", plaintext);
1059 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1060 assert_eq!(ciphertext, 0xAE38CC9D9FA48581_u64);
1061
1062 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1063 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1064 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1065 assert_eq!(cipher_cipher_text, plaintext);
1066
1067 let ciphertext = des2.encrypt_u64(plaintext);
1068 println!("Plaintext:\t\t{:#016X}", plaintext);
1069 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1070 assert_eq!(ciphertext, 0x7EE95658A653960D_u64);
1071
1072 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1073 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1074 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1075 assert_eq!(cipher_cipher_text, plaintext);
1076 println!();
1077 let mut des1 = DES::new_with_key_u64(0xF10EF10EE01FE01F);
1081 let mut des2 = DES::new_with_key_u64(0x0EF10EF11FE01FE0);
1082
1083 let plaintext = 0x1234567890ABCDEF_u64;
1084 let ciphertext = des1.encrypt_u64(plaintext);
1085 println!("Plaintext:\t\t{:#016X}", plaintext);
1086 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1087 assert_eq!(ciphertext, 0x81ECC05B173F793E_u64);
1088
1089 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1090 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1091 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1092 assert_eq!(cipher_cipher_text, plaintext);
1093
1094 let ciphertext = des2.encrypt_u64(plaintext);
1095 println!("Plaintext:\t\t{:#016X}", plaintext);
1096 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1097 assert_eq!(ciphertext, 0x4D0AD4DC147E4BDF_u64);
1098
1099 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1100 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1101 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1102 assert_eq!(cipher_cipher_text, plaintext);
1103 println!();
1104 let mut des1 = DES::new_with_key_u64(0xFE0EFE0EFE1FFE1F);
1108 let mut des2 = DES::new_with_key_u64(0x0EFE0EFE1FFE1FFE);
1109
1110 let plaintext = 0x1234567890ABCDEF_u64;
1111 let ciphertext = des1.encrypt_u64(plaintext);
1112 println!("Plaintext:\t\t{:#016X}", plaintext);
1113 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1114 assert_eq!(ciphertext, 0x59735490F84A0AD0_u64);
1115
1116 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1117 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1118 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1119 assert_eq!(cipher_cipher_text, plaintext);
1120
1121 let ciphertext = des2.encrypt_u64(plaintext);
1122 println!("Plaintext:\t\t{:#016X}", plaintext);
1123 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1124 assert_eq!(ciphertext, 0x79FD3CBFE57F4B0B_u64);
1125
1126 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1127 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1128 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1129 assert_eq!(cipher_cipher_text, plaintext);
1130 println!();
1131 let mut des1 = DES::new_with_key_u64(0xFEF1FEF1FEE0FEE0);
1135 let mut des2 = DES::new_with_key_u64(0xF1FEF1FEE0FEE0FE);
1136
1137 let plaintext = 0x1234567890ABCDEF_u64;
1138 let ciphertext = des1.encrypt_u64(plaintext);
1139 println!("Plaintext:\t\t{:#016X}", plaintext);
1140 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1141 assert_eq!(ciphertext, 0x27C83AAE29571889_u64);
1142
1143 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1144 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1145 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1146 assert_eq!(cipher_cipher_text, plaintext);
1147
1148 let ciphertext = des2.encrypt_u64(plaintext);
1149 println!("Plaintext:\t\t{:#016X}", plaintext);
1150 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1151 assert_eq!(ciphertext, 0xDE76DF630C033919_u64);
1152
1153 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1154 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1155 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1156 assert_eq!(cipher_cipher_text, plaintext);
1157 println!("-------------------------------");
1159}
1160
1161fn des_encryptor_with_key()
1162{
1163 println!("des_encryptor_with_key");
1164 use cryptocol::symmetric::{ DES, BigCryptor64, SmallCryptor64 };
1165
1166 let keys: [Box<dyn SmallCryptor64>; 3]
1167 = [ Box::new(DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])),
1168 Box::new(DES::decryptor_with_key([0x21_u8, 0x43, 0x65, 0x87, 0x09, 0xBA, 0xDC, 0xFE])),
1169 Box::new(DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])) ];
1170 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
1171 let plaintext = 0x_1234567890ABCDEF_u64;
1172 let ciphertext = tdes.encrypt_u64(plaintext);
1173
1174 println!("Plaintext:\t\t{:#016X}", plaintext);
1175 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1176 assert_eq!(ciphertext, 0x272A2AC7B4E66748_u64);
1177
1178 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1179 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
1180 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1181 assert_eq!(cipher_cipher_text, plaintext);
1182 println!();
1183
1184 let mut tdes = BigCryptor64::new()
1186 + DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])
1187 - DES::encryptor_with_key([0x21_u8, 0x43, 0x65, 0x87, 0x09, 0xBA, 0xDC, 0xFE])
1188 + DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12]);
1189 let plaintext = 0x_1234567890ABCDEF_u64;
1190 let ciphertext = tdes.encrypt_u64(plaintext);
1191
1192 println!("Plaintext:\t\t{:#016X}", plaintext);
1193 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1194 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
1195
1196 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1197 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
1198 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
1199 assert_eq!(cipher_cipher_text, plaintext);
1200 println!("-------------------------------");
1201}
1202
1203fn des_encryptor_with_key_u64()
1204{
1205 println!("des_encryptor_with_key_u64");
1206 use cryptocol::symmetric::{ BigCryptor64, DES };
1207
1208 let mut tdes = BigCryptor64::new_with_small_cryptor_array(
1209 [Box::new(DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64)),
1210 Box::new(DES::decryptor_with_key_u64(0x_FEDCBA0987654321_u64)),
1211 Box::new(DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64))]
1212 );
1213 let plaintext = 0x_1234567890ABCDEF_u64;
1214 let ciphertext = tdes.encrypt_u64(plaintext);
1215
1216 println!("Plaintext:\t\t{:#016X}", plaintext);
1217 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1218 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
1219
1220 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1221 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
1222 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1223 assert_eq!(cipher_cipher_text, plaintext);
1224 println!();
1225
1226
1227 let mut tdes = BigCryptor64::new()
1229 + DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64)
1230 - DES::encryptor_with_key_u64(0x_FEDCBA0987654321_u64)
1231 + DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64);
1232 let plaintext = 0x_1234567890ABCDEF_u64;
1233 let ciphertext = tdes.encrypt_u64(plaintext);
1234
1235 println!("Plaintext:\t\t{:#016X}", plaintext);
1236 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1237 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
1238
1239 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1240 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
1241 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
1242 assert_eq!(cipher_cipher_text, plaintext);
1243 println!("-------------------------------");
1244}
1245
1246fn des_decryptor_with_key()
1247{
1248 println!("des_decryptor_with_key_u64");
1249 use cryptocol::symmetric::{ DES, BigCryptor64, SmallCryptor64 };
1250
1251 let keys: [Box<dyn SmallCryptor64>; 3]
1252 = [ Box::new(DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])),
1253 Box::new(DES::decryptor_with_key([0x21_u8, 0x43, 0x65, 0x87, 0x09, 0xBA, 0xDC, 0xFE])),
1254 Box::new(DES::encryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])) ];
1255 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
1256 let plaintext = 0x_1234567890ABCDEF_u64;
1257 let ciphertext = tdes.encrypt_u64(plaintext);
1258
1259 println!("Plaintext:\t\t{:#016X}", plaintext);
1260 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1261 assert_eq!(ciphertext, 0x272A2AC7B4E66748_u64);
1262
1263 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1264 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
1265 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1266 assert_eq!(cipher_cipher_text, plaintext);
1267 println!();
1268
1269 let mut tdes = BigCryptor64::new()
1271 - DES::decryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12])
1272 - DES::encryptor_with_key([0x21_u8, 0x43, 0x65, 0x87, 0x09, 0xBA, 0xDC, 0xFE])
1273 - DES::decryptor_with_key([0xEF_u8, 0xCD, 0xAB, 0x90, 0x78, 0x56, 0x34, 0x12]);
1274 let plaintext = 0x_1234567890ABCDEF_u64;
1275 let ciphertext = tdes.encrypt_u64(plaintext);
1276
1277 println!("Plaintext:\t\t{:#016X}", plaintext);
1278 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1279 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
1280
1281 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1282 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
1283 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
1284 assert_eq!(cipher_cipher_text, plaintext);
1285 println!("-------------------------------");
1286}
1287
1288fn des_decryptor_with_key_u64()
1289{
1290 println!("des_decryptor_with_key_u64");
1291 use cryptocol::symmetric::{ BigCryptor64, DES };
1292
1293 let mut tdes = BigCryptor64::new_with_small_cryptor_array(
1294 [ Box::new(DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64)),
1295 Box::new(DES::decryptor_with_key_u64(0x_FEDCBA0987654321_u64)),
1296 Box::new(DES::encryptor_with_key_u64(0x_1234567890ABCDEF_u64)) ] );
1297 let plaintext = 0x_1234567890ABCDEF_u64;
1298 let ciphertext = tdes.encrypt_u64(plaintext);
1299
1300 println!("Plaintext:\t\t{:#016X}", plaintext);
1301 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1302 assert_eq!(ciphertext, 0x272A2AC7B4E66748_u64);
1303
1304 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1305 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
1306 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1307 assert_eq!(cipher_cipher_text, plaintext);
1308 println!();
1309
1310
1311 let mut tdes = BigCryptor64::new()
1313 - DES::decryptor_with_key_u64(0x_1234567890ABCDEF_u64)
1314 + DES::decryptor_with_key_u64(0x_FEDCBA0987654321_u64)
1315 - DES::decryptor_with_key_u64(0x_1234567890ABCDEF_u64);
1316 let plaintext = 0x_1234567890ABCDEF_u64;
1317 let ciphertext = tdes.encrypt_u64(plaintext);
1318
1319 println!("Plaintext:\t\t{:#016X}", plaintext);
1320 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1321 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
1322
1323 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
1324 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
1325 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
1326 assert_eq!(cipher_cipher_text, plaintext);
1327 println!("-------------------------------");
1328}
1329
1330fn des_get_key()
1331{
1332 println!("des_get_key");
1333 use cryptocol::symmetric::DES;
1334
1335 let mut des = DES::new();
1336 des.set_key([0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
1337 let key = des.get_key();
1338 print!("K = ");
1339 for k in key
1340 { print!("{:#02X} ", k); }
1341 assert_eq!(key, [0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
1342}
1343
1344fn des_get_key_u64()
1345{
1346 println!("des_get_key_u64");
1347 use cryptocol::symmetric::DES;
1348
1349 let mut des = DES::new();
1350 des.set_key_u64(0xEFCDAB9078563412);
1351 let key = des.get_key_u64();
1352 println!("Key = {}", key);
1353 assert_eq!(key, 0xEFCDAB9078563412_u64);
1354}
1355
1356fn des_set_key()
1357{
1358 println!("des_set_key");
1359 use cryptocol::symmetric::DES;
1360
1361 let mut des = DES::new();
1363 des.set_key([0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]);
1364 let plaintext = 0x1234567890ABCDEF_u64;
1365 let ciphertext = des.encrypt_u64(plaintext);
1366
1367 println!("Plaintext:\t\t{:#016X}", plaintext);
1368 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1369 assert_eq!(ciphertext, 0x3B6041D76AF28F23_u64);
1370
1371 let cipher_cipher_text = des.encrypt_u64(ciphertext);
1372 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1373 assert_eq!(cipher_cipher_text, 0x7C5AAE491DC1310D_u64);
1374 assert_ne!(cipher_cipher_text, plaintext);
1375 println!();
1376
1377 let mut des1 = DES::new();
1381 let mut des2 = DES::new();
1382 des1.set_key([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
1383 des2.set_key([0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01]);
1384
1385 let plaintext = 0x1234567890ABCDEF_u64;
1386 let ciphertext1 = des1.encrypt_u64(plaintext);
1387 let ciphertext2 = des2.encrypt_u64(plaintext);
1388
1389 println!("Plaintext:\t\t{:#016X}", plaintext);
1390 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
1391 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
1392 assert_eq!(ciphertext1, 0x1E32B46B44C69201_u64);
1393 assert_eq!(ciphertext2, 0x1E32B46B44C69201_u64);
1394 assert_eq!(ciphertext1, ciphertext2);
1395
1396 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1397 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1398 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
1399 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
1400 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1401 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1402 assert_eq!(cipher_cipher_text1, plaintext);
1403 assert_eq!(cipher_cipher_text2, plaintext);
1404 println!();
1405 let mut des1 = DES::new();
1413 let mut des2 = DES::new();
1414 des1.set_key([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
1415 des2.set_key([0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE]);
1416 let plaintext = 0x1234567890ABCDEF_u64;
1417 let ciphertext1 = des1.encrypt_u64(plaintext);
1418 let ciphertext2 = des2.encrypt_u64(plaintext);
1419
1420 println!("Plaintext:\t\t{:#016X}", plaintext);
1421 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
1422 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
1423 assert_eq!(ciphertext1, 0xA5997AB38BC07250_u64);
1424 assert_eq!(ciphertext2, 0xA5997AB38BC07250_u64);
1425 assert_eq!(ciphertext1, ciphertext2);
1426
1427 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1428 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1429 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
1430 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
1431 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1432 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1433 assert_eq!(cipher_cipher_text1, plaintext);
1434 assert_eq!(cipher_cipher_text2, plaintext);
1435 println!();
1436 let mut des1 = DES::new();
1443 let mut des2 = DES::new();
1444 des1.set_key([0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1]);
1445 des2.set_key([0xE1, 0xE1, 0xE1, 0xE1, 0xF0, 0xF0, 0xF0, 0xF0]);
1446 let plaintext = 0x1234567890ABCDEF_u64;
1447 let ciphertext1 = des1.encrypt_u64(plaintext);
1448 let ciphertext2 = des2.encrypt_u64(plaintext);
1449
1450 println!("Plaintext:\t\t{:#016X}", plaintext);
1451 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
1452 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
1453 assert_eq!(ciphertext1, 0x94CCA0201F033101_u64);
1454 assert_eq!(ciphertext2, 0x94CCA0201F033101_u64);
1455 assert_eq!(ciphertext1, ciphertext2);
1456
1457 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1458 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1459 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
1460 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
1461 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1462 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1463 assert_eq!(cipher_cipher_text1, plaintext);
1464 assert_eq!(cipher_cipher_text2, plaintext);
1465 println!();
1466 let mut des1 = DES::new();
1473 let mut des2 = DES::new();
1474 des1.set_key([0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E]);
1475 des2.set_key([0x1E, 0x1E, 0x1E, 0x1E, 0x0F, 0x0F, 0x0F, 0x0F]);
1476 let plaintext = 0x1234567890ABCDEF_u64;
1477 let ciphertext1 = des1.encrypt_u64(plaintext);
1478 let ciphertext2 = des2.encrypt_u64(plaintext);
1479
1480 println!("Plaintext:\t\t{:#016X}", plaintext);
1481 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
1482 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
1483 assert_eq!(ciphertext1, 0x4FB6397B5352DB0C_u64);
1484 assert_eq!(ciphertext2, 0x4FB6397B5352DB0C_u64);
1485 assert_eq!(ciphertext1, ciphertext2);
1486
1487 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1488 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1489 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
1490 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
1491 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1492 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1493 assert_eq!(cipher_cipher_text1, plaintext);
1494 assert_eq!(cipher_cipher_text2, plaintext);
1495 println!();
1496 let mut des1 = DES::new();
1501 let mut des2 = DES::new();
1502 des1.set_key([0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E]);
1503 des2.set_key([0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01]);
1504
1505 let plaintext = 0x1234567890ABCDEF_u64;
1506 let ciphertext = des1.encrypt_u64(plaintext);
1507 println!("Plaintext:\t\t{:#016X}", plaintext);
1508 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1509 assert_eq!(ciphertext, 0xC2C71D736E97876C_u64);
1510
1511 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1512 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1513 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1514 assert_eq!(cipher_cipher_text, plaintext);
1515
1516 let ciphertext = des2.encrypt_u64(plaintext);
1517 println!("Plaintext:\t\t{:#016X}", plaintext);
1518 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1519 assert_eq!(ciphertext, 0x063A6E55466423D2_u64);
1520
1521 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1522 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1523 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1524 assert_eq!(cipher_cipher_text, plaintext);
1525 println!();
1526 let mut des1 = DES::new();
1531 let mut des2 = DES::new();
1532 des1.set_key([0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1]);
1533 des2.set_key([0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01]);
1534
1535 let plaintext = 0x1234567890ABCDEF_u64;
1536 let ciphertext = des1.encrypt_u64(plaintext);
1537 println!("Plaintext:\t\t{:#016X}", plaintext);
1538 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1539 assert_eq!(ciphertext, 0x85A63690E79AAA15_u64);
1540
1541 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1542 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1543 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1544 assert_eq!(cipher_cipher_text, plaintext);
1545
1546 let ciphertext = des2.encrypt_u64(plaintext);
1547 println!("Plaintext:\t\t{:#016X}", plaintext);
1548 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1549 assert_eq!(ciphertext, 0x15B721BBB44A12F5_u64);
1550
1551 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1552 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1553 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1554 assert_eq!(cipher_cipher_text, plaintext);
1555 println!();
1556 let mut des1 = DES::new();
1561 let mut des2 = DES::new();
1562 des1.set_key([0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE]);
1563 des2.set_key([0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01]);
1564
1565 let plaintext = 0x1234567890ABCDEF_u64;
1566 let ciphertext = des1.encrypt_u64(plaintext);
1567 println!("Plaintext:\t\t{:#016X}", plaintext);
1568 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1569 assert_eq!(ciphertext, 0xAE38CC9D9FA48581_u64);
1570
1571 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1572 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1573 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1574 assert_eq!(cipher_cipher_text, plaintext);
1575
1576 let ciphertext = des2.encrypt_u64(plaintext);
1577 println!("Plaintext:\t\t{:#016X}", plaintext);
1578 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1579 assert_eq!(ciphertext, 0x7EE95658A653960D_u64);
1580
1581 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1582 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1583 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1584 assert_eq!(cipher_cipher_text, plaintext);
1585 println!();
1586 let mut des1 = DES::new();
1591 let mut des2 = DES::new();
1592 des1.set_key([0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1]);
1593 des2.set_key([0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E]);
1594
1595 let plaintext = 0x1234567890ABCDEF_u64;
1596 let ciphertext = des1.encrypt_u64(plaintext);
1597 println!("Plaintext:\t\t{:#016X}", plaintext);
1598 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1599 assert_eq!(ciphertext, 0x81ECC05B173F793E_u64);
1600
1601 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1602 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1603 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1604 assert_eq!(cipher_cipher_text, plaintext);
1605
1606 let ciphertext = des2.encrypt_u64(plaintext);
1607 println!("Plaintext:\t\t{:#016X}", plaintext);
1608 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1609 assert_eq!(ciphertext, 0x4D0AD4DC147E4BDF_u64);
1610
1611 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1612 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1613 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1614 assert_eq!(cipher_cipher_text, plaintext);
1615 println!();
1616 let mut des1 = DES::new();
1621 let mut des2 = DES::new();
1622 des1.set_key([0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE]);
1623 des2.set_key([0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E]);
1624
1625 let plaintext = 0x1234567890ABCDEF_u64;
1626 let ciphertext = des1.encrypt_u64(plaintext);
1627 println!("Plaintext:\t\t{:#016X}", plaintext);
1628 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1629 assert_eq!(ciphertext, 0x59735490F84A0AD0_u64);
1630
1631 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1632 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1633 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1634 assert_eq!(cipher_cipher_text, plaintext);
1635
1636 let ciphertext = des2.encrypt_u64(plaintext);
1637 println!("Plaintext:\t\t{:#016X}", plaintext);
1638 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1639 assert_eq!(ciphertext, 0x79FD3CBFE57F4B0B_u64);
1640
1641 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1642 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1643 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1644 assert_eq!(cipher_cipher_text, plaintext);
1645 println!();
1646 let mut des1 = DES::new();
1651 let mut des2 = DES::new();
1652 des1.set_key([0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE]);
1653 des2.set_key([0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1]);
1654
1655 let plaintext = 0x1234567890ABCDEF_u64;
1656 let ciphertext = des1.encrypt_u64(plaintext);
1657 println!("Plaintext:\t\t{:#016X}", plaintext);
1658 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1659 assert_eq!(ciphertext, 0x27C83AAE29571889_u64);
1660
1661 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1662 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1663 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1664 assert_eq!(cipher_cipher_text, plaintext);
1665
1666 let ciphertext = des2.encrypt_u64(plaintext);
1667 println!("Plaintext:\t\t{:#016X}", plaintext);
1668 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1669 assert_eq!(ciphertext, 0xDE76DF630C033919_u64);
1670
1671 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1672 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1673 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1674 assert_eq!(cipher_cipher_text, plaintext);
1675 println!("-------------------------------");
1678}
1679
1680fn des_set_key_u64()
1681{
1682 println!("des_set_key_u64");
1683 use cryptocol::symmetric::DES;
1684
1685 let mut des = DES::new();
1687 des.set_key_u64(0xEFCDAB9078563412);
1688 let plaintext = 0x1234567890ABCDEF_u64;
1689 let ciphertext = des.encrypt_u64(plaintext);
1690
1691 println!("Plaintext:\t\t{:#016X}", plaintext);
1692 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1693 assert_eq!(ciphertext, 0x3B6041D76AF28F23_u64);
1694
1695 let cipher_cipher_text = des.encrypt_u64(ciphertext);
1696 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1697 assert_eq!(cipher_cipher_text, 0x7C5AAE491DC1310D_u64);
1698 assert_ne!(cipher_cipher_text, plaintext);
1699 println!();
1700
1701 let mut des1 = DES::new();
1704 let mut des2 = DES::new();
1705 des1.set_key_u64(0x0000000000000000);
1706 des2.set_key_u64(0x0101010101010101);
1707
1708 let plaintext = 0x1234567890ABCDEF_u64;
1709 let ciphertext1 = des1.encrypt_u64(plaintext);
1710 let ciphertext2 = des2.encrypt_u64(plaintext);
1711
1712 println!("Plaintext:\t\t{:#016X}", plaintext);
1713 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
1714 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
1715 assert_eq!(ciphertext1, 0x1E32B46B44C69201_u64);
1716 assert_eq!(ciphertext2, 0x1E32B46B44C69201_u64);
1717 assert_eq!(ciphertext1, ciphertext2);
1718
1719 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1720 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1721 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
1722 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
1723 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1724 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1725 assert_eq!(cipher_cipher_text1, plaintext);
1726 assert_eq!(cipher_cipher_text2, plaintext);
1727 println!();
1728 let mut des1 = DES::new();
1733 let mut des2 = DES::new();
1734 des1.set_key_u64(0xFFFFFFFFFFFFFFFF);
1735 des2.set_key_u64(0xFEFEFEFEFEFEFEFE);
1736 let plaintext = 0x1234567890ABCDEF_u64;
1737 let ciphertext1 = des1.encrypt_u64(plaintext);
1738 let ciphertext2 = des2.encrypt_u64(plaintext);
1739
1740 println!("Plaintext:\t\t{:#016X}", plaintext);
1741 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
1742 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
1743 assert_eq!(ciphertext1, 0xA5997AB38BC07250_u64);
1744 assert_eq!(ciphertext2, 0xA5997AB38BC07250_u64);
1745 assert_eq!(ciphertext1, ciphertext2);
1746
1747 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1748 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1749 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
1750 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
1751 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1752 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1753 assert_eq!(cipher_cipher_text1, plaintext);
1754 assert_eq!(cipher_cipher_text2, plaintext);
1755 println!();
1756 let mut des1 = DES::new();
1761 let mut des2 = DES::new();
1762 des1.set_key_u64(0xF1F1F1F1E0E0E0E0);
1763 des2.set_key_u64(0xF0F0F0F0E1E1E1E1);
1764 let plaintext = 0x1234567890ABCDEF_u64;
1765 let ciphertext1 = des1.encrypt_u64(plaintext);
1766 let ciphertext2 = des2.encrypt_u64(plaintext);
1767
1768 println!("Plaintext:\t\t{:#016X}", plaintext);
1769 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
1770 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
1771 assert_eq!(ciphertext1, 0x94CCA0201F033101_u64);
1772 assert_eq!(ciphertext2, 0x94CCA0201F033101_u64);
1773 assert_eq!(ciphertext1, ciphertext2);
1774
1775 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1776 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1777 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
1778 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
1779 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1780 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1781 assert_eq!(cipher_cipher_text1, plaintext);
1782 assert_eq!(cipher_cipher_text2, plaintext);
1783 println!();
1784 let mut des1 = DES::new();
1789 let mut des2 = DES::new();
1790 des1.set_key_u64(0x0E0E0E0E1F1F1F1F);
1791 des2.set_key_u64(0x0F0F0F0F1E1E1E1E);
1792 let plaintext = 0x1234567890ABCDEF_u64;
1793 let ciphertext1 = des1.encrypt_u64(plaintext);
1794 let ciphertext2 = des2.encrypt_u64(plaintext);
1795
1796 println!("Plaintext:\t\t{:#016X}", plaintext);
1797 println!("Ciphertext1:\t\t{:#016X}", ciphertext1);
1798 println!("Ciphertext2:\t\t{:#016X}", ciphertext2);
1799 assert_eq!(ciphertext1, 0x4FB6397B5352DB0C_u64);
1800 assert_eq!(ciphertext2, 0x4FB6397B5352DB0C_u64);
1801 assert_eq!(ciphertext1, ciphertext2);
1802
1803 let cipher_cipher_text1 = des1.encrypt_u64(ciphertext1);
1804 let cipher_cipher_text2 = des2.encrypt_u64(ciphertext2);
1805 println!("Cipher-ciphertext1:\t{:#016X}\n", cipher_cipher_text1);
1806 println!("Cipher-ciphertext2:\t{:#016X}\n", cipher_cipher_text2);
1807 assert_eq!(cipher_cipher_text1, 0x1234567890ABCDEF_u64);
1808 assert_eq!(cipher_cipher_text2, 0x1234567890ABCDEF_u64);
1809 assert_eq!(cipher_cipher_text1, plaintext);
1810 assert_eq!(cipher_cipher_text2, plaintext);
1811 println!();
1812 let mut des1 = DES::new();
1816 let mut des2 = DES::new();
1817 des1.set_key_u64(0x0E010E011F011F01);
1818 des2.set_key_u64(0x010E010E011F011F);
1819
1820 let plaintext = 0x1234567890ABCDEF_u64;
1821 let ciphertext = des1.encrypt_u64(plaintext);
1822 println!("Plaintext:\t\t{:#016X}", plaintext);
1823 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1824 assert_eq!(ciphertext, 0xC2C71D736E97876C_u64);
1825
1826 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1827 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1828 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1829 assert_eq!(cipher_cipher_text, plaintext);
1830
1831 let ciphertext = des2.encrypt_u64(plaintext);
1832 println!("Plaintext:\t\t{:#016X}", plaintext);
1833 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1834 assert_eq!(ciphertext, 0x063A6E55466423D2_u64);
1835
1836 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1837 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1838 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1839 assert_eq!(cipher_cipher_text, plaintext);
1840 println!();
1841 let mut des1 = DES::new();
1845 let mut des2 = DES::new();
1846 des1.set_key_u64(0xF101F101E001E001);
1847 des2.set_key_u64(0x01F101F101E001E0);
1848
1849 let plaintext = 0x1234567890ABCDEF_u64;
1850 let ciphertext = des1.encrypt_u64(plaintext);
1851 println!("Plaintext:\t\t{:#016X}", plaintext);
1852 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1853 assert_eq!(ciphertext, 0x85A63690E79AAA15_u64);
1854
1855 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1856 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1857 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1858 assert_eq!(cipher_cipher_text, plaintext);
1859
1860 let ciphertext = des2.encrypt_u64(plaintext);
1861 println!("Plaintext:\t\t{:#016X}", plaintext);
1862 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1863 assert_eq!(ciphertext, 0x15B721BBB44A12F5_u64);
1864
1865 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1866 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1867 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1868 assert_eq!(cipher_cipher_text, plaintext);
1869 println!();
1870 let mut des1 = DES::new();
1874 let mut des2 = DES::new();
1875 des1.set_key_u64(0xFE01FE01FE01FE01);
1876 des2.set_key_u64(0x01FE01FE01FE01FE);
1877
1878 let plaintext = 0x1234567890ABCDEF_u64;
1879 let ciphertext = des1.encrypt_u64(plaintext);
1880 println!("Plaintext:\t\t{:#016X}", plaintext);
1881 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1882 assert_eq!(ciphertext, 0xAE38CC9D9FA48581_u64);
1883
1884 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1885 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1886 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1887 assert_eq!(cipher_cipher_text, plaintext);
1888
1889 let ciphertext = des2.encrypt_u64(plaintext);
1890 println!("Plaintext:\t\t{:#016X}", plaintext);
1891 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1892 assert_eq!(ciphertext, 0x7EE95658A653960D_u64);
1893
1894 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1895 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1896 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1897 assert_eq!(cipher_cipher_text, plaintext);
1898 println!();
1899 let mut des1 = DES::new();
1903 let mut des2 = DES::new();
1904 des1.set_key_u64(0xF10EF10EE01FE01F);
1905 des2.set_key_u64(0x0EF10EF11FE01FE0);
1906
1907 let plaintext = 0x1234567890ABCDEF_u64;
1908 let ciphertext = des1.encrypt_u64(plaintext);
1909 println!("Plaintext:\t\t{:#016X}", plaintext);
1910 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1911 assert_eq!(ciphertext, 0x81ECC05B173F793E_u64);
1912
1913 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1914 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1915 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1916 assert_eq!(cipher_cipher_text, plaintext);
1917
1918 let ciphertext = des2.encrypt_u64(plaintext);
1919 println!("Plaintext:\t\t{:#016X}", plaintext);
1920 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1921 assert_eq!(ciphertext, 0x4D0AD4DC147E4BDF_u64);
1922
1923 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1924 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1925 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1926 assert_eq!(cipher_cipher_text, plaintext);
1927 println!();
1928 let mut des1 = DES::new();
1932 let mut des2 = DES::new();
1933 des1.set_key_u64(0xFE0EFE0EFE1FFE1F);
1934 des2.set_key_u64(0x0EFE0EFE1FFE1FFE);
1935
1936 let plaintext = 0x1234567890ABCDEF_u64;
1937 let ciphertext = des1.encrypt_u64(plaintext);
1938 println!("Plaintext:\t\t{:#016X}", plaintext);
1939 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1940 assert_eq!(ciphertext, 0x59735490F84A0AD0_u64);
1941
1942 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1943 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1944 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1945 assert_eq!(cipher_cipher_text, plaintext);
1946
1947 let ciphertext = des2.encrypt_u64(plaintext);
1948 println!("Plaintext:\t\t{:#016X}", plaintext);
1949 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1950 assert_eq!(ciphertext, 0x79FD3CBFE57F4B0B_u64);
1951
1952 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1953 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1954 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1955 assert_eq!(cipher_cipher_text, plaintext);
1956 println!();
1957 let mut des1 = DES::new();
1961 let mut des2 = DES::new();
1962 des1.set_key_u64(0xFEF1FEF1FEE0FEE0);
1963 des2.set_key_u64(0xF1FEF1FEE0FEE0FE);
1964
1965 let plaintext = 0x1234567890ABCDEF_u64;
1966 let ciphertext = des1.encrypt_u64(plaintext);
1967 println!("Plaintext:\t\t{:#016X}", plaintext);
1968 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1969 assert_eq!(ciphertext, 0x27C83AAE29571889_u64);
1970
1971 let cipher_cipher_text = des2.encrypt_u64(ciphertext);
1972 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1973 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1974 assert_eq!(cipher_cipher_text, plaintext);
1975
1976 let ciphertext = des2.encrypt_u64(plaintext);
1977 println!("Plaintext:\t\t{:#016X}", plaintext);
1978 println!("Ciphertext:\t\t{:#016X}", ciphertext);
1979 assert_eq!(ciphertext, 0xDE76DF630C033919_u64);
1980
1981 let cipher_cipher_text = des1.encrypt_u64(ciphertext);
1982 println!("Cipher-ciphertext:\t{:#016X}\n", cipher_cipher_text);
1983 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
1984 assert_eq!(cipher_cipher_text, plaintext);
1985 println!("-------------------------------");
1987}
1988
1989fn des_turn_inverse()
1990{
1991 println!("des_turn_inverse");
1992 use cryptocol::symmetric::{ BigCryptor64, DES, SmallCryptor64 };
1993
1994 let mut keys: [Box<dyn SmallCryptor64>; 3]
1995 = [ Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)),
1996 Box::new(DES::new_with_key_u64(0x_FEDCBA0987654321_u64)),
1997 Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)) ];
1998 keys[1].turn_inverse();
1999
2000 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
2001 let plaintext = 0x_1234567890ABCDEF_u64;
2002 let ciphertext = tdes.encrypt_u64(plaintext);
2003
2004 println!("Plaintext:\t\t{:#016X}", plaintext);
2005 println!("Ciphertext:\t\t{:#016X}", ciphertext);
2006 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
2007
2008 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
2009 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
2010 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
2011 assert_eq!(cipher_cipher_text, plaintext);
2012 println!();
2013
2014
2015 let des1 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
2017 let mut des2 = DES::new_with_key_u64(0x_FEDCBA0987654321_u64);
2018 let des3 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
2019 des2.turn_inverse();
2020
2021 let mut tdes = BigCryptor64::new() + des1 + des2 + des3;
2022 let plaintext = 0x_1234567890ABCDEF_u64;
2023 let ciphertext = tdes.encrypt_u64(plaintext);
2024
2025 println!("Plaintext:\t\t{:#016X}", plaintext);
2026 println!("Ciphertext:\t\t{:#016X}", ciphertext);
2027 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
2028
2029 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
2030 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
2031 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
2032 assert_eq!(cipher_cipher_text, plaintext);
2033 println!("-------------------------------");
2034}
2035
2036fn des_turn_encryptor()
2037{
2038 println!("des_turn_encryptor");
2039 use cryptocol::symmetric::{ BigCryptor64, DES, SmallCryptor64 };
2040
2041 let mut keys: [Box<dyn SmallCryptor64>; 3]
2042 = [ Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)),
2043 Box::new(DES::new_with_key_u64(0x_FEDCBA0987654321_u64)),
2044 Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)) ];
2045 keys[0].turn_encryptor();
2046
2047 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
2048 let plaintext = 0x_1234567890ABCDEF_u64;
2049 let ciphertext = tdes.encrypt_u64(plaintext);
2050
2051 println!("Plaintext:\t\t{:#016X}", plaintext);
2052 println!("Ciphertext:\t\t{:#016X}", ciphertext);
2053 assert_eq!(ciphertext, 0x_CDAC175F3B7EAA2B_u64);
2054
2055 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
2056 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
2057 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
2058 assert_eq!(cipher_cipher_text, plaintext);
2059 println!();
2060
2061
2062 let mut des1 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
2064 let des2 = DES::new_with_key_u64(0x_FEDCBA0987654321_u64);
2065 let des3 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
2066 des1.turn_encryptor();
2067
2068 let mut tdes = BigCryptor64::new() + des1 + des2 + des3;
2069 let plaintext = 0x_1234567890ABCDEF_u64;
2070 let ciphertext = tdes.encrypt_u64(plaintext);
2071
2072 println!("Plaintext:\t\t{:#016X}", plaintext);
2073 println!("Ciphertext:\t\t{:#016X}", ciphertext);
2074 assert_eq!(ciphertext, 0x_CDAC175F3B7EAA2B_u64);
2075
2076 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
2077 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
2078 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
2079 assert_eq!(cipher_cipher_text, plaintext);
2080 println!("-------------------------------");
2081}
2082
2083fn des_turn_decryptor()
2084{
2085 println!("des_turn_decryptor");
2086 use cryptocol::symmetric::{ BigCryptor64, DES, SmallCryptor64 };
2087
2088 let mut keys: [Box<dyn SmallCryptor64>; 3]
2089 = [ Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)),
2090 Box::new(DES::new_with_key_u64(0x_FEDCBA0987654321_u64)),
2091 Box::new(DES::new_with_key_u64(0x_1234567890ABCDEF_u64)) ];
2092 keys[1].turn_decryptor();
2093
2094 let mut tdes = BigCryptor64::new_with_small_cryptor_array(keys);
2095 let plaintext = 0x_1234567890ABCDEF_u64;
2096 let ciphertext = tdes.encrypt_u64(plaintext);
2097
2098 println!("Plaintext:\t\t{:#016X}", plaintext);
2099 println!("Ciphertext:\t\t{:#016X}", ciphertext);
2100 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
2101
2102 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
2103 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
2104 assert_eq!(cipher_cipher_text, 0x1234567890ABCDEF_u64);
2105 assert_eq!(cipher_cipher_text, plaintext);
2106 println!();
2107
2108
2109 let des1 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
2111 let mut des2 = DES::new_with_key_u64(0x_FEDCBA0987654321_u64);
2112 let des3 = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
2113 des2.turn_decryptor();
2114
2115 let mut tdes = BigCryptor64::new() + des1 + des2 + des3;
2116 let plaintext = 0x_1234567890ABCDEF_u64;
2117 let ciphertext = tdes.encrypt_u64(plaintext);
2118
2119 println!("Plaintext:\t\t{:#016X}", plaintext);
2120 println!("Ciphertext:\t\t{:#016X}", ciphertext);
2121 assert_eq!(ciphertext, 0x_272A2AC7B4E66748_u64);
2122
2123 let cipher_cipher_text = tdes.decrypt_u64(ciphertext);
2124 println!("Cipher-ciphertext:\t{:#016X}", cipher_cipher_text);
2125 assert_eq!(cipher_cipher_text, 0x_1234567890ABCDEF_u64);
2126 assert_eq!(cipher_cipher_text, plaintext);
2127 println!("-------------------------------");
2128}
2129
2130fn des_encrypt_decrypt_u64_array_u64_main()
2131{
2132 des_encrypt_u64();
2133 des_decrypt_u64();
2134 des__encrypt();
2135 des__decrypt();
2136 des_encrypt_array_u64();
2137 des_decrypt_array_u64();
2138 des_is_successful();
2139 des_is_failed();
2140 des_set_successful();
2141 des_set_failed();
2142 des_has_weak_key();
2143}
2144
2145fn des_encrypt_u64()
2146{
2147 println!("des_encrypt_u64");
2148 use cryptocol::symmetric::{ DES, DES_Expanded };
2149
2150 let key = 0x_1234567890ABCDEF_u64;
2152 println!("K =\t{:#016X}", key);
2153
2154 let message = 0x_1234567890ABCDEF_u64;
2155 println!("M_u64 =\t{:#016X}", message);
2156
2157 let mut a_des = DES::new_with_key_u64(key);
2158 let cipher = a_des.encrypt_u64(message);
2159 println!("C_u64 (16 rounds) =\t{:#016X}", cipher);
2160 assert_eq!(cipher, 0x_1BC4896735BBE206_u64);
2161 println!();
2162
2163 let key = 0x_1234567890ABCDEF_u64;
2165 println!("K =\t{:#016X}", key);
2166
2167 let message = 0x_1234567890ABCDEF_u64;
2168 println!("M_u64 =\t{:#016X}", message);
2169
2170 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2171 let cipher = b_des.encrypt_u64(message);
2172 println!("C_u64 (128 rounds) =\t{:#016X}", cipher);
2173 assert_eq!(cipher, 0x_21F25F81CE4D4AA3_u64);
2174 println!();
2175
2176 let key1 = 0x_1234567890ABCDEF_u64;
2178 let key2 = 0_u64;
2179 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2180 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2181 println!("K1 =\t{:#016x}", key1);
2182
2183 let message = 0x_1234567890ABCDEF_u64;
2184 println!("M_u64 =\t{:#016X}", message);
2185
2186 let cipher1 = c_des.encrypt_u64(message);
2187 let cipher2 = d_des.encrypt_u64(message);
2188 println!("C_u64 (0 rounds) =\t{:#016X}", cipher1);
2189 assert_eq!(cipher1, 0x_2138A9B46057CEDF_u64);
2190
2191 println!("D_u64 (0 rounds) =\t{:#016X}", cipher);
2192 assert_eq!(cipher2, 0x_2138A9B46057CEDF_u64);
2193 assert_eq!(cipher1, cipher2);
2194 println!("-------------------------------");
2195}
2196
2197fn des_decrypt_u64()
2198{
2199 println!("des_decrypt_u64");
2200 use cryptocol::symmetric::{ DES, DES_Expanded };
2201
2202 let key = 0x_1234567890ABCDEF_u64;
2204 println!("K =\t{:#016X}", key);
2205
2206 let message = 0x_1234567890ABCDEF_u64;
2207 println!("M_u64 =\t{:#016X}", message);
2208
2209 let mut a_des = DES::new_with_key_u64(key);
2210 let cipher = a_des.encrypt_u64(message);
2211 println!("C_u64 (16 rounds) =\t{:#016X}", cipher);
2212 assert_eq!(cipher, 0x_1BC4896735BBE206_u64);
2213
2214 let recovered = a_des.decrypt_u64(cipher);
2215 println!("B_u64 (16 rounds) =\t{:#016X}", recovered);
2216 assert_eq!(recovered, 0x_1234567890ABCDEF_u64);
2217 assert_eq!(recovered, message);
2218 println!();
2219
2220 let key = 0x_1234567890ABCDEF_u64;
2222 println!("K =\t{:#016X}", key);
2223
2224 let message = 0x_1234567890ABCDEF_u64;
2225 println!("M_u64 =\t{:#016X}", message);
2226
2227 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2228 let cipher = b_des.encrypt_u64(message);
2229 println!("C_u64 (128 rounds) =\t{:#016X}", cipher);
2230 assert_eq!(cipher, 0x_21F25F81CE4D4AA3_u64);
2231
2232 let recovered = b_des.decrypt_u64(cipher);
2233 println!("B_u64 (16 rounds) =\t{:#016X}", recovered);
2234 assert_eq!(recovered, 0x_1234567890ABCDEF_u64);
2235 assert_eq!(recovered, message);
2236 println!();
2237
2238 let key1 = 0x_1234567890ABCDEF_u64;
2240 let key2 = 0_u64;
2241 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2242 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2243 println!("K =\t{:#016X}", key);
2244
2245 let message = 0x_1234567890ABCDEF_u64;
2246 println!("M_u64 =\t{:#016X}", message);
2247
2248 let cipher1 = c_des.encrypt_u64(message);
2249 let cipher2 = d_des.encrypt_u64(message);
2250 println!("C_u64 (0 rounds) =\t{:#016X}", cipher1);
2251 assert_eq!(cipher1, 0x_2138A9B46057CEDF_u64);
2252
2253 println!("D_u64 (0 rounds) =\t{:#016X}", cipher);
2254 assert_eq!(cipher2, 0x_2138A9B46057CEDF_u64);
2255 assert_eq!(cipher1, cipher2);
2256
2257 let recovered1 = c_des.decrypt_u64(cipher1);
2258 let recovered2 = d_des.decrypt_u64(cipher2);
2259 println!("B1_u64 (0 rounds) =\t{:#016X}", recovered1);
2260 println!("B2_u64 (0 rounds) =\t{:#016X}", recovered2);
2261 assert_eq!(recovered1, 0x_1234567890ABCDEF_u64);
2262 assert_eq!(recovered1, message);
2263 assert_eq!(recovered2, 0x_1234567890ABCDEF_u64);
2264 assert_eq!(recovered2, message);
2265 assert_eq!(recovered1, recovered2);
2266 println!("-------------------------------");
2267}
2268
2269fn des__encrypt()
2270{
2271 println!("des__encrypt");
2272 use cryptocol::symmetric::{ DES, DES_Expanded };
2273
2274 let key = 0x_1234567890ABCDEF_u64;
2276 println!("K =\t{:#016X}", key);
2277
2278 let message = 0x_1234567890ABCDEF_u64;
2279 println!("M_u64 =\t{:#016X}", message);
2280
2281 let mut a_des = DES::new_with_key_u64(key);
2282 let cipher = a_des._encrypt(message);
2283 println!("C_u64 (16 rounds) =\t{:#016X}", cipher);
2284 assert_eq!(cipher, 0x_1BC4896735BBE206_u64);
2285 println!();
2286
2287 let key = 0x_1234567890ABCDEF_u64;
2289 println!("K =\t{:#016X}", key);
2290
2291 let message = 0x_1234567890ABCDEF_u64;
2292 println!("M_u64 =\t{:#016X}", message);
2293
2294 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2295 let cipher = b_des._encrypt(message);
2296 println!("C_u64 (128 rounds) =\t{:#016X}", cipher);
2297 assert_eq!(cipher, 0x_21F25F81CE4D4AA3_u64);
2298 println!();
2299
2300 let key1 = 0x_1234567890ABCDEF_u64;
2302 let key2 = 0_u64;
2303 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2304 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2305 println!("K1 =\t{:#016x}", key1);
2306
2307 let message = 0x_1234567890ABCDEF_u64;
2308 println!("M_u64 =\t{:#016X}", message);
2309
2310 let cipher1 = c_des._encrypt(message);
2311 let cipher2 = d_des._encrypt(message);
2312 println!("C_u64 (0 rounds) =\t{:#016X}", cipher1);
2313 assert_eq!(cipher1, 0x_2138A9B46057CEDF_u64);
2314
2315 println!("D_u64 (0 rounds) =\t{:#016X}", cipher);
2316 assert_eq!(cipher2, 0x_2138A9B46057CEDF_u64);
2317 assert_eq!(cipher1, cipher2);
2318 println!("-------------------------------");
2319}
2320
2321fn des__decrypt()
2322{
2323 println!("des__decrypt");
2324 use cryptocol::symmetric::{ DES, DES_Expanded };
2325
2326 let key = 0x_1234567890ABCDEF_u64;
2328 println!("K =\t{:#016X}", key);
2329
2330 let message = 0x_1234567890ABCDEF_u64;
2331 println!("M_u64 =\t{:#016X}", message);
2332
2333 let mut a_des = DES::new_with_key_u64(key);
2334 let cipher = a_des._encrypt(message);
2335 println!("C_u64 (16 rounds) =\t{:#016X}", cipher);
2336 assert_eq!(cipher, 0x_1BC4896735BBE206_u64);
2337
2338 let recovered = a_des._decrypt(cipher);
2339 println!("B_u64 (16 rounds) =\t{:#016X}", recovered);
2340 assert_eq!(recovered, 0x_1234567890ABCDEF_u64);
2341 assert_eq!(recovered, message);
2342 println!();
2343
2344 let key = 0x_1234567890ABCDEF_u64;
2346 println!("K =\t{:#016X}", key);
2347
2348 let message = 0x_1234567890ABCDEF_u64;
2349 println!("M_u64 =\t{:#016X}", message);
2350
2351 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2352 let cipher = b_des._encrypt(message);
2353 println!("C_u64 (128 rounds) =\t{:#016X}", cipher);
2354 assert_eq!(cipher, 0x_21F25F81CE4D4AA3_u64);
2355
2356 let recovered = b_des._decrypt(cipher);
2357 println!("B_u64 (16 rounds) =\t{:#016X}", recovered);
2358 assert_eq!(recovered, 0x_1234567890ABCDEF_u64);
2359 assert_eq!(recovered, message);
2360 println!();
2361
2362 let key1 = 0x_1234567890ABCDEF_u64;
2364 let key2 = 0_u64;
2365 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2366 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2367 println!("K =\t{:#016X}", key);
2368
2369 let message = 0x_1234567890ABCDEF_u64;
2370 println!("M_u64 =\t{:#016X}", message);
2371
2372 let cipher1 = c_des._encrypt(message);
2373 let cipher2 = d_des._encrypt(message);
2374 println!("C_u64 (0 rounds) =\t{:#016X}", cipher1);
2375 assert_eq!(cipher1, 0x_2138A9B46057CEDF_u64);
2376
2377 println!("D_u64 (0 rounds) =\t{:#016X}", cipher);
2378 assert_eq!(cipher2, 0x_2138A9B46057CEDF_u64);
2379 assert_eq!(cipher1, cipher2);
2380
2381 let recovered1 = c_des._decrypt(cipher1);
2382 let recovered2 = d_des._decrypt(cipher2);
2383 println!("B1_u64 (0 rounds) =\t{:#016X}", recovered1);
2384 println!("B2_u64 (0 rounds) =\t{:#016X}", recovered2);
2385 assert_eq!(recovered1, 0x_1234567890ABCDEF_u64);
2386 assert_eq!(recovered1, message);
2387 assert_eq!(recovered2, 0x_1234567890ABCDEF_u64);
2388 assert_eq!(recovered2, message);
2389 assert_eq!(recovered1, recovered2);
2390 println!("-------------------------------");
2391}
2392
2393fn des_encrypt_array_u64()
2394{
2395 println!("des_encrypt_array_u64");
2396 use cryptocol::symmetric::{ DES, DES_Expanded };
2397
2398 let key = 0x_1234567890ABCDEF_u64;
2400 println!("K =\t{:#016X}", key);
2401
2402 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2403 print!("M =\t");
2404 for m in message
2405 { print!("{:#016X} ", m); }
2406 println!();
2407 let mut a_des = DES::new_with_key_u64(key);
2408
2409 let mut cipher = [0; 3];
2410 a_des.encrypt_array_u64(&message, &mut cipher);
2411 print!("C (16 rounds) =\t");
2412 for c in cipher
2413 { print!("{:#016X} ", c); }
2414 println!();
2415 assert_eq!(cipher[0], 0x_1BC4896735BBE206_u64);
2416 assert_eq!(cipher[1], 0x_1D8A61E5E62226A4_u64);
2417 assert_eq!(cipher[2], 0x_2990D69525C17067_u64);
2418 println!();
2419
2420 let key = 0x_1234567890ABCDEF_u64;
2422 println!("K =\t{:#016X}", key);
2423
2424 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2425 print!("M =\t");
2426 for m in message
2427 { print!("{:#016X} ", m); }
2428 println!();
2429 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2430
2431 let mut cipher = [0; 3];
2432 b_des.encrypt_array_u64(&message, &mut cipher);
2433 print!("C (128 rounds) =\t");
2434 for c in cipher
2435 { print!("{:#016X} ", c); }
2436 println!();
2437 assert_eq!(cipher[0], 0x_21F25F81CE4D4AA3_u64);
2438 assert_eq!(cipher[1], 0x_352F391A1482A504_u64);
2439 assert_eq!(cipher[2], 0x_F793546957AFDE50_u64);
2440 println!();
2441
2442
2443 let key1 = 0x_1234567890ABCDEF_u64;
2445 let key2 = 0_u64;
2446 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2447 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2448 println!("K =\t{:#016X}", key);
2449
2450 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2451 print!("M =\t");
2452 for m in message
2453 { print!("{:#016X} ", m); }
2454 println!();
2455
2456 let mut cipher1 = [0; 3];
2457 let mut cipher2 = [0; 3];
2458 c_des.encrypt_array_u64(&message, &mut cipher1);
2459 d_des.encrypt_array_u64(&message, &mut cipher2);
2460 print!("C (0 rounds) =\t");
2461 for c in cipher1
2462 { print!("{:#016X} ", c); }
2463 println!();
2464 print!("D (0 rounds) =\t");
2465 for c in cipher2
2466 { print!("{:#016X} ", c); }
2467 println!();
2468 assert_eq!(cipher1[0], 0x_2138A9B46057CEDF_u64);
2469 assert_eq!(cipher1[1], 0x_DFCE5760B4A93821_u64);
2470 assert_eq!(cipher1[2], 0x_FDEC75064B9A8312_u64);
2471 assert_eq!(cipher2[0], 0x_2138A9B46057CEDF_u64);
2472 assert_eq!(cipher2[1], 0x_DFCE5760B4A93821_u64);
2473 assert_eq!(cipher2[2], 0x_FDEC75064B9A8312_u64);
2474 assert_eq!(cipher1[0], cipher2[0]);
2475 assert_eq!(cipher1[1], cipher2[1]);
2476 assert_eq!(cipher1[2], cipher2[2]);
2477 println!("-------------------------------");
2478}
2479
2480fn des_decrypt_array_u64()
2481{
2482 println!("des_decrypt_array_u64");
2483 use cryptocol::symmetric::{ DES, DES_Expanded };
2484
2485 let key = 0x_1234567890ABCDEF_u64;
2487 println!("K =\t{:#016X}", key);
2488
2489 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2490 print!("M =\t");
2491 for m in message
2492 { print!("{:#016X} ", m); }
2493 println!();
2494 let mut a_des = DES::new_with_key_u64(key);
2495
2496 let mut cipher = [0; 3];
2497 a_des.encrypt_array_u64(&message, &mut cipher);
2498 print!("C (16 rounds) =\t");
2499 for c in cipher
2500 { print!("{:#016X} ", c); }
2501 println!();
2502 assert_eq!(cipher[0], 0x_1BC4896735BBE206_u64);
2503 assert_eq!(cipher[1], 0x_1D8A61E5E62226A4_u64);
2504 assert_eq!(cipher[2], 0x_2990D69525C17067_u64);
2505
2506 let mut recovered = [0; 3];
2507 a_des.decrypt_array_u64(&cipher, &mut recovered);
2508 print!("B (16 rounds) =\t");
2509 for r in recovered
2510 { print!("{:#016X} ", r); }
2511 println!();
2512 assert_eq!(recovered[0], 0x_1234567890ABCDEF_u64);
2513 assert_eq!(recovered[1], 0x_EFCDAB9078563412_u64);
2514 assert_eq!(recovered[2], 0x_FEDCBA0987654321_u64);
2515 println!();
2516
2517 let key = 0x_1234567890ABCDEF_u64;
2519 println!("K =\t{:#016X}", key);
2520
2521 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2522 print!("M =\t");
2523 for m in message
2524 { print!("{:#016X} ", m); }
2525 println!();
2526 let mut b_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
2527
2528 let mut cipher = [0; 3];
2529 b_des.encrypt_array_u64(&message, &mut cipher);
2530 print!("C (128 rounds) =\t");
2531 for c in cipher
2532 { print!("{:#016X} ", c); }
2533 println!();
2534 assert_eq!(cipher[0], 0x_21F25F81CE4D4AA3_u64);
2535 assert_eq!(cipher[1], 0x_352F391A1482A504_u64);
2536 assert_eq!(cipher[2], 0x_F793546957AFDE50_u64);
2537
2538 let mut recovered = [0; 3];
2539 b_des.decrypt_array_u64(&cipher, &mut recovered);
2540 print!("B (128 rounds) =\t");
2541 for r in recovered
2542 { print!("{:#016X} ", r); }
2543 println!();
2544 assert_eq!(recovered[0], 0x_1234567890ABCDEF_u64);
2545 assert_eq!(recovered[1], 0x_EFCDAB9078563412_u64);
2546 assert_eq!(recovered[2], 0x_FEDCBA0987654321_u64);
2547
2548 let key1 = 0x_1234567890ABCDEF_u64;
2550 let key2 = 0_u64;
2551 let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
2552 let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
2553 println!("K =\t{:#016X}", key);
2554
2555 let message = [0x_1234567890ABCDEF_u64, 0xEFCDAB9078563412, 0xFEDCBA0987654321 ];
2556 print!("M =\t");
2557 for m in message
2558 { print!("{:#016X} ", m); }
2559 println!();
2560
2561 let mut cipher1 = [0; 3];
2562 let mut cipher2 = [0; 3];
2563 c_des.encrypt_array_u64(&message, &mut cipher1);
2564 d_des.encrypt_array_u64(&message, &mut cipher2);
2565 print!("C (0 rounds) =\t");
2566 for c in cipher1
2567 { print!("{:#016X} ", c); }
2568 println!();
2569 print!("D (0 rounds) =\t");
2570 for c in cipher2
2571 { print!("{:#016X} ", c); }
2572 println!();
2573 assert_eq!(cipher1[0], 0x_2138A9B46057CEDF_u64);
2574 assert_eq!(cipher1[1], 0x_DFCE5760B4A93821_u64);
2575 assert_eq!(cipher1[2], 0x_FDEC75064B9A8312_u64);
2576 assert_eq!(cipher2[0], 0x_2138A9B46057CEDF_u64);
2577 assert_eq!(cipher2[1], 0x_DFCE5760B4A93821_u64);
2578 assert_eq!(cipher2[2], 0x_FDEC75064B9A8312_u64);
2579 assert_eq!(cipher1[0], cipher2[0]);
2580 assert_eq!(cipher1[1], cipher2[1]);
2581 assert_eq!(cipher1[2], cipher2[2]);
2582
2583 let mut recovered1 = [0; 3];
2584 let mut recovered2 = [0; 3];
2585 c_des.decrypt_array_u64(&cipher1, &mut recovered1);
2586 d_des.decrypt_array_u64(&cipher2, &mut recovered2);
2587 print!("B1 (0 rounds) =\t");
2588 for r in recovered1
2589 { print!("{:#016X} ", r); }
2590 println!();
2591 print!("B2 (0 rounds) =\t");
2592 for r in recovered2
2593 { print!("{:#016X} ", r); }
2594 println!();
2595 assert_eq!(recovered1[0], 0x_1234567890ABCDEF_u64);
2596 assert_eq!(recovered1[1], 0x_EFCDAB9078563412_u64);
2597 assert_eq!(recovered1[2], 0x_FEDCBA0987654321_u64);
2598 assert_eq!(recovered2[0], 0x_1234567890ABCDEF_u64);
2599 assert_eq!(recovered2[1], 0x_EFCDAB9078563412_u64);
2600 assert_eq!(recovered2[2], 0x_FEDCBA0987654321_u64);
2601 assert_eq!(recovered1[0], recovered2[0]);
2602 assert_eq!(recovered1[1], recovered2[1]);
2603 assert_eq!(recovered1[2], recovered2[2]);
2604 println!("-------------------------------");
2605}
2606
2607fn des_is_successful()
2608{
2609 println!("des_is_successful");
2610 use std::io::Write;
2611 use std::fmt::Write as _;
2612 use cryptocol::symmetric::DES;
2613
2614 {
2615 let key = 0x_1234567890ABCDEF_u64;
2617 println!("K =\t{:#016X}", key);
2618 let mut a_des = DES::new_with_key_u64(key);
2619 use cryptocol::symmetric::ECB_PKCS7;
2620 let message = "";
2621 println!("M =\t{}", message);
2622 let mut cipher = [0_u8; 8];
2623 let len = a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
2624 println!("The length of ciphertext = {}", len);
2625 assert_eq!(len, 8);
2626 let success = a_des.is_successful();
2627 assert_eq!(success, true);
2628 print!("C =\t");
2629 for c in cipher.clone()
2630 { print!("{:02X} ", c); }
2631 println!();
2632 let mut txt = String::new();
2633 for c in cipher.clone()
2634 { write!(txt, "{:02X} ", c); }
2635 assert_eq!(txt, "41 7F 89 79 08 CD A1 4C ");
2636
2637
2638 let key = 0x_1234567890ABCDEF_u64;
2640 println!("K =\t{:#016X}", key);
2641 let mut a_des = DES::new_with_key_u64(key);
2642
2643 let cipher = [0x41u8, 0x7F, 0x89, 0x79, 0x08, 0xCD, 0xA1, 0x4C];
2644 print!("C =\t");
2645 for c in cipher.clone()
2646 { print!("{:02X} ", c); }
2647 println!();
2648 let mut recovered = [0u8; 8];
2649 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
2650 println!("The length of plaintext = {}", len);
2651 assert_eq!(len, 0);
2652 let success = a_des.is_successful();
2653 assert_eq!(success, true);
2654 print!("Ba =\t");
2655 for b in recovered.clone()
2656 { print!("{:02X} ", b); }
2657 println!();
2658 let mut txt = String::new();
2659 for c in recovered.clone()
2660 { write!(txt, "{:02X} ", c); }
2661 assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
2662
2663 let mut converted = String::new();
2664 unsafe { converted.as_mut_vec() }.write(&recovered);
2665 unsafe { converted.as_mut_vec() }.truncate(len as usize);
2666 println!("Bb =\t{}", converted);
2667 assert_eq!(converted, "");
2668 assert_eq!(converted, message);
2669 println!();
2670 }
2671
2672 {
2673 use cryptocol::symmetric::CFB;
2675
2676 let key = 0x_1234567890ABCDEF_u64;
2677 println!("K =\t{:#016X}", key);
2678 let mut a_des = DES::new_with_key_u64(key);
2679
2680 let message = "In the beginning God created the heavens and the earth.";
2681 println!("M =\t{}", message);
2682 let iv = 0x_FEDCBA0987654321_u64;
2683 println!("IV = {}", iv);
2684 let mut cipher = [0_u8; 40];
2685 let len = a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
2686 println!("The length of ciphertext = {}", len);
2687 assert_eq!(len, 0);
2688 let success = a_des.is_successful();
2689 assert_eq!(success, false);
2690
2691 let key = 0x_1234567890ABCDEF_u64;
2693 println!("K =\t{:#016X}", key);
2694 let mut a_des = DES::new_with_key_u64(key);
2695
2696 let cipher = [0x2Eu8, 0x1E, 0xE1, 0x51, 0xFD, 0xB3, 0xB0, 0x4B, 0x79, 0x3A, 0xA1, 0x78, 0xEC, 0xCD, 0x02, 0x72, 0x6A, 0xC4, 0x41, 0x7C, 0x25, 0xA4, 0x2C, 0x07, 0xFC, 0x77, 0x25, 0x49, 0x12, 0x55, 0x0F, 0x8A, 0xED, 0x44, 0xC3, 0xE4, 0xDC, 0x91, 0x69, 0x0F, 0x40, 0x72, 0x7F, 0xF2, 0xD9, 0xB7, 0x54, 0x9F, 0x36, 0x91, 0xC5, 0x85, 0x4F, 0x9B, 0x30];
2697 print!("C =\t");
2698 for c in cipher.clone()
2699 { print!("{:02X} ", c); }
2700 println!();
2701 let mut recovered = [0u8; 40];
2702 let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
2703 println!("The length of plaintext = {}", len);
2704 assert_eq!(len, 0);
2705 let success = a_des.is_successful();
2706 assert_eq!(success, false);
2707 }
2708 println!("-------------------------------");
2709}
2710
2711fn des_is_failed()
2712{
2713 println!("des_is_failed");
2714 use std::io::Write;
2715 use std::fmt::Write as _;
2716 use cryptocol::symmetric::DES;
2717
2718 {
2719 use cryptocol::symmetric::ECB_PKCS7;
2720
2721 let key = 0x_1234567890ABCDEF_u64;
2723 println!("K =\t{:#016X}", key);
2724 let mut a_des = DES::new_with_key_u64(key);
2725
2726 let message = "";
2727 println!("M =\t{}", message);
2728 let mut cipher = [0_u8; 8];
2729 let len = a_des.encrypt_into_array(message.as_ptr(), message.len() as u64, &mut cipher);
2730 println!("The length of ciphertext = {}", len);
2731 assert_eq!(len, 8);
2732 let failure = a_des.is_failed();
2733 assert_eq!(failure, false);
2734 print!("C =\t");
2735 for c in cipher.clone()
2736 { print!("{:02X} ", c); }
2737 println!();
2738 let mut txt = String::new();
2739 for c in cipher.clone()
2740 { write!(txt, "{:02X} ", c); }
2741 assert_eq!(txt, "41 7F 89 79 08 CD A1 4C ");
2742
2743
2744 let cipher = [0x41u8, 0x7F, 0x89, 0x79, 0x08, 0xCD, 0xA1, 0x4C];
2746 print!("C =\t");
2747 for c in cipher.clone()
2748 { print!("{:02X} ", c); }
2749 let mut recovered = [0u8; 8];
2750 let len = a_des.decrypt_array_into_array(&cipher, &mut recovered);
2751 println!("The length of plaintext = {}", len);
2752 assert_eq!(len, 0);
2753 let failure = a_des.is_failed();
2754 assert_eq!(failure, false);
2755 print!("Ba =\t");
2756 for b in recovered.clone()
2757 { print!("{:02X} ", b); }
2758 println!();
2759 let mut txt = String::new();
2760 for c in recovered.clone()
2761 { write!(txt, "{:02X} ", c); }
2762 assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
2763
2764 let mut converted = String::new();
2765 unsafe { converted.as_mut_vec() }.write(&recovered);
2766 unsafe { converted.as_mut_vec() }.truncate(len as usize);
2767 println!("Bb =\t{}", converted);
2768 assert_eq!(converted, "");
2769 assert_eq!(converted, message);
2770 println!();
2771 }
2772
2773 {
2774 use cryptocol::symmetric::CFB;
2776
2777 let key = 0x_1234567890ABCDEF_u64;
2778 println!("K =\t{:#016X}", key);
2779 let mut a_des = DES::new_with_key_u64(key);
2780
2781 let message = "In the beginning God created the heavens and the earth.";
2782 println!("M =\t{}", message);
2783 let iv = 0x_FEDCBA0987654321_u64;
2784 println!("IV = {}", iv);
2785 let mut cipher = [0_u8; 40];
2786 let len = a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
2787 println!("The length of ciphertext = {}", len);
2788 assert_eq!(len, 0);
2789 let failure = a_des.is_failed();
2790 assert_eq!(failure, true);
2791
2792 let key = 0x_1234567890ABCDEF_u64;
2794 println!("K =\t{:#016X}", key);
2795 let mut a_des = DES::new_with_key_u64(key);
2796
2797 let cipher = [0x2Eu8, 0x1E, 0xE1, 0x51, 0xFD, 0xB3, 0xB0, 0x4B, 0x79, 0x3A, 0xA1, 0x78, 0xEC, 0xCD, 0x02, 0x72, 0x6A, 0xC4, 0x41, 0x7C, 0x25, 0xA4, 0x2C, 0x07, 0xFC, 0x77, 0x25, 0x49, 0x12, 0x55, 0x0F, 0x8A, 0xED, 0x44, 0xC3, 0xE4, 0xDC, 0x91, 0x69, 0x0F, 0x40, 0x72, 0x7F, 0xF2, 0xD9, 0xB7, 0x54, 0x9F, 0x36, 0x91, 0xC5, 0x85, 0x4F, 0x9B, 0x30];
2798 print!("C =\t");
2799 for c in cipher.clone()
2800 { print!("{:02X} ", c); }
2801 let mut recovered = [0u8; 40];
2802 let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
2803 println!("The length of plaintext = {}", len);
2804 assert_eq!(len, 0);
2805 let failure = a_des.is_failed();
2806 assert_eq!(failure, true);
2807 }
2808 println!("-------------------------------");
2809}
2810
2811fn des_set_successful()
2812{
2813 println!("des_set_successful");
2814 use cryptocol::symmetric::DES;
2815 let mut a_des = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
2816 assert_eq!(a_des.is_successful(), false);
2817
2818 a_des.set_successful();
2819 assert_eq!(a_des.is_successful(), true);
2820 println!("-------------------------------");
2821}
2822
2823fn des_set_failed()
2824{
2825 println!("des_set_failed");
2826 use cryptocol::symmetric::DES;
2827 let mut a_des = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
2828 a_des.encrypt_u64(0x1234567890ABCDEF_u64);
2829 assert_eq!(a_des.is_failed(), false);
2830
2831 a_des.set_failed();
2832 assert_eq!(a_des.is_failed(), true);
2833 println!("-------------------------------");
2834}
2835
2836fn des_has_weak_key()
2837{
2838 println!("des_has_weak_key");
2839 use cryptocol::symmetric::DES;
2840
2841 let mut a_des = DES::new_with_key_u64(0x_1234567890ABCDEF_u64);
2842 let weak_key = a_des.has_weak_key();
2843 assert_eq!(weak_key, false);
2844
2845 a_des.set_key_u64(0x_0000000000000000_u64);
2846 let weak_key = a_des.has_weak_key();
2847 assert_eq!(weak_key, true);
2848 println!("-------------------------------");
2849}