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())
|
.find(|p: &Integer| p.is_odd())
|
||||||
.unwrap()
|
.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