From 0117a87d8fd753b60d55570c6587a81d5cfd6051 Mon Sep 17 00:00:00 2001
From: Piotr Roslaniec
Date: Mon, 12 Feb 2024 15:17:32 +0100
Subject: [PATCH 1/2] feature: introduce refreshing api in ferveo
---
ferveo/src/api.rs | 1 +
1 file changed, 1 insertion(+)
diff --git a/ferveo/src/api.rs b/ferveo/src/api.rs
index dd8e40bd..c00acbc1 100644
--- a/ferveo/src/api.rs
+++ b/ferveo/src/api.rs
@@ -640,6 +640,7 @@ impl PrivateKeyShare {
mod test_ferveo_api {
use std::collections::HashMap;
+ use ark_std::iterable::Iterable;
use ferveo_tdec::SecretBox;
use itertools::{izip, Itertools};
use rand::{
From 9aca6aeeef0f88b5d9968829944caf6aec068398 Mon Sep 17 00:00:00 2001
From: Piotr Roslaniec
Date: Wed, 14 Feb 2024 13:52:07 +0100
Subject: [PATCH 2/2] test: document domain point determinism
---
ferveo/src/dkg.rs | 69 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/ferveo/src/dkg.rs b/ferveo/src/dkg.rs
index 1ee6ec6e..d6d02014 100644
--- a/ferveo/src/dkg.rs
+++ b/ferveo/src/dkg.rs
@@ -752,6 +752,75 @@ mod test_aggregation {
let sender = dkg.me.clone();
assert!(dkg.verify_message(&sender, &aggregate).is_err());
}
+
+ /// Size of the domain should be equal a power of 2
+ #[test]
+ fn test_domain_points_size_is_power_of_2() {
+ // Using a validators number which is not a power of 2
+ let validators_num = 6;
+ let (dkg, _) = setup_dealt_dkg_with_n_validators(
+ validators_num,
+ validators_num,
+ validators_num,
+ );
+ // This should cause the domain to be of size that is a power of 2
+ assert_eq!(dkg.domain.elements().count(), 8);
+ }
+
+ /// For the same number of validators, we should get the same domain points
+ /// in two different DKG instances
+ #[test]
+ fn test_domain_point_determinism_for_share_number() {
+ let validators_num = 6;
+ let (dkg1, _) = setup_dealt_dkg_with_n_validators(
+ validators_num,
+ validators_num,
+ validators_num,
+ );
+ let (dkg2, _) = setup_dealt_dkg_with_n_validators(
+ validators_num,
+ validators_num,
+ validators_num,
+ );
+ assert_eq!(dkg1.domain_points(), dkg2.domain_points());
+ }
+
+ /// For a different number of validators, two DKG instances should have different domain points
+ /// This is because the number of share determines the generator of the domain
+ #[test]
+ fn test_domain_points_different_for_different_domain_size() {
+ // In the first case, both DKG should have the same domain points despite different
+ // number of validators. This is because the domain size is the nearest power of 2
+ // and both 6 and 7 are rounded to 8
+ let validators_num = 6;
+ let (dkg1, _) = setup_dealt_dkg_with_n_validators(
+ validators_num,
+ validators_num,
+ validators_num,
+ );
+ let (dkg2, _) = setup_dealt_dkg_with_n_validators(
+ validators_num + 1,
+ validators_num + 1,
+ validators_num + 1,
+ );
+ assert_eq!(dkg1.domain.elements().count(), 8);
+ assert_eq!(dkg2.domain.elements().count(), 8);
+ assert_eq!(
+ dkg1.domain_points()[..validators_num as usize],
+ dkg2.domain_points()[..validators_num as usize]
+ );
+
+ // In the second case, the domain size is different and so the domain points
+ // should be different
+ let validators_num_different = 15;
+ let (dkg3, _) = setup_dealt_dkg_with_n_validators(
+ validators_num_different,
+ validators_num_different,
+ validators_num_different,
+ );
+ assert_eq!(dkg3.domain.elements().count(), 16);
+ assert_ne!(dkg1.domain_points(), dkg3.domain_points());
+ }
}
/// Test DKG parameters