From 4a98d904d2f7643707743ef0bbe52250b37619a8 Mon Sep 17 00:00:00 2001 From: Dragos Rotaru Date: Thu, 17 Oct 2024 13:08:57 +0300 Subject: [PATCH] added masking with zero sharing --- iris-mpc-cpu/benches/hnsw.rs | 2 +- iris-mpc-cpu/src/hawkers/galois_store.rs | 2 +- iris-mpc-cpu/src/next_gen_protocol/ng_worker.rs | 15 ++++++++++----- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/iris-mpc-cpu/benches/hnsw.rs b/iris-mpc-cpu/benches/hnsw.rs index a721f7e69..b9c6dde05 100644 --- a/iris-mpc-cpu/benches/hnsw.rs +++ b/iris-mpc-cpu/benches/hnsw.rs @@ -127,7 +127,7 @@ fn bench_gr_primitives(c: &mut Criterion) { let ds_and_ts = gr_replicated_pairwise_distance(&mut player_session, &pairs) .await .unwrap(); - let ds_and_ts = gr_to_rep3(&player_session, ds_and_ts).await.unwrap(); + let ds_and_ts = gr_to_rep3(&mut player_session, ds_and_ts).await.unwrap(); ng_cross_compare( &mut player_session, ds_and_ts[0].clone(), diff --git a/iris-mpc-cpu/src/hawkers/galois_store.rs b/iris-mpc-cpu/src/hawkers/galois_store.rs index b836056b9..85c011353 100644 --- a/iris-mpc-cpu/src/hawkers/galois_store.rs +++ b/iris-mpc-cpu/src/hawkers/galois_store.rs @@ -209,7 +209,7 @@ impl VectorStore for LocalNetAby3NgStoreProtocol { let ds_and_ts = gr_replicated_pairwise_distance(&mut player_session, &pairs) .await .unwrap(); - let ds_and_ts = gr_to_rep3(&player_session, ds_and_ts).await.unwrap(); + let ds_and_ts = gr_to_rep3(&mut player_session, ds_and_ts).await.unwrap(); ng_cross_compare( &mut player_session, ds_and_ts[0].clone(), diff --git a/iris-mpc-cpu/src/next_gen_protocol/ng_worker.rs b/iris-mpc-cpu/src/next_gen_protocol/ng_worker.rs index 3fce9f134..8deb9ec3b 100644 --- a/iris-mpc-cpu/src/next_gen_protocol/ng_worker.rs +++ b/iris-mpc-cpu/src/next_gen_protocol/ng_worker.rs @@ -345,19 +345,24 @@ pub async fn ng_replicated_is_match( Ok(opened.convert()) } +/// Converts additive sharing (from trick_dot output) to a replicated sharing by +/// masking it with a zero sharing pub async fn gr_to_rep3( - session: &Session, + session: &mut Session, items: Vec>, ) -> eyre::Result>> { let network = session.network().clone(); let sid = session.session_id(); let next_party = session.next_identity()?; + let masked_items: Vec<_> = items + .iter() + .map(|x| session.prf_as_mut().gen_zero_share() + x) + .collect(); // sending to the next party - let shares_a = items.clone(); network .send( - NetworkValue::VecRing16(items).to_network(), + NetworkValue::VecRing16(masked_items.clone()).to_network(), &next_party, &sid, ) @@ -374,7 +379,7 @@ pub async fn gr_to_rep3( _ => Err(eyre!("Error in receiving in gr_to_rep3 operation")), } }?; - let res: Vec> = shares_a + let res: Vec> = masked_items .into_iter() .zip(shares_b) .map(|(a, b)| Share::new(a, b)) @@ -699,7 +704,7 @@ mod tests { .await .unwrap(); let opened_x = open_additive(&player_session, x.clone()).await.unwrap(); - let x_rep = gr_to_rep3(&player_session, x).await.unwrap(); + let x_rep = gr_to_rep3(&mut player_session, x).await.unwrap(); let opened_x_rep = open_t_many_16(&player_session, x_rep).await.unwrap(); (opened_x, opened_x_rep) });