use wolfcrypt::rsa::RsaPrivateKey;
fn gen_key() -> RsaPrivateKey {
RsaPrivateKey::generate(2048).expect("RSA 2048-bit key generation failed")
}
#[test]
fn oaep_round_trip() {
let sk = gen_key();
let plaintext = b"RFC 8017 Section 7.1 - OAEP round-trip test";
let ciphertext = sk.encrypt_oaep(plaintext).unwrap();
let recovered = sk.decrypt_oaep(&ciphertext).unwrap();
assert_eq!(plaintext.as_slice(), &recovered[..]);
}
#[test]
fn pkcs1v15_round_trip() {
let sk = gen_key();
let plaintext = b"RFC 8017 Section 7.2 - PKCS1v15 round-trip test";
let ciphertext = sk.encrypt_pkcs1v15(plaintext).unwrap();
let recovered = sk.decrypt_pkcs1v15(&ciphertext).unwrap();
assert_eq!(plaintext.as_slice(), &recovered[..]);
}
#[test]
fn oaep_ciphertext_is_randomized() {
let sk = gen_key();
let plaintext = b"randomization check";
let ct1 = sk.encrypt_oaep(plaintext).unwrap();
let ct2 = sk.encrypt_oaep(plaintext).unwrap();
assert_ne!(
ct1, ct2,
"OAEP ciphertexts should differ due to randomized padding"
);
}
#[test]
fn oaep_wrong_key_rejected() {
let sk_a = gen_key();
let sk_b = gen_key();
let plaintext = b"wrong key rejection test";
let ciphertext = sk_a.encrypt_oaep(plaintext).unwrap();
let result = sk_b.decrypt_oaep(&ciphertext);
assert!(result.is_err(), "Decryption with wrong key should fail");
}
#[test]
fn pkcs1v15_wrong_key_rejected() {
let sk_a = gen_key();
let sk_b = gen_key();
let plaintext = b"wrong key rejection test pkcs1v15";
let ciphertext = sk_a.encrypt_pkcs1v15(plaintext).unwrap();
let result = sk_b.decrypt_pkcs1v15(&ciphertext);
assert!(
result.is_err(),
"PKCS#1v1.5 decryption with wrong key should fail"
);
}
#[test]
fn oaep_max_plaintext_size() {
let sk = gen_key();
let pt_190 = vec![0x42u8; 190];
let ct = sk.encrypt_oaep(&pt_190).unwrap();
let recovered = sk.decrypt_oaep(&ct).unwrap();
assert_eq!(pt_190, recovered);
let pt_246 = vec![0x42u8; 246];
let result = sk.encrypt_oaep(&pt_246);
assert!(
result.is_err(),
"OAEP with 246-byte plaintext on 2048-bit key should fail"
);
}
#[test]
fn oaep_encrypt_with_public_key() {
let sk = gen_key();
let vk = sk.public_key();
let plaintext = b"public-key encryption test";
let ciphertext = vk.encrypt_oaep(plaintext).unwrap();
let recovered = sk.decrypt_oaep(&ciphertext).unwrap();
assert_eq!(plaintext.as_slice(), &recovered[..]);
}
#[test]
fn pkcs1v15_encrypt_with_public_key() {
let sk = gen_key();
let vk = sk.public_key();
let plaintext = b"public-key pkcs1v15 encryption test";
let ciphertext = vk.encrypt_pkcs1v15(plaintext).unwrap();
let recovered = sk.decrypt_pkcs1v15(&ciphertext).unwrap();
assert_eq!(plaintext.as_slice(), &recovered[..]);
}