From 921d6f37d5a1c0ca28f38f053e1b0657a9903efc Mon Sep 17 00:00:00 2001 From: th4s Date: Thu, 12 Dec 2024 12:00:20 +0100 Subject: [PATCH 1/3] fix(garble): do not hang when output is used as input --- crates/mpz-garble-core/src/view.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/mpz-garble-core/src/view.rs b/crates/mpz-garble-core/src/view.rs index e1683951..f6bfd931 100644 --- a/crates/mpz-garble-core/src/view.rs +++ b/crates/mpz-garble-core/src/view.rs @@ -207,6 +207,10 @@ impl View { self.output.preprocessed |= ⦥ self.output.complete |= ⦥ + + // If we want to use the output as input for another circuit + self.input.complete |= ⦥ + // If marked for decoding, transfer decode info. self.flush.decode_info |= range.intersection(&self.decode.all) - &self.decode.decode_info; // If decoding info transferred, prove MACs. From e0ee8d491f5c42a5ef0d8a23ad9399f1c396fce1 Mon Sep 17 00:00:00 2001 From: th4s Date: Fri, 13 Dec 2024 10:46:24 +0100 Subject: [PATCH 2/3] fix(garble): fix hanging in preprocessing --- crates/mpz-garble/src/protocol/semihonest/evaluator.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/mpz-garble/src/protocol/semihonest/evaluator.rs b/crates/mpz-garble/src/protocol/semihonest/evaluator.rs index 92da484a..dcea1246 100644 --- a/crates/mpz-garble/src/protocol/semihonest/evaluator.rs +++ b/crates/mpz-garble/src/protocol/semihonest/evaluator.rs @@ -57,6 +57,7 @@ impl Evaluator { idx_outputs |= output.to_range(); true } else { + idx_outputs |= output.to_range(); false } }) From edf509bb8bb96838ba1e1b0ca01bf2c8b68873be Mon Sep 17 00:00:00 2001 From: th4s Date: Fri, 13 Dec 2024 11:10:43 +0100 Subject: [PATCH 3/3] fix: adapt `is_committed` to consider complete outputs --- crates/mpz-garble-core/src/view.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/crates/mpz-garble-core/src/view.rs b/crates/mpz-garble-core/src/view.rs index f6bfd931..6893e5ca 100644 --- a/crates/mpz-garble-core/src/view.rs +++ b/crates/mpz-garble-core/src/view.rs @@ -207,10 +207,6 @@ impl View { self.output.preprocessed |= ⦥ self.output.complete |= ⦥ - - // If we want to use the output as input for another circuit - self.input.complete |= ⦥ - // If marked for decoding, transfer decode info. self.flush.decode_info |= range.intersection(&self.decode.all) - &self.decode.decode_info; // If decoding info transferred, prove MACs. @@ -220,7 +216,7 @@ impl View { } pub(crate) fn is_committed(&self, range: Range) -> bool { - range.is_subset(&self.input.complete) + range.is_subset(&self.input.complete) || range.is_subset(&self.output.complete) } pub(crate) fn commit(&mut self, range: Range) -> Result<()> {