From 8bf09baa551213b393227332c37ffdd59cad6cb5 Mon Sep 17 00:00:00 2001 From: Charles Gouert Date: Thu, 7 Sep 2023 18:28:07 +0000 Subject: [PATCH] Update LBB Co-authored-by: Dimitris Mouris --- src/circuit.rs | 4 ++-- src/gates.rs | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/circuit.rs b/src/circuit.rs index 1c2f609..4786cf2 100644 --- a/src/circuit.rs +++ b/src/circuit.rs @@ -621,7 +621,7 @@ impl<'a> EvalCircuit for LutCircuit<'a> { { // Evaluate all the gates in the level in parallel gates.par_iter_mut().for_each(|gate| { - let input_values: Vec = gate + let mut input_values: Vec = gate .get_input_wires() .iter() .map(|input| { @@ -637,7 +637,7 @@ impl<'a> EvalCircuit for LutCircuit<'a> { .collect(); let output_value = { if gate.get_gate_type() == GateType::Lut { - gate.evaluate_encrypted_lut(&self.server_key, &input_values, cycle) + gate.evaluate_encrypted_lut(&self.server_key, &mut input_values, cycle) } else { gate.evaluate_encrypted_dff(&input_values, cycle) } diff --git a/src/gates.rs b/src/gates.rs index 0afaa80..dcd5fce 100644 --- a/src/gates.rs +++ b/src/gates.rs @@ -278,7 +278,7 @@ impl Gate { pub fn evaluate_encrypted_lut( &mut self, server_key: &ServerKeyShortInt, - input_values: &Vec, + input_values: &mut Vec, cycle: usize, ) -> CiphertextBase { if let Some(encrypted_lut_output) = self.encrypted_lut_output.clone() { @@ -744,13 +744,14 @@ fn eval_luts(x: u64, lut_table: &Vec) -> u64 { pub fn lut( sks: &ServerKeyShortInt, lut_const: &Vec, - ctxts: &Vec, + ctxts: &mut Vec, ) -> CiphertextBase { // Σ ctxts[i] * 2^i + let ctxts_len = (ctxts.len() - 1) as u8; let ct_sum = ctxts - .iter() + .iter_mut() .enumerate() - .map(|(i, ct)| sks.scalar_mul(ct, 1 << (ctxts.len() - 1 - i))) + .map(|(i, ct)| sks.smart_scalar_left_shift(ct, ctxts_len - i as u8)) .fold(sks.create_trivial(0), |acc, ct| sks.add(&acc, &ct)); // Generate LUT entries from lut_const