Files
Sunscreen/sunscreen_runtime/tests/serialization.rs
2022-03-22 14:29:35 -07:00

65 lines
1.8 KiB
Rust

use seal::{CoefficientModulus, SecurityLevel};
use sunscreen::types::bfv::Signed;
use sunscreen_fhe_program::SchemeType;
use sunscreen_runtime::{Ciphertext, Params, Runtime};
#[test]
fn can_roundtrip_ciphertexts_bincode() {
let runtime = Runtime::new(&Params {
lattice_dimension: 8192,
plain_modulus: 1024,
coeff_modulus: CoefficientModulus::bfv_default(8192, SecurityLevel::TC128)
.unwrap()
.iter()
.map(|c| c.value())
.collect(),
security_level: SecurityLevel::TC128,
scheme_type: SchemeType::Bfv,
})
.unwrap();
let (public_key, private_key) = runtime.generate_keys().unwrap();
let expected: i64 = 42;
let c = runtime
.encrypt(Signed::from(expected), &public_key)
.unwrap();
let c: Ciphertext = bincode::deserialize(&bincode::serialize(&c).unwrap()).unwrap();
let v: Signed = runtime.decrypt(&c, &private_key).unwrap();
let actual: i64 = v.into();
assert_eq!(actual, expected);
}
#[test]
fn can_roundtrip_ciphertexts_json() {
let runtime = Runtime::new(&Params {
lattice_dimension: 8192,
plain_modulus: 1024,
coeff_modulus: CoefficientModulus::bfv_default(8192, SecurityLevel::TC128)
.unwrap()
.iter()
.map(|c| c.value())
.collect(),
security_level: SecurityLevel::TC128,
scheme_type: SchemeType::Bfv,
})
.unwrap();
let (public_key, private_key) = runtime.generate_keys().unwrap();
let expected: i64 = 42;
let c = runtime
.encrypt(Signed::from(expected), &public_key)
.unwrap();
let c: Ciphertext = serde_json::from_str(&serde_json::to_string(&c).unwrap()).unwrap();
let v: Signed = runtime.decrypt(&c, &private_key).unwrap();
let actual: i64 = v.into();
assert_eq!(actual, expected);
}