use themis::keygen::{gen_ec_key_pair, gen_rsa_key_pair};
use themis::secure_message::{SecureMessage, SecureSign, SecureVerify};
use themis::ErrorKind;
#[test]
fn mode_encrypt_decrypt() {
let secure = SecureMessage::new(gen_rsa_key_pair());
let plaintext = b"test message please ignore";
let encrypted = secure.encrypt(&plaintext).expect("encryption");
let recovered_message = secure.decrypt(&encrypted).expect("decryption");
assert_eq!(recovered_message, plaintext);
}
#[test]
fn mode_sign_verify() {
let (private, public) = gen_rsa_key_pair().split();
let sign = SecureSign::new(private);
let verify = SecureVerify::new(public);
let plaintext = b"test message please ignore";
let signed_message = sign.sign(&plaintext).unwrap();
let recovered_message = verify.verify(&signed_message).unwrap();
assert_eq!(recovered_message, plaintext);
}
#[test]
fn invalid_key() {
let secure1 = SecureMessage::new(gen_ec_key_pair());
let secure2 = SecureMessage::new(gen_ec_key_pair());
let plaintext = b"test message please ignore";
let encrypted = secure1.encrypt(&plaintext).expect("encryption");
let error = secure2.decrypt(&encrypted).expect_err("decryption error");
assert_eq!(error.kind(), ErrorKind::Fail);
}
#[test]
fn corrupted_data() {
let secure = SecureMessage::new(gen_rsa_key_pair());
let plaintext = b"test message please ignore";
let mut encrypted = secure.encrypt(&plaintext).expect("encryption");
encrypted[5] = !encrypted[5];
let error = secure.decrypt(&encrypted).expect_err("decryption error");
assert_eq!(error.kind(), ErrorKind::InvalidParameter);
}