Skip to content

Commit

Permalink
refactor(dkg): hide dkg fields in the internal api
Browse files Browse the repository at this point in the history
  • Loading branch information
piotr-roslaniec committed Jan 31, 2024
1 parent 3d98758 commit 514221e
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 14 deletions.
11 changes: 2 additions & 9 deletions ferveo/src/dkg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,9 @@ pub struct PubliclyVerifiableDkg<E: Pairing> {
pub pvss_params: PubliclyVerifiableParams<E>,
pub validators: ValidatorsMap<E>,
pub vss: PVSSMap<E>,
// TODO: Remove pub?
// TODO: Consider replacing with domain_points entirely
pub domain: ark_poly::GeneralEvaluationDomain<E::ScalarField>,
pub me: Validator<E>,
// TODO: Remove pub?
pub state: DkgState<E>,
state: DkgState<E>,
}

impl<E: Pairing> PubliclyVerifiableDkg<E> {
Expand All @@ -123,10 +120,7 @@ impl<E: Pairing> PubliclyVerifiableDkg<E> {

let validators: ValidatorsMap<E> = 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
Expand Down Expand Up @@ -200,7 +194,6 @@ impl<E: Pairing> PubliclyVerifiableDkg<E> {
.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<E::ScalarField> {
let domain_points = self.domain_points();
Expand Down
4 changes: 2 additions & 2 deletions ferveo/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::<Vec<_>>();
let mut domain_points = dkg.domain_points();
domain_points.pop().unwrap();

// Now, we're going to recover a new share at a random point,
Expand Down Expand Up @@ -557,7 +557,7 @@ mod test_dkg_full {
validator_keypairs.as_slice(),
);

let domain_points = dkg.domain.elements().collect::<Vec<_>>();
let domain_points = dkg.domain_points();

// Each participant prepares an update for each other participant
let share_updates = dkg
Expand Down
12 changes: 9 additions & 3 deletions ferveo/src/pvss.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -140,7 +140,13 @@ impl<E: Pairing, T> PubliclyVerifiableSS<E, T> {
);

// 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::<Vec<_>>();
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
Expand All @@ -150,7 +156,7 @@ impl<E: Pairing, T> PubliclyVerifiableSS<E, T> {
// 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]
})
Expand Down

0 comments on commit 514221e

Please sign in to comment.