diff --git a/src/state_machine/signer/mod.rs b/src/state_machine/signer/mod.rs index 96fcb87..0d55f9a 100644 --- a/src/state_machine/signer/mod.rs +++ b/src/state_machine/signer/mod.rs @@ -1075,23 +1075,22 @@ impl Signer { return Ok(vec![]); } - self.dkg_private_shares - .insert(src_signer_id, dkg_private_shares.clone()); - // make a HashSet of our key_ids so we can quickly query them let key_ids: HashSet = self.signer.get_key_ids().into_iter().collect(); let shared_key = self.kex_private_key * kex_public_key; let shared_secret = make_shared_secret(&self.kex_private_key, &kex_public_key); - + let mut verified_shares = Vec::with_capacity(dkg_private_shares.shares.len()); for (src_id, shares) in &dkg_private_shares.shares { let mut decrypted_shares = HashMap::new(); + let mut encrypted_shares = HashMap::new(); for (dst_key_id, bytes) in shares { if key_ids.contains(dst_key_id) { match decrypt(&shared_secret, bytes) { Ok(plain) => match Scalar::try_from(&plain[..]) { Ok(s) => { decrypted_shares.insert(*dst_key_id, s); + encrypted_shares.insert(*dst_key_id, bytes.clone()); } Err(e) => { warn!("Failed to parse Scalar for dkg private share from src_id {src_id} to dst_id {dst_key_id}: {e:?}"); @@ -1114,7 +1113,16 @@ impl Signer { self.decrypted_shares.insert(*src_id, decrypted_shares); self.decryption_keys .insert(*src_id, (dkg_private_shares.signer_id, shared_key)); + verified_shares.push((*src_id, encrypted_shares)); } + self.dkg_private_shares.insert( + src_signer_id, + DkgPrivateShares { + dkg_id: dkg_private_shares.dkg_id, + signer_id: dkg_private_shares.signer_id, + shares: verified_shares, + }, + ); debug!( "received DkgPrivateShares from signer {} {}/{}", dkg_private_shares.signer_id,