in sgx_crypto_helper/src/rsa3072.rs [349:415]
fn rsa_encrypt_decrypt() {
let text = String::from("abc");
let text_slice = &text.into_bytes();
let mod_size: i32 = 256;
let exp_size: i32 = 4;
let mut n: Vec<u8> = vec![0_u8; mod_size as usize];
let mut d: Vec<u8> = vec![0_u8; mod_size as usize];
let mut e: Vec<u8> = vec![1, 0, 1, 0];
let mut p: Vec<u8> = vec![0_u8; mod_size as usize / 2];
let mut q: Vec<u8> = vec![0_u8; mod_size as usize / 2];
let mut dmp1: Vec<u8> = vec![0_u8; mod_size as usize / 2];
let mut dmq1: Vec<u8> = vec![0_u8; mod_size as usize / 2];
let mut iqmp: Vec<u8> = vec![0_u8; mod_size as usize / 2];
assert!(rsgx_create_rsa_key_pair(
mod_size,
exp_size,
n.as_mut_slice(),
d.as_mut_slice(),
e.as_mut_slice(),
p.as_mut_slice(),
q.as_mut_slice(),
dmp1.as_mut_slice(),
dmq1.as_mut_slice(),
iqmp.as_mut_slice()
)
.is_ok());
let privkey = SgxRsaPrivKey::new();
let pubkey = SgxRsaPubKey::new();
assert!(pubkey
.create(mod_size, exp_size, n.as_slice(), e.as_slice())
.is_ok());
assert!(privkey
.create(
mod_size,
exp_size,
e.as_slice(),
p.as_slice(),
q.as_slice(),
dmp1.as_slice(),
dmq1.as_slice(),
iqmp.as_slice()
)
.is_ok());
let mut ciphertext: Vec<u8> = vec![0_u8; 256];
let mut chipertext_len: usize = ciphertext.len();
assert!(pubkey
.encrypt_sha256(ciphertext.as_mut_slice(), &mut chipertext_len, text_slice)
.is_ok());
let mut plaintext: Vec<u8> = vec![0_u8; 256];
let mut plaintext_len: usize = plaintext.len();
assert!(privkey
.decrypt_sha256(
plaintext.as_mut_slice(),
&mut plaintext_len,
ciphertext.as_slice()
)
.is_ok());
assert_eq!(plaintext[..plaintext_len], text_slice[..])
}