#[cfg(test)] mod tests {
use crate::keygen::{keygen,keygen_string};
use crate::encrypt::{encrypt,encrypt_string};
use crate::decrypt::{decrypt,decrypt_string};
use crate::utils::{Parameters,add_vec};
use ring_lwe::utils::polyadd;
#[test]
pub fn test_basic() {
let seed = None; let message = String::from("hello");
let params = Parameters::default(); let keypair = keygen_string(¶ms,seed);
let pk_string = keypair.get("public").unwrap();
let sk_string = keypair.get("secret").unwrap();
let ciphertext_string = encrypt_string(&pk_string, &message, ¶ms,seed);
let decrypted_message = decrypt_string(&sk_string, &ciphertext_string, ¶ms);
assert_eq!(message, decrypted_message, "test failed: {} != {}", message, decrypted_message);
}
#[test]
pub fn test_hom_add() {
let seed = None; let params = Parameters::default();
let (n, q, f) = (params.n, params.q, ¶ms.f);
let mut m0 = vec![1, 0, 1];
m0.resize(n, 0);
let mut m1 = vec![0, 0, 1];
m1.resize(n, 0);
let mut plaintext_sum = vec![1, 0, 0];
plaintext_sum.resize(n, 0);
let (pk, sk) = keygen(¶ms,seed);
let u = encrypt(&pk.0, &pk.1, &m0, ¶ms, seed);
let v = encrypt(&pk.0, &pk.1, &m1, ¶ms, seed);
let ciphertext_sum = (add_vec(&u.0,&v.0,q,f), polyadd(&u.1,&v.1,q,f));
let mut decrypted_sum = decrypt(&sk, &ciphertext_sum.0, &ciphertext_sum.1, ¶ms);
decrypted_sum.resize(n, 0);
assert_eq!(decrypted_sum, plaintext_sum, "test failed: {:?} != {:?}", decrypted_sum, plaintext_sum);
}
}