in protocol/src/suid_create/merger.rs [235:286]
fn get_party_merger_keys(&self) -> Result<TPayload, ProtocolError> {
match self.plaintext.clone().read() {
Ok(pdata) => {
let t = timer::Timer::new_silent("party merger keys");
let mut offset = {
let lengths = pdata.iter().map(|v| v.len()).collect::<Vec<usize>>();
compute_prefix_sum(&lengths)
.iter()
.map(|&o| ByteBuffer {
buffer: (o as u64).to_le_bytes().to_vec(),
})
.collect::<Vec<_>>()
};
let (c1_flat, c2_flat) = {
let d_f = {
let x = pdata.clone().into_iter().flatten().collect::<Vec<_>>();
self.ec_cipher.hash(x.as_slice())
};
elgamal_encrypt(d_f, &self.keypair_m.1)
};
let offset_len = offset.len();
let mut buf = self.ec_cipher.to_bytes(&c1_flat);
buf.extend(self.ec_cipher.to_bytes(&c2_flat));
let data_len = buf.len();
buf.append(&mut offset);
buf.push(ByteBuffer {
buffer: (data_len as u64).to_le_bytes().to_vec(),
});
buf.push(ByteBuffer {
buffer: (offset_len as u64).to_le_bytes().to_vec(),
});
t.qps("encryption", c1_flat.len());
Ok(buf)
}
_ => {
error!("Unable to encrypt data for party");
Err(ProtocolError::ErrorEncryption(
"unable to encrypt data for party".to_string(),
))
}
}
}