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]
})