unit tests
This commit is contained in:
parent
38ed69808d
commit
09db1579eb
75
src/dghv.rs
75
src/dghv.rs
@ -37,3 +37,78 @@ pub fn generate_secret_key(eta: u32) -> Integer {
|
||||
.find(|p: &Integer| p.is_odd())
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_secret_key_generation_properties() {
|
||||
let eta = 64;
|
||||
let key = generate_secret_key(eta);
|
||||
assert!(key.significant_bits() <= eta);
|
||||
assert!(key.significant_bits() >= eta - 1);
|
||||
assert!(key.is_odd());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_encrypt_decrypt_bit() {
|
||||
let eta = 64;
|
||||
let key = generate_secret_key(eta);
|
||||
|
||||
let bit = 0;
|
||||
let ciphertext = encrypt_bit(bit, &key);
|
||||
let decrypted = decrypt_bit(&ciphertext, &key);
|
||||
assert_eq!(decrypted, bit);
|
||||
|
||||
let bit = 1;
|
||||
let ciphertext = encrypt_bit(bit, &key);
|
||||
let decrypted = decrypt_bit(&ciphertext, &key);
|
||||
assert_eq!(decrypted, bit);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_multiple_encryptions_are_different() {
|
||||
let eta = 64;
|
||||
let key = generate_secret_key(eta);
|
||||
|
||||
let bit = 1;
|
||||
let c1 = encrypt_bit(bit, &key);
|
||||
let c2 = encrypt_bit(bit, &key);
|
||||
|
||||
assert_ne!(c1, c2);
|
||||
assert_eq!(decrypt_bit(&c1, &key), bit);
|
||||
assert_eq!(decrypt_bit(&c2, &key), bit);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_is_homomorphic() {
|
||||
let eta = 1024;
|
||||
let key = generate_secret_key(eta);
|
||||
|
||||
for &(b1, b2) in &[(0, 0), (0, 1), (1, 0), (1, 1)] {
|
||||
let c1 = encrypt_bit(b1, &key);
|
||||
let c2 = encrypt_bit(b2, &key);
|
||||
|
||||
let sum: Integer = c1.clone() + &c2;
|
||||
let product: Integer = c1 * c2;
|
||||
|
||||
let decrypted_sum = decrypt_bit(&sum, &key);
|
||||
let decrypted_product = decrypt_bit(&product, &key);
|
||||
|
||||
let expected_xor = b1 ^ b2;
|
||||
let expected_and = b1 & b2;
|
||||
|
||||
assert_eq!(
|
||||
decrypted_sum, expected_xor,
|
||||
"Failed XOR test for inputs: {}, {}",
|
||||
b1, b2
|
||||
);
|
||||
assert_eq!(
|
||||
decrypted_product, expected_and,
|
||||
"Failed AND test for inputs: {}, {}",
|
||||
b1, b2
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user