diff --git a/ferveo/src/dkg.rs b/ferveo/src/dkg.rs index 8e7e7449..dc22df78 100644 --- a/ferveo/src/dkg.rs +++ b/ferveo/src/dkg.rs @@ -355,7 +355,7 @@ pub(crate) mod test_common { my_index: usize, ) -> TestSetup { let keypairs = gen_keypairs(shares_num); - let mut validators = gen_validators(&keypairs); + let mut validators = gen_validators(&keypairs.as_slice()); validators.sort(); let me = validators[my_index].clone(); let dkg = PubliclyVerifiableDkg::new( diff --git a/ferveo/src/lib.rs b/ferveo/src/lib.rs index e0499355..e977ffa6 100644 --- a/ferveo/src/lib.rs +++ b/ferveo/src/lib.rs @@ -214,7 +214,7 @@ mod test_dkg_full { &dkg, aad, &ciphertext.header().unwrap(), - &validator_keypairs, + validator_keypairs.as_slice(), ); let plaintext = tpke::decrypt_with_shared_secret( @@ -310,7 +310,7 @@ mod test_dkg_full { &dkg, aad, &ciphertext.header().unwrap(), - &validator_keypairs, + validator_keypairs.as_slice(), ); izip!( @@ -373,11 +373,9 @@ mod test_dkg_full { &dkg, aad, &ciphertext.header().unwrap(), - &validator_keypairs, + validator_keypairs.as_slice(), ); - // Now, we're going to recover a new share at a random point and check that the shared secret is still the same - // Remove one participant from the contexts and all nested structure let removed_validator_addr = dkg.validators.keys().last().unwrap().clone(); @@ -389,9 +387,11 @@ mod test_dkg_full { let mut domain_points = dkg.domain.elements().collect::>(); domain_points.pop().unwrap(); - // Our random point + // Now, we're going to recover a new share at a random point, + // and check that the shared secret is still the same. + + // Our random point: let x_r = Fr::rand(rng); - // domain_points.push(x_r); // Each participant prepares an update for each other participant let share_updates = remaining_validators @@ -409,16 +409,17 @@ mod test_dkg_full { .collect::>(); // Participants share updates and update their shares - // TODO: Consider moving into the loop - let pvss_aggregated = aggregate(&dkg.vss); // Now, every participant separately: + // TODO: Move this logic outside tests let updated_shares: Vec<_> = remaining_validators .iter() - .map(|(validator_address, validator)| { - // Receives updates from other participants - let updates_for_participant = - share_updates.get(validator_address).unwrap(); + .map(|(_validator_address, validator)| { + // Current participant receives updates from other participants + let updates_for_participant: Vec<_> = share_updates + .values() + .map(|updates| *updates.get(validator.share_index).unwrap()) + .collect(); // Each validator uses their decryption key to update their share let decryption_key = validator_keypairs @@ -427,10 +428,12 @@ mod test_dkg_full { .decryption_key; // Creates updated private key shares + // TODO: Why not using dkg.aggregate()? + let pvss_aggregated = aggregate(&dkg.vss); pvss_aggregated.update_private_key_share_for_recovery( &decryption_key, validator.share_index, - updates_for_participant, + updates_for_participant.as_slice(), ) }) .collect(); @@ -454,6 +457,8 @@ mod test_dkg_full { .iter() .enumerate() .map(|(share_index, validator_keypair)| { + // TODO: Why not using dkg.aggregate()? + let pvss_aggregated = aggregate(&dkg.vss); pvss_aggregated .make_decryption_share_simple( &ciphertext.header().unwrap(),