fn get_party_merger_keys()

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(),
                ))
            }
        }
    }