in protocol/src/cross_psi/company.rs [333:377]
fn reveal<T: AsRef<Path>>(&self, path: T) {
if let (Ok(indices), Ok(additive_mask), Ok(mut self_shares)) = (
self.self_intersection_indices.clone().read(),
self.additive_mask.clone().read(),
self.self_shares.clone().write(),
) {
let max_val: BigUint = BigUint::one() << 64;
let mut filtered_shares: Vec<BigUint> = Vec::with_capacity(indices.len());
for index in indices.iter() {
filtered_shares.push((self_shares[&0][*index]).clone());
}
self_shares.remove(&0);
let company_shares = filtered_shares
.clone()
.into_par_iter()
.map(|item| {
let t = (item % &max_val).to_u64_digits();
assert_eq!(t.len(), 1);
t[0]
})
.collect::<Vec<u64>>();
let partner_shares = additive_mask
.clone()
.into_par_iter()
.map(|item| {
let t = (item % &max_val).to_u64_digits();
assert_eq!(t.len(), 1);
t[0]
})
.collect::<Vec<u64>>();
let mut out: Vec<Vec<u64>> =
Vec::with_capacity(self.get_self_num_features() + self.get_partner_num_features());
out.push(partner_shares);
out.push(company_shares);
info!("revealing columns to output file");
common::files::write_u64cols_to_file(&mut out, path).unwrap();
} else {
panic!("Unable to reveal");
}
}