Added RSA decryption

This commit is contained in:
Martin Slot 2023-12-19 21:10:44 +01:00
parent a7036c0670
commit 9c01e4a74f
1 changed files with 29 additions and 4 deletions

View File

@ -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()))
}
}