From 514221ebb052f6757c49c0c7ed2ff097fb878b34 Mon Sep 17 00:00:00 2001 From: Piotr Roslaniec Date: Wed, 31 Jan 2024 12:18:45 +0100 Subject: [PATCH] refactor(dkg): hide dkg fields in the internal api --- ferveo/src/dkg.rs | 11 ++--------- ferveo/src/lib.rs | 4 ++-- ferveo/src/pvss.rs | 12 +++++++++--- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/ferveo/src/dkg.rs b/ferveo/src/dkg.rs index b6560691..e8afbe30 100644 --- a/ferveo/src/dkg.rs +++ b/ferveo/src/dkg.rs @@ -94,12 +94,9 @@ pub struct PubliclyVerifiableDkg { pub pvss_params: PubliclyVerifiableParams, pub validators: ValidatorsMap, pub vss: PVSSMap, - // TODO: Remove pub? - // TODO: Consider replacing with domain_points entirely pub domain: ark_poly::GeneralEvaluationDomain, pub me: Validator, - // TODO: Remove pub? - pub state: DkgState, + state: DkgState, } impl PubliclyVerifiableDkg { @@ -123,10 +120,7 @@ impl PubliclyVerifiableDkg { let validators: ValidatorsMap = validators .iter() - .enumerate() - .map(|(_validator_index, validator)| { - (validator.address.clone(), validator.clone()) - }) + .map(|validator| (validator.address.clone(), validator.clone())) .collect(); // Make sure that `me` is a known validator @@ -200,7 +194,6 @@ impl PubliclyVerifiableDkg { .into_affine() } - // TODO: Use instead of domain.element /// Return a domain point for the share_index pub fn get_domain_point(&self, share_index: u32) -> Result { let domain_points = self.domain_points(); diff --git a/ferveo/src/lib.rs b/ferveo/src/lib.rs index bba06458..d5f1fb11 100644 --- a/ferveo/src/lib.rs +++ b/ferveo/src/lib.rs @@ -405,7 +405,7 @@ mod test_dkg_full { // dkg.vss.remove(&removed_validator_addr); // TODO: Test whether it makes any difference // Remember to remove one domain point too - let mut domain_points = dkg.domain.elements().collect::>(); + let mut domain_points = dkg.domain_points(); domain_points.pop().unwrap(); // Now, we're going to recover a new share at a random point, @@ -557,7 +557,7 @@ mod test_dkg_full { validator_keypairs.as_slice(), ); - let domain_points = dkg.domain.elements().collect::>(); + let domain_points = dkg.domain_points(); // Each participant prepares an update for each other participant let share_updates = dkg diff --git a/ferveo/src/pvss.rs b/ferveo/src/pvss.rs index 7be4fac2..34695bd3 100644 --- a/ferveo/src/pvss.rs +++ b/ferveo/src/pvss.rs @@ -4,7 +4,7 @@ use ark_ec::{pairing::Pairing, AffineRepr, CurveGroup, Group}; use ark_ff::{Field, Zero}; use ark_poly::{ polynomial::univariate::DensePolynomial, DenseUVPolynomial, - EvaluationDomain, + EvaluationDomain, Polynomial, }; use ferveo_tdec::{ prepare_combine_simple, CiphertextHeader, DecryptionSharePrecomputed, @@ -140,7 +140,13 @@ impl PubliclyVerifiableSS { ); // Evaluations of the polynomial over the domain - let evals = phi.0.evaluate_over_domain_by_ref(dkg.domain); + let evals = dkg + .domain_points() + .iter() + .map(|x| phi.0.evaluate(x)) + .collect::>(); + debug_assert_eq!(evals.len(), dkg.validators.len()); + // commitment to coeffs, F_i let coeffs = fast_multiexp(&phi.0.coeffs, dkg.pvss_params.g); let shares = dkg @@ -150,7 +156,7 @@ impl PubliclyVerifiableSS { // ek_{i}^{eval_i}, i = validator index fast_multiexp( // &evals.evals[i..i] = &evals.evals[i] - &[evals.evals[validator.share_index as usize]], // one share per validator + &[evals[validator.share_index as usize]], // one share per validator validator.public_key.encryption_key.into_group(), )[0] })