#![allow(missing_docs)]
#![allow(unused_must_use)]
#![allow(dead_code)]
#![allow(unused_imports)]
#![allow(non_snake_case)]
pub fn main()
{
des_encrypt_with_padding_pkcs7_cbc();
des_encrypt_with_padding_pkcs7_cbc_into_vec();
des_encrypt_with_padding_pkcs7_cbc_into_array();
des_encrypt_str_with_padding_pkcs7_cbc();
des_encrypt_str_with_padding_pkcs7_cbc_into_vec();
des_encrypt_str_with_padding_pkcs7_cbc_into_array();
des_encrypt_string_with_padding_pkcs7_cbc();
des_encrypt_string_with_padding_pkcs7_cbc_into_vec();
des_encrypt_string_with_padding_pkcs7_cbc_into_array();
des_encrypt_vec_with_padding_pkcs7_cbc();
des_encrypt_vec_with_padding_pkcs7_cbc_into_vec();
des_encrypt_vec_with_padding_pkcs7_cbc_into_array();
des_encrypt_array_with_padding_pkcs7_cbc();
des_encrypt_array_with_padding_pkcs7_cbc_into_vec();
des_encrypt_array_with_padding_pkcs7_cbc_into_array();
des_decrypt_with_padding_pkcs7_cbc();
des_decrypt_with_padding_pkcs7_cbc_into_vec();
des_decrypt_with_padding_pkcs7_cbc_into_array();
des_decrypt_with_padding_pkcs7_cbc_into_string();
des_decrypt_vec_with_padding_pkcs7_cbc();
des_decrypt_vec_with_padding_pkcs7_cbc_into_vec();
des_decrypt_vec_with_padding_pkcs7_cbc_into_array();
des_decrypt_vec_with_padding_pkcs7_cbc_into_string();
des_decrypt_array_with_padding_pkcs7_cbc();
des_decrypt_array_with_padding_pkcs7_cbc_into_vec();
des_decrypt_array_with_padding_pkcs7_cbc_into_array();
des_decrypt_array_with_padding_pkcs7_cbc_into_string();
}
fn des_encrypt_with_padding_pkcs7_cbc()
{
println!("des_encrypt_with_padding_pkcs7_cbc()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt(iv, message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt(iv, message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt(iv, message.as_ptr(), message.len() as u64, cipher1.as_mut_ptr());
d_des.encrypt(iv, message.as_ptr(), message.len() as u64, cipher2.as_mut_ptr());
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt(iv, message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt(iv, message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt(iv, message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt(iv, message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt(iv, message.as_ptr(), message.len() as u64, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_with_padding_pkcs7_cbc_into_vec()
{
println!("des_encrypt_with_padding_pkcs7_cbc_into_vec()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let mut cipher = Vec::<u8>::new();
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
a_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
println!("K =\t{:#016X}", key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_with_padding_pkcs7_cbc_into_array()
{
println!("des_encrypt_with_padding_pkcs7_cbc_into_array()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_str_with_padding_pkcs7_cbc()
{
println!("des_encrypt_str_with_padding_pkcs7_cbc()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_str(iv, &message, cipher.as_mut_ptr());
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_str(iv, &message, cipher.as_mut_ptr());
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_str(iv, &message, cipher1.as_mut_ptr());
d_des.encrypt_str(iv, &message, cipher2.as_mut_ptr());
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_str(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_str(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_str(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_str(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_str(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_str_with_padding_pkcs7_cbc_into_vec()
{
println!("des_encrypt_str_with_padding_pkcs7_cbc_into_vec()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_str_into_vec(iv, &message, &mut cipher1);
d_des.encrypt_str_into_vec(iv, &message, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_str_with_padding_pkcs7_cbc_into_array()
{
println!("des_encrypt_str_with_padding_pkcs7_cbc_into_array()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_str_into_array(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_str_into_array(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_str_into_array(iv, &message, &mut cipher1);
d_des.encrypt_str_into_array(iv, &message, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_str_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_str_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_str_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_str_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_str_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_string_with_padding_pkcs7_cbc()
{
println!("des_encrypt_string_with_padding_pkcs7_cbc()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_string(iv, &message, cipher.as_mut_ptr());
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_string(iv, &message, cipher.as_mut_ptr());
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_string(iv, &message, cipher1.as_mut_ptr());
d_des.encrypt_string(iv, &message, cipher2.as_mut_ptr());
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_string(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_string(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_string(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_string(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_string(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_string_with_padding_pkcs7_cbc_into_vec()
{
println!("des_encrypt_string_with_padding_pkcs7_cbc_into_vec()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_string_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_string_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_string_into_vec(iv, &message, &mut cipher1);
d_des.encrypt_string_into_vec(iv, &message, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_string_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_string_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_string_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_string_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_string_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_string_with_padding_pkcs7_cbc_into_array()
{
println!("des_encrypt_string_with_padding_pkcs7_cbc_into_array()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_string_into_array(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_string_into_array(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_string_into_array(iv, &message, &mut cipher1);
d_des.encrypt_string_into_array(iv, &message, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_string_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_string_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_string_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_string_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.".to_string();
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_string_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_vec_with_padding_pkcs7_cbc()
{
println!("des_encrypt_vec_with_padding_pkcs7_cbc()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_vec(iv, &message, cipher.as_mut_ptr());
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_vec(iv, &message, cipher.as_mut_ptr());
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K1 =\t{:#016X}", key1);
println!("K2 =\t{:#016X}", key2);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_vec(iv, &message, cipher1.as_mut_ptr());
d_des.encrypt_vec(iv, &message, cipher2.as_mut_ptr());
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_vec(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_vec(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_vec(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_vec(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_vec(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_vec_with_padding_pkcs7_cbc_into_vec()
{
println!("des_encrypt_vec_with_padding_pkcs7_cbc_into_vec()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_vec_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_vec_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K1 =\t{:#016X}", key1);
println!("K2 =\t{:#016X}", key2);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_vec_into_vec(iv, &message, &mut cipher1);
d_des.encrypt_vec_into_vec(iv, &message, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_vec_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_vec_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_vec_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_vec_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_vec_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_vec_with_padding_pkcs7_cbc_into_array()
{
println!("des_encrypt_vec_with_padding_pkcs7_cbc_into_array()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_vec_into_array(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_vec_into_array(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K1 =\t{:#016X}", key1);
println!("K2 =\t{:#016X}", key2);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_vec_into_array(iv, &message, &mut cipher1);
d_des.encrypt_vec_into_array(iv, &message, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_vec_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_vec_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_vec_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_vec_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let message = unsafe { message.to_string().as_mut_vec().clone() };
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_vec_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_array_with_padding_pkcs7_cbc()
{
println!("des_encrypt_array_with_padding_pkcs7_cbc()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", mes);
let mut message = [0_u8; 55];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_array(iv, &message, cipher.as_mut_ptr());
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let mes = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", mes);
let mut message = [0_u8; 55];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_array(iv, &message, cipher.as_mut_ptr());
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K1 =\t{:#016X}", key1);
println!("K2 =\t{:#016X}", key2);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let mes = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", mes);
let mut message = [0_u8; 55];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_array(iv, &message, cipher1.as_mut_ptr());
d_des.encrypt_array(iv, &message, cipher2.as_mut_ptr());
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "";
println!("M =\t{}", mes);
let mut message = [0_u8; 0];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_array(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "7 bytes";
println!("M =\t{}", mes);
let mut message = [0_u8; 7];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_array(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "I am OK.";
println!("M =\t{}", mes);
let mut message = [0_u8; 8];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_array(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "PARK Youngho";
println!("M =\t{}", mes);
let mut message = [0_u8; 12];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_array(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "고맙습니다.";
println!("M =\t{}", mes);
let mut message = [0_u8; 16];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_array(iv, &message, cipher.as_mut_ptr());
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_array_with_padding_pkcs7_cbc_into_vec()
{
println!("des_encrypt_array_with_padding_pkcs7_cbc_into_vec()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", mes);
let mut message = [0_u8; 55];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_array_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let mes = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", mes);
let mut message = [0_u8; 55];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_array_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K1 =\t{:#016X}", key1);
println!("K2 =\t{:#016X}", key2);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let mes = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", mes);
let mut message = [0_u8; 55];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_array_into_vec(iv, &message, &mut cipher1);
d_des.encrypt_array_into_vec(iv, &message, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "";
println!("M =\t{}", mes);
let mut message = [0_u8; 0];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_array_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "7 bytes";
println!("M =\t{}", mes);
let mut message = [0_u8; 7];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_array_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "I am OK.";
println!("M =\t{}", mes);
let mut message = [0_u8; 8];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_array_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "PARK Youngho";
println!("M =\t{}", mes);
let mut message = [0_u8; 12];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_array_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "고맙습니다.";
println!("M =\t{}", mes);
let mut message = [0_u8; 16];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_array_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_encrypt_array_with_padding_pkcs7_cbc_into_array()
{
println!("des_encrypt_array_with_padding_pkcs7_cbc_into_array()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", mes);
let mut message = [0_u8; 55];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_array_into_array(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let mes = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", mes);
let mut message = [0_u8; 55];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_array_into_array(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K1 =\t{:#016X}", key1);
println!("K2 =\t{:#016X}", key2);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let mes = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", mes);
let mut message = [0_u8; 55];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_array_into_array(iv, &message, &mut cipher1);
d_des.encrypt_array_into_array(iv, &message, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "";
println!("M =\t{}", mes);
let mut message = [0_u8; 0];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_array_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "7 bytes";
println!("M =\t{}", mes);
let mut message = [0_u8; 7];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_array_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "I am OK.";
println!("M =\t{}", mes);
let mut message = [0_u8; 8];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_array_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "PARK Youngho";
println!("M =\t{}", mes);
let mut message = [0_u8; 12];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_array_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let mes = "고맙습니다.";
println!("M =\t{}", mes);
let mut message = [0_u8; 16];
message.copy_from_slice(mes.as_bytes());
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_array_into_array(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
println!("-------------------------------");
}
fn des_decrypt_with_padding_pkcs7_cbc()
{
println!("des_decrypt_with_padding_pkcs7_cbc()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = vec![0; 55];
a_des.decrypt(iv, cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = vec![0; 55];
a_des.decrypt(iv, cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
print!("Ba (128 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (128 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = vec![0; 55];
let mut recovered2 = vec![0; 55];
c_des.decrypt(iv, cipher1.as_ptr(), cipher1.len() as u64, recovered1.as_mut_ptr());
d_des.decrypt(iv, cipher2.as_ptr(), cipher2.len() as u64, recovered2.as_mut_ptr());
print!("B1a (0 rounds) =\t");
for b in recovered1.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
print!("B2a (0 rounds) =\t");
for b in recovered2.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted1 = String::new();
let mut converted2 = String::new();
unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
println!("B1b (0 rounds) =\t{}", converted1);
assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
assert_eq!(converted1, message);
println!("B2b (0 rounds) =\t{}", converted2);
assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
assert_eq!(converted2, message);
assert_eq!(converted1, converted1);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = vec![0; 8];
let len = a_des.decrypt(iv, cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = vec![0; 8];
let len = a_des.decrypt(iv, cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "7 bytes");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = vec![0; 16];
let len = a_des.decrypt(iv, cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "I am OK.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = vec![0; 16];
let len = a_des.decrypt(iv, cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "PARK Youngho");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = vec![0; 24];
let len = a_des.decrypt(iv, cipher.as_ptr(), cipher.len() as u64, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "고맙습니다.");
assert_eq!(converted, message);
println!("-------------------------------");
}
fn des_decrypt_with_padding_pkcs7_cbc_into_vec()
{
println!("des_decrypt_with_padding_pkcs7_cbc_into_vec()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_into_vec(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_into_vec(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba (128 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (128 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = Vec::<u8>::new();
let mut recovered2 = Vec::<u8>::new();
c_des.decrypt_into_vec(iv, cipher1.as_ptr(), cipher1.len() as u64, &mut recovered1);
d_des.decrypt_into_vec(iv, cipher2.as_ptr(), cipher2.len() as u64, &mut recovered2);
print!("B1a (0 rounds) =\t");
for b in recovered1.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
print!("B2a (0 rounds) =\t");
for b in recovered2.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted1 = String::new();
let mut converted2 = String::new();
unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
println!("B1b (0 rounds) =\t{}", converted1);
assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
assert_eq!(converted1, message);
println!("B2b (0 rounds) =\t{}", converted2);
assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
assert_eq!(converted2, message);
assert_eq!(converted1, converted1);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_into_vec(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_into_vec(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "37 20 62 79 74 65 73 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "7 bytes");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_into_vec(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "I am OK.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_into_vec(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "PARK Youngho");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_into_vec(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "고맙습니다.");
assert_eq!(converted, message);
println!("-------------------------------");
}
fn des_decrypt_with_padding_pkcs7_cbc_into_array()
{
println!("des_decrypt_with_padding_pkcs7_cbc_into_array()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = [0u8; 56];
let len = a_des.decrypt_into_array(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = [0u8; 56];
let len = a_des.decrypt_into_array(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = [0u8; 56];
let mut recovered2 = [0u8; 56];
let len1 = c_des.decrypt_into_array(iv, cipher1.as_ptr(), cipher1.len() as u64, &mut recovered1);
let len2 = d_des.decrypt_into_array(iv, cipher2.as_ptr(), cipher2.len() as u64, &mut recovered2);
print!("B1a (0 rounds) =\t");
for b in recovered1.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
print!("B2a (0 rounds) =\t");
for b in recovered2.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
let mut converted1 = String::new();
let mut converted2 = String::new();
unsafe { converted1.as_mut_vec() }.write(&recovered1);
unsafe { converted2.as_mut_vec() }.write(&recovered2);
unsafe { converted1.as_mut_vec() }.truncate(len1 as usize);
unsafe { converted2.as_mut_vec() }.truncate(len2 as usize);
println!("B1b (0 rounds) =\t{}", converted1);
println!("B2b (0 rounds) =\t{}", converted2);
assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
assert_eq!(converted1, message);
assert_eq!(converted2, message);
assert_eq!(converted1, converted2);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = [0u8; 8];
let len = a_des.decrypt_into_array(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = [0u8; 8];
let len = a_des.decrypt_into_array(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "7 bytes");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = [0u8; 16];
let len = a_des.decrypt_into_array(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "I am OK.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = [0u8; 16];
let len = a_des.decrypt_into_array(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "PARK Youngho");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = [0u8; 24];
let len = a_des.decrypt_into_array(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "고맙습니다.");
assert_eq!(converted, message);
println!("-------------------------------");
}
fn des_decrypt_with_padding_pkcs7_cbc_into_string()
{
println!("des_decrypt_with_padding_pkcs7_cbc_into_string()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = String::new();
a_des.decrypt_into_string(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
println!("B (16 rounds) =\t{}", recovered);
assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = String::new();
a_des.decrypt_into_string(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
println!("B (128 rounds) =\t{}", recovered);
assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = String::new();
let mut recovered2 = String::new();
c_des.decrypt_into_string(iv, cipher1.as_ptr(), cipher1.len() as u64, &mut recovered1);
d_des.decrypt_into_string(iv, cipher2.as_ptr(), cipher2.len() as u64, &mut recovered2);
println!("B1 (0 rounds) =\t{}", recovered1);
println!("B2 (0 rounds) =\t{}", recovered2);
assert_eq!(recovered1, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered2, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered1, message);
assert_eq!(recovered2, message);
assert_eq!(recovered1, recovered2);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = String::new();
a_des.decrypt_into_string(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = String::new();
a_des.decrypt_into_string(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "7 bytes");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = String::new();
a_des.decrypt_into_string(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "I am OK.");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = String::new();
a_des.decrypt_into_string(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "PARK Youngho");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = String::new();
a_des.decrypt_into_string(iv, cipher.as_ptr(), cipher.len() as u64, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "고맙습니다.");
assert_eq!(recovered, message);
println!("-------------------------------");
}
fn des_decrypt_vec_with_padding_pkcs7_cbc()
{
println!("des_decrypt_vec_with_padding_pkcs7_cbc()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = vec![0; 55];
a_des.decrypt_vec(iv, &cipher, recovered.as_mut_ptr());
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = vec![0; 55];
a_des.decrypt_vec(iv, &cipher, recovered.as_mut_ptr());
print!("Ba (128 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (128 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = vec![0; 55];
let mut recovered2 = vec![0; 55];
c_des.decrypt_vec(iv, &cipher1, recovered1.as_mut_ptr());
d_des.decrypt_vec(iv, &cipher2, recovered2.as_mut_ptr());
print!("B1a (0 rounds) =\t");
for b in recovered1.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
print!("B2a (0 rounds) =\t");
for b in recovered2.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted1 = String::new();
let mut converted2 = String::new();
unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
println!("B1b (0 rounds) =\t{}", converted1);
assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
assert_eq!(converted1, message);
println!("B2b (0 rounds) =\t{}", converted2);
assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
assert_eq!(converted2, message);
assert_eq!(converted1, converted1);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = vec![0; 8];
let len = a_des.decrypt_vec(iv, &cipher, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = vec![0; 8];
let len = a_des.decrypt_vec(iv, &cipher, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "7 bytes");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = vec![0; 16];
let len = a_des.decrypt_vec(iv, &cipher, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "I am OK.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = vec![0; 16];
let len = a_des.decrypt_vec(iv, &cipher, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "PARK Youngho");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = vec![0; 24];
let len = a_des.decrypt_vec(iv, &cipher, recovered.as_mut_ptr());
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
converted.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "고맙습니다.");
assert_eq!(converted, message);
println!("-------------------------------");
}
fn des_decrypt_vec_with_padding_pkcs7_cbc_into_vec()
{
println!("des_decrypt_vec_with_padding_pkcs7_cbc_into_vec()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_vec_into_vec(iv, &cipher, &mut recovered);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_vec_into_vec(iv, &cipher, &mut recovered);
print!("Ba (128 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (128 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = Vec::<u8>::new();
let mut recovered2 = Vec::<u8>::new();
c_des.decrypt_vec_into_vec(iv, &cipher1, &mut recovered1);
d_des.decrypt_vec_into_vec(iv, &cipher2, &mut recovered2);
print!("B1a (0 rounds) =\t");
for b in recovered1.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
print!("B2a (0 rounds) =\t");
for b in recovered2.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted1 = String::new();
let mut converted2 = String::new();
unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
println!("B1b (0 rounds) =\t{}", converted1);
assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
assert_eq!(converted1, message);
println!("B2b (0 rounds) =\t{}", converted2);
assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
assert_eq!(converted2, message);
assert_eq!(converted1, converted1);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_vec_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_vec_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "37 20 62 79 74 65 73 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "7 bytes");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_vec_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "I am OK.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_vec_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "PARK Youngho");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_vec_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "고맙습니다.");
assert_eq!(converted, message);
println!("-------------------------------");
}
fn des_decrypt_vec_with_padding_pkcs7_cbc_into_array()
{
println!("des_decrypt_vec_with_padding_pkcs7_cbc_into_array()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = [0u8; 56];
let len = a_des.decrypt_vec_into_array(iv, &cipher, &mut recovered);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = [0u8; 56];
let len = a_des.decrypt_vec_into_array(iv, &cipher, &mut recovered);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = [0u8; 56];
let mut recovered2 = [0u8; 56];
let len1 = c_des.decrypt_vec_into_array(iv, &cipher1, &mut recovered1);
let len2 = d_des.decrypt_vec_into_array(iv, &cipher2, &mut recovered2);
print!("B1a (0 rounds) =\t");
for b in recovered1.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
print!("B2a (0 rounds) =\t");
for b in recovered2.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
let mut converted1 = String::new();
let mut converted2 = String::new();
unsafe { converted1.as_mut_vec() }.write(&recovered1);
unsafe { converted2.as_mut_vec() }.write(&recovered2);
unsafe { converted1.as_mut_vec() }.truncate(len1 as usize);
unsafe { converted2.as_mut_vec() }.truncate(len2 as usize);
println!("B1b (0 rounds) =\t{}", converted1);
println!("B2b (0 rounds) =\t{}", converted2);
assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
assert_eq!(converted1, message);
assert_eq!(converted2, message);
assert_eq!(converted1, converted2);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = [0u8; 8];
let len = a_des.decrypt_vec_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = [0u8; 8];
let len = a_des.decrypt_vec_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "7 bytes");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = [0u8; 16];
let len = a_des.decrypt_vec_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "I am OK.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = [0u8; 16];
let len = a_des.decrypt_vec_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "PARK Youngho");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = [0u8; 24];
let len = a_des.decrypt_vec_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "고맙습니다.");
assert_eq!(converted, message);
println!("-------------------------------");
}
fn des_decrypt_vec_with_padding_pkcs7_cbc_into_string()
{
println!("des_decrypt_vec_with_padding_pkcs7_cbc_into_string()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = String::new();
a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
println!("B (16 rounds) =\t{}", recovered);
assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = String::new();
a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
println!("B (128 rounds) =\t{}", recovered);
assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = Vec::<u8>::new();
let mut cipher2 = Vec::<u8>::new();
c_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_vec(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = String::new();
let mut recovered2 = String::new();
c_des.decrypt_vec_into_string(iv, &cipher1, &mut recovered1);
d_des.decrypt_vec_into_string(iv, &cipher2, &mut recovered2);
println!("B1 (0 rounds) =\t{}", recovered1);
println!("B2 (0 rounds) =\t{}", recovered2);
assert_eq!(recovered1, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered2, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered1, message);
assert_eq!(recovered2, message);
assert_eq!(recovered1, recovered2);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = String::new();
a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = String::new();
a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "7 bytes");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = String::new();
a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "I am OK.");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = String::new();
a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "PARK Youngho");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = Vec::<u8>::new();
a_des.encrypt_str_into_vec(iv, &message, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = String::new();
a_des.decrypt_vec_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "고맙습니다.");
assert_eq!(recovered, message);
println!("-------------------------------");
}
fn des_decrypt_array_with_padding_pkcs7_cbc()
{
println!("des_decrypt_array_with_padding_pkcs7_cbc()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = vec![0; 55];
let len = a_des.decrypt_array(iv, &cipher, recovered.as_mut_ptr());
recovered.truncate(len as usize);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = vec![0; 55];
let len = a_des.decrypt_array(iv, &cipher, recovered.as_mut_ptr());
recovered.truncate(len as usize);
print!("Ba (128 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (128 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = vec![0; 55];
let mut recovered2 = vec![0; 55];
let len1 = c_des.decrypt_array(iv, &cipher1, recovered1.as_mut_ptr());
let len2 = d_des.decrypt_array(iv, &cipher2, recovered2.as_mut_ptr());
recovered1.truncate(len1 as usize);
recovered2.truncate(len2 as usize);
print!("B1a (0 rounds) =\t");
for b in recovered1.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
print!("B2a (0 rounds) =\t");
for b in recovered2.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted1 = String::new();
let mut converted2 = String::new();
unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
println!("B1b (0 rounds) =\t{}", converted1);
assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
assert_eq!(converted1, message);
println!("B2b (0 rounds) =\t{}", converted2);
assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
assert_eq!(converted2, message);
assert_eq!(converted1, converted1);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = vec![0; 8];
let len = a_des.decrypt_array(iv, &cipher, recovered.as_mut_ptr());
recovered.truncate(len as usize);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = vec![0; 8];
let len = a_des.decrypt_array(iv, &cipher, recovered.as_mut_ptr());
recovered.truncate(len as usize);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "37 20 62 79 74 65 73 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "7 bytes");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = vec![0; 16];
let len = a_des.decrypt_array(iv, &cipher, recovered.as_mut_ptr());
recovered.truncate(len as usize);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "I am OK.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = vec![0; 16];
let len = a_des.decrypt_array(iv, &cipher, recovered.as_mut_ptr());
recovered.truncate(len as usize);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "PARK Youngho");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = vec![0; 24];
let len = a_des.decrypt_array(iv, &cipher, recovered.as_mut_ptr());
recovered.truncate(len as usize);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "고맙습니다.");
assert_eq!(converted, message);
println!("-------------------------------");
}
fn des_decrypt_array_with_padding_pkcs7_cbc_into_vec()
{
println!("des_decrypt_array_with_padding_pkcs7_cbc_into_vec()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_array_into_vec(iv, &cipher, &mut recovered);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_array_into_vec(iv, &cipher, &mut recovered);
print!("Ba (128 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb (128 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = Vec::<u8>::new();
let mut recovered2 = Vec::<u8>::new();
c_des.decrypt_array_into_vec(iv, &cipher1, &mut recovered1);
d_des.decrypt_array_into_vec(iv, &cipher2, &mut recovered2);
print!("B1a (0 rounds) =\t");
for b in recovered1.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
print!("B2a (0 rounds) =\t");
for b in recovered2.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E ");
let mut converted1 = String::new();
let mut converted2 = String::new();
unsafe { converted1.as_mut_vec() }.append(&mut recovered1);
unsafe { converted2.as_mut_vec() }.append(&mut recovered2);
println!("B1b (0 rounds) =\t{}", converted1);
assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
assert_eq!(converted1, message);
println!("B2b (0 rounds) =\t{}", converted2);
assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
assert_eq!(converted2, message);
assert_eq!(converted1, converted1);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_array_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_array_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "37 20 62 79 74 65 73 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "7 bytes");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_array_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "I am OK.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_array_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "PARK Youngho");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = Vec::<u8>::new();
a_des.decrypt_array_into_vec(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.append(&mut recovered);
println!("Bb =\t{}", converted);
assert_eq!(converted, "고맙습니다.");
assert_eq!(converted, message);
println!("-------------------------------");
}
fn des_decrypt_array_with_padding_pkcs7_cbc_into_array()
{
println!("des_decrypt_array_with_padding_pkcs7_cbc_into_array()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = [0u8; 56];
let len = a_des.decrypt_array_into_array(iv,&cipher, &mut recovered);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = [0u8; 56];
let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
print!("Ba (16 rounds) =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb (16 rounds) =\t{}", converted);
assert_eq!(converted, "In the beginning God created the heavens and the earth.");
assert_eq!(converted, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = [0u8; 56];
let mut recovered2 = [0u8; 56];
let len1 = c_des.decrypt_array_into_array(iv, &cipher1, &mut recovered1);
let len2 = d_des.decrypt_array_into_array(iv, &cipher2, &mut recovered2);
print!("B1a (0 rounds) =\t");
for b in recovered1.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
print!("B2a (0 rounds) =\t");
for b in recovered2.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 6E 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 47 6F 64 20 63 72 65 61 74 65 64 20 74 68 65 20 68 65 61 76 65 6E 73 20 61 6E 64 20 74 68 65 20 65 61 72 74 68 2E 00 ");
let mut converted1 = String::new();
let mut converted2 = String::new();
unsafe { converted1.as_mut_vec() }.write(&recovered1);
unsafe { converted2.as_mut_vec() }.write(&recovered2);
unsafe { converted1.as_mut_vec() }.truncate(len1 as usize);
unsafe { converted2.as_mut_vec() }.truncate(len2 as usize);
println!("B1b (0 rounds) =\t{}", converted1);
println!("B2b (0 rounds) =\t{}", converted2);
assert_eq!(converted1, "In the beginning God created the heavens and the earth.");
assert_eq!(converted2, "In the beginning God created the heavens and the earth.");
assert_eq!(converted1, message);
assert_eq!(converted2, message);
assert_eq!(converted1, converted2);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = [0u8; 8];
let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = [0u8; 8];
let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "37 20 62 79 74 65 73 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "7 bytes");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = [0u8; 16];
let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "49 20 61 6D 20 4F 4B 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "I am OK.");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = [0u8; 16];
let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "50 41 52 4B 20 59 6F 75 6E 67 68 6F 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "PARK Youngho");
assert_eq!(converted, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = [0u8; 24];
let len = a_des.decrypt_array_into_array(iv, &cipher, &mut recovered);
print!("Ba =\t");
for b in recovered.clone()
{ print!("{:02X} ", b); }
println!();
let mut txt = String::new();
for c in recovered.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "EA B3 A0 EB A7 99 EC 8A B5 EB 8B 88 EB 8B A4 2E 00 00 00 00 00 00 00 00 ");
let mut converted = String::new();
unsafe { converted.as_mut_vec() }.write(&recovered);
unsafe { converted.as_mut_vec() }.truncate(len as usize);
println!("Bb =\t{}", converted);
assert_eq!(converted, "고맙습니다.");
assert_eq!(converted, message);
println!("-------------------------------");
}
fn des_decrypt_array_with_padding_pkcs7_cbc_into_string()
{
println!("des_decrypt_array_with_padding_pkcs7_cbc_into_string()");
use std::io::Write;
use std::fmt::Write as _;
use cryptocol::symmetric::{ DES, DES_Expanded, CBC_PKCS7 };
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (16 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = String::new();
a_des.decrypt_array_into_string(iv, &cipher, &mut recovered);
println!("B (16 rounds) =\t{}", recovered);
assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES_Expanded::<128, 0x_8103_8103_8103_8103_8103_8103_8103_8103_u128>::new_with_key_u64(key);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 56];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C (128 rounds) =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
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 ");
let mut recovered = String::new();
a_des.decrypt_array_into_string(iv, &cipher, &mut recovered);
println!("B (128 rounds) =\t{}", recovered);
assert_eq!(recovered, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered, message);
println!();
let key1 = 0x_1234567890ABCDEF_u64;
let key2 = 0_u64;
println!("K =\t{:#016X}", key);
let mut c_des = DES_Expanded::<0, 0>::new_with_key_u64(key1);
let mut d_des = DES_Expanded::<0, 0>::new_with_key_u64(key2);
let message = "In the beginning God created the heavens and the earth.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher1 = [0_u8; 56];
let mut cipher2 = [0_u8; 56];
c_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher1);
d_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher2);
print!("C (0 rounds) =\t");
for c in cipher1.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher1.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
print!("D (0 rounds) =\t");
for c in cipher2.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher2.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "94 1E 8A F3 92 EF FC 6C F2 B6 D3 6E FC 49 61 07 E1 F2 7C 05 EC 15 23 91 40 49 26 92 CC 92 87 F8 90 12 83 F3 75 FB D6 47 70 B3 DE 6B AA 4F 7D 11 A0 E9 7F 26 ED 1B A3 20 ");
let mut recovered1 = String::new();
let mut recovered2 = String::new();
c_des.decrypt_array_into_string(iv, &cipher1, &mut recovered1);
d_des.decrypt_array_into_string(iv, &cipher2, &mut recovered2);
println!("B1 (0 rounds) =\t{}", recovered1);
println!("B2 (0 rounds) =\t{}", recovered2);
assert_eq!(recovered1, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered2, "In the beginning God created the heavens and the earth.");
assert_eq!(recovered1, message);
assert_eq!(recovered2, message);
assert_eq!(recovered1, recovered2);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "A5 21 CF D8 13 A4 20 36 ");
let mut recovered = String::new();
a_des.decrypt_array_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "7 bytes";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 8];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "D8 F8 E5 E8 6B 44 98 16 ");
let mut recovered = String::new();
a_des.decrypt_array_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "7 bytes");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "I am OK.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "ED 4F CD B8 C1 A4 48 47 AB 12 20 DA B4 A6 F1 F1 ");
let mut recovered = String::new();
a_des.decrypt_array_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "I am OK.");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "PARK Youngho";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 16];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "5F 4F BB 12 C8 FB 7D 4B 91 E7 5E CF CC C0 44 5A ");
let mut recovered = String::new();
a_des.decrypt_array_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "PARK Youngho");
assert_eq!(recovered, message);
println!();
let key = 0x_1234567890ABCDEF_u64;
println!("K =\t{:#016X}", key);
let mut a_des = DES::new_with_key_u64(key);
let message = "고맙습니다.";
println!("M =\t{}", message);
let iv = 0x_FEDCBA0987654321_u64;
println!("IV =\t{}", iv);
let mut cipher = [0_u8; 24];
a_des.encrypt_into_array(iv, message.as_ptr(), message.len() as u64, &mut cipher);
print!("C =\t");
for c in cipher.clone()
{ print!("{:02X} ", c); }
println!();
let mut txt = String::new();
for c in cipher.clone()
{ write!(txt, "{:02X} ", c); }
assert_eq!(txt, "C3 60 23 7C BD E7 0E 6E F4 0C B1 6A 69 67 13 26 91 D0 EB 51 AF F5 1F 5A ");
let mut recovered = String::new();
a_des.decrypt_array_into_string(iv, &cipher, &mut recovered);
println!("B =\t{}", recovered);
assert_eq!(recovered, "고맙습니다.");
assert_eq!(recovered, message);
println!("-------------------------------");
}