-
Notifications
You must be signed in to change notification settings - Fork 287
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Describe the bug
After a smart_mul, the WoPBS does not yield the expected answer.
To Reproduce
use std::{collections::HashMap};
use tfhe::{
integer::{
gen_keys_radix, wopbs::*,
},
shortint::parameters::{
parameters_wopbs_message_carry::WOPBS_PARAM_MESSAGE_2_CARRY_2_KS_PBS,
PARAM_MESSAGE_2_CARRY_2_KS_PBS,
},
};
fn foo(x: u64, lut_entries: &HashMap<u64, u64>) -> u64 {
lut_entries[&x]
}
fn main() {
let nb_blocks: usize = 4;
// Generate radix keys
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2_KS_PBS, nb_blocks.into());
// Generate key for PBS (without padding)
let wopbs_key = WopbsKey::new_wopbs_key(
&client_key,
&server_key,
&WOPBS_PARAM_MESSAGE_2_CARRY_2_KS_PBS,
);
// Create ciphertexts
let mut ct = client_key.encrypt(2_u64);
let mut ct_2 = client_key.encrypt(4_u64);
// Generate LUTs for WoPBS
let mut lut_1_map : HashMap<u64, u64> = HashMap::new();
let mut lut_2_map : HashMap<u64, u64> = HashMap::new();
for i in 0..256 {
lut_1_map.insert(i, 2*i % 256);
lut_2_map.insert(i, 3*i % 256);
}
let lut_1 = wopbs_key.generate_lut_radix(&ct, |x: u64| foo(x, &lut_1_map));
let lut_2 = wopbs_key.generate_lut_radix(&ct, |x: u64| foo(x, &lut_2_map));
// Multiply input ciphertexts: 2 * 4 = 8
ct = server_key.smart_mul(&mut ct, &mut ct_2);
// Apply LUT #1
ct = wopbs_key.keyswitch_to_wopbs_params(&server_key, &ct);
let lut_1_res = wopbs_key.wopbs(&ct, &lut_1);
let lut_1_res = wopbs_key.keyswitch_to_pbs_params(&lut_1_res);
let test: u64 = client_key.decrypt(&lut_1_res);
println!("Lut #1 result: {:?}", &test);
println!("Expected result: {:?}", &lut_1_map[&8]);
// Apply LUT #2
let lut_2_res = wopbs_key.wopbs(&ct, &lut_2);
let lut_2_res = wopbs_key.keyswitch_to_pbs_params(&lut_2_res);
let test: u64 = client_key.decrypt(&lut_2_res);
println!("Lut #2 result: {:?}", &test);
println!("Expected result: {:?}", &lut_2_map[&8]);
}Expected behaviour
For the above code, the decrypted results do not match the expected results.
Configuration(please complete the following information):
- OS: Ubuntu 22.04
cc: @jimouris
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
