Added RSA decryption
This commit is contained in:
parent
a7036c0670
commit
9c01e4a74f
|
@ -71,9 +71,7 @@ impl Encrypt for RSACryptoHandler {
|
|||
fn encrypt(&self, data: &[u8]) -> Result<Vec<u8>, CryptoError> {
|
||||
// TODO: should this be called every time?
|
||||
let mut rng = rand::thread_rng();
|
||||
let encrypted_data = self
|
||||
.public_key
|
||||
.encrypt(&mut rng, Pkcs1v15Encrypt, &data[..]);
|
||||
let encrypted_data = self.public_key.encrypt(&mut rng, Pkcs1v15Encrypt, data);
|
||||
|
||||
match encrypted_data {
|
||||
Ok(d) => Ok(d),
|
||||
|
@ -82,6 +80,17 @@ impl Encrypt for RSACryptoHandler {
|
|||
}
|
||||
}
|
||||
|
||||
impl Decrypt for RSACryptoHandler {
|
||||
fn decrypt(&self, data: &[u8]) -> Result<Vec<u8>, CryptoError> {
|
||||
let decrypted_data = self.private_key.decrypt(Pkcs1v15Encrypt, data);
|
||||
|
||||
match decrypted_data {
|
||||
Ok(d) => Ok(d),
|
||||
Err(_) => Err(CryptoError::Decrypt),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod errors {
|
||||
#[derive(Debug)]
|
||||
pub enum CryptoError {
|
||||
|
@ -97,7 +106,7 @@ mod errors {
|
|||
}
|
||||
|
||||
mod tests {
|
||||
use crate::crypto::{Encrypt, RSACryptoHandler};
|
||||
use crate::crypto::{Decrypt, Encrypt, RSACryptoHandler};
|
||||
|
||||
fn get_public_key() -> String {
|
||||
String::from(
|
||||
|
@ -157,4 +166,20 @@ m/A1vde9ULfntRXDT+44rL5BfsLB9oNfknDtLSk/TsE9zQ6f/zghzw==
|
|||
|
||||
assert!(data.into_iter().ne(encrypted_data.into_iter()))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_rsa_decrypt() {
|
||||
let data = b"hello from test";
|
||||
let private_key = get_private_key();
|
||||
let public_key = get_public_key();
|
||||
let crypto_handler =
|
||||
RSACryptoHandler::new_from_str(private_key.as_str(), public_key.as_str()).unwrap();
|
||||
|
||||
let encrypted_data = crypto_handler.encrypt(data).unwrap();
|
||||
let encrypted_data = &encrypted_data[..];
|
||||
let decrypted_data = crypto_handler.decrypt(encrypted_data).unwrap();
|
||||
let decrypted_data = &decrypted_data[..];
|
||||
|
||||
assert!(data.into_iter().eq(decrypted_data.into_iter()))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue