Skip to content

Commit

Permalink
test: document domain point determinism
Browse files Browse the repository at this point in the history
  • Loading branch information
piotr-roslaniec committed Feb 14, 2024
1 parent 779a7bb commit 34add7d
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions ferveo/src/dkg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,59 @@ 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 share number which is not a power of 2
let shares_num = 6;
let (dkg, _) = setup_dealt_dkg_with(SECURITY_THRESHOLD, shares_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 shares, we should get the same domain points
/// in two different DKG instances
#[test]
fn test_domain_point_determinism_for_share_number() {
let (dkg1, _) = setup_dealt_dkg_with(SECURITY_THRESHOLD, SHARES_NUM);
let (dkg2, _) = setup_dealt_dkg_with(SECURITY_THRESHOLD, SHARES_NUM);
assert_eq!(dkg1.domain_points(), dkg2.domain_points());

// Now, let's create another DKG instance with a different power-of-2 number of shares
// let shares_num_other = 15;
// let (dkg2, _) = setup_dealt_dkg_with(SECURITY_THRESHOLD, shares_num_other);
// assert_eq!(dkg2.domain.elements().count(), 16);

// The first `shares_num` domain points should be the same
// assert_eq!(dkg1.domain_points()[..shares_num as usize], dkg2.domain_points()[..shares_num as usize]);
// // Up to `dkg1.domain_points().len()` should be the same
// assert_eq!(dkg1.domain_points(), dkg2.domain_points()[..dkg1.domain.elements().count()]);
}

/// For a different number of shares, 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_differet_for_different_domain_size() {
// In the first case, both DKG should have the same domain points despite different
// number of shares. This is because the domain size is the nearest power of 2
// and both 6 and 7 are rounded to 8
let shares_num = 6;
let (dkg1, _) = setup_dealt_dkg_with(SECURITY_THRESHOLD, shares_num);
let (dkg2, _) =
setup_dealt_dkg_with(SECURITY_THRESHOLD, shares_num + 1);
assert_eq!(
dkg1.domain_points()[..shares_num as usize],
dkg2.domain_points()[..shares_num as usize]
);

// In the second case, the domain size is different and so the domain points
// should be different
let shares_num_different = 15;
let (dkg3, _) =
setup_dealt_dkg_with(SECURITY_THRESHOLD, shares_num_different);
assert_ne!(dkg1.domain_points(), dkg3.domain_points());
}
}

/// Test DKG parameters
Expand Down

0 comments on commit 34add7d

Please sign in to comment.