use rand::rngs::OsRng;
use rust_bottle::ecdh::rsa_encrypt;
use rust_bottle::keys::RsaKey;
#[test]
fn test_short_buffer_encryption_rsa() {
let rng = &mut OsRng;
let rsa_key = RsaKey::generate(rng, 2048).unwrap();
let aes_key = vec![0x42u8; 32];
let ciphertext = rsa_encrypt(rng, &aes_key, rsa_key.public_key()).unwrap();
assert_eq!(ciphertext.len(), 256);
let decrypted = rsa_key.decrypt(&ciphertext).unwrap();
assert_eq!(decrypted, aes_key);
}
#[test]
fn test_short_buffer_encryption_small_message() {
let rng = &mut OsRng;
let rsa_key = RsaKey::generate(rng, 2048).unwrap();
let message = b"Short message!";
let ciphertext = rsa_encrypt(rng, message, rsa_key.public_key()).unwrap();
let decrypted = rsa_key.decrypt(&ciphertext).unwrap();
assert_eq!(decrypted, message);
}
#[test]
fn test_short_buffer_encryption_max_size() {
let rng = &mut OsRng;
let rsa_key = RsaKey::generate(rng, 2048).unwrap();
let max_size = 190;
let message = vec![0xAAu8; max_size];
let ciphertext = rsa_encrypt(rng, &message, rsa_key.public_key()).unwrap();
let decrypted = rsa_key.decrypt(&ciphertext).unwrap();
assert_eq!(decrypted, message);
}
#[test]
fn test_short_buffer_encryption_too_large() {
let rng = &mut OsRng;
let rsa_key = RsaKey::generate(rng, 2048).unwrap();
let too_large = vec![0xAAu8; 200];
let result = rsa_encrypt(rng, &too_large, rsa_key.public_key());
assert!(result.is_err());
}
#[test]
fn test_short_buffer_encryption_4096_key() {
let rng = &mut OsRng;
let rsa_key = RsaKey::generate(rng, 4096).unwrap();
let message = vec![0xBBu8; 400];
let ciphertext = rsa_encrypt(rng, &message, rsa_key.public_key()).unwrap();
assert_eq!(ciphertext.len(), 512);
let decrypted = rsa_key.decrypt(&ciphertext).unwrap();
assert_eq!(decrypted, message);
}
#[test]
fn test_short_buffer_encryption_key_wrapping() {
let rng = &mut OsRng;
let rsa_key = RsaKey::generate(rng, 2048).unwrap();
let aes_key = vec![0xCCu8; 32];
let wrapped_key = rsa_encrypt(rng, &aes_key, rsa_key.public_key()).unwrap();
let unwrapped_key = rsa_key.decrypt(&wrapped_key).unwrap();
assert_eq!(unwrapped_key, aes_key);
}
#[test]
fn test_short_buffer_encryption_different_keys() {
let rng = &mut OsRng;
let key1 = RsaKey::generate(rng, 2048).unwrap();
let key2 = RsaKey::generate(rng, 2048).unwrap();
let message = b"Secret message";
let ciphertext = rsa_encrypt(rng, message, key1.public_key()).unwrap();
let result = key2.decrypt(&ciphertext);
assert!(result.is_err());
let decrypted = key1.decrypt(&ciphertext).unwrap();
assert_eq!(decrypted, message);
}