diff --git a/ferveo/benches/benchmarks/validity_checks.rs b/ferveo/benches/benchmarks/validity_checks.rs index cc7266f7..e6a27b74 100644 --- a/ferveo/benches/benchmarks/validity_checks.rs +++ b/ferveo/benches/benchmarks/validity_checks.rs @@ -32,6 +32,7 @@ fn gen_validators( .map(|i| Validator { address: gen_address(i), public_key: keypairs[i].public_key(), + share_index: i as u32, }) .collect() } diff --git a/ferveo/examples/bench_primitives_size.rs b/ferveo/examples/bench_primitives_size.rs index 79afb8a4..8f993c36 100644 --- a/ferveo/examples/bench_primitives_size.rs +++ b/ferveo/examples/bench_primitives_size.rs @@ -66,6 +66,7 @@ fn gen_validators( .map(|i| Validator { address: gen_address(i), public_key: keypairs[i].public_key(), + share_index: i as u32, }) .collect() } diff --git a/ferveo/src/api.rs b/ferveo/src/api.rs index 3c2295d1..b8c0febf 100644 --- a/ferveo/src/api.rs +++ b/ferveo/src/api.rs @@ -425,6 +425,7 @@ mod test_ferveo_api { .map(|(i, keypair)| Validator { address: gen_address(i), public_key: keypair.public_key(), + share_index: i as u32, }) .collect::>(); diff --git a/ferveo/src/bindings_python.rs b/ferveo/src/bindings_python.rs index f897c8f6..3b2d4ef0 100644 --- a/ferveo/src/bindings_python.rs +++ b/ferveo/src/bindings_python.rs @@ -396,8 +396,9 @@ impl Validator { pub fn new( address: String, public_key: &FerveoPublicKey, + share_index: u32, ) -> PyResult { - let validator = api::Validator::new(address, public_key.0) + let validator = api::Validator::new(address, public_key.0, share_index) .map_err(|err| FerveoPythonError::Other(err.to_string()))?; Ok(Self(validator)) } @@ -756,8 +757,12 @@ mod test_ferveo_python { .iter() .enumerate() .map(|(i, keypair)| { - Validator::new(format!("0x{i:040}"), &keypair.public_key()) - .unwrap() + Validator::new( + format!("0x{i:040}"), + &keypair.public_key(), + i as u32, + ) + .unwrap() }) .collect(); diff --git a/ferveo/src/bindings_wasm.rs b/ferveo/src/bindings_wasm.rs index a1310277..1c0d2a0b 100644 --- a/ferveo/src/bindings_wasm.rs +++ b/ferveo/src/bindings_wasm.rs @@ -421,6 +421,7 @@ impl EthereumAddress { pub struct Validator { address: EthereumAddress, public_key: FerveoPublicKey, + share_index: u32, } #[wasm_bindgen] @@ -429,11 +430,13 @@ impl Validator { pub fn new( address: &EthereumAddress, public_key: &FerveoPublicKey, + share_index: u32, ) -> JsResult { set_panic_hook(); Ok(Self { address: address.clone(), public_key: public_key.clone(), + share_index, }) } @@ -442,6 +445,7 @@ impl Validator { Ok(api::Validator { address: self.address.0.clone(), public_key: self.public_key.0, + share_index: self.share_index, }) } @@ -610,6 +614,7 @@ pub mod test_common { Validator { address: gen_address(i), public_key: keypair.public_key(), + share_index: i as u32, } } } diff --git a/ferveo/src/dkg.rs b/ferveo/src/dkg.rs index e13c4894..ef5d0bf0 100644 --- a/ferveo/src/dkg.rs +++ b/ferveo/src/dkg.rs @@ -375,12 +375,12 @@ mod test_dkg_init { #[test] fn test_dkg_fail_unknown_validator() { let rng = &mut ark_std::test_rng(); - let shares_num = 4; - let known_keypairs = gen_keypairs(shares_num); + let known_keypairs = gen_keypairs(SHARES_NUM); let unknown_keypair = ferveo_common::Keypair::::new(rng); let unknown_validator = Validator:: { - address: gen_address((shares_num + 1) as usize), + address: gen_address((SHARES_NUM + 1) as usize), public_key: unknown_keypair.public_key(), + share_index: SHARES_NUM + 5, // Not in the validator set }; let err = PubliclyVerifiableDkg::::new( &gen_validators(&known_keypairs), @@ -464,6 +464,7 @@ mod test_dealing { let sender = Validator:: { address: gen_address(unknown_validator_i as usize), public_key: ferveo_common::Keypair::::new(rng).public_key(), + share_index: dkg.dkg_params.shares_num + 5, // Not in the validator set }; // check that verification fails assert!(dkg.verify_message(&sender, &pvss).is_err()); diff --git a/ferveo/src/pvss.rs b/ferveo/src/pvss.rs index c8498bb7..193f3c4f 100644 --- a/ferveo/src/pvss.rs +++ b/ferveo/src/pvss.rs @@ -459,7 +459,7 @@ mod test_pvss { use ark_bls12_381::Bls12_381 as EllipticCurve; use ark_ec::AffineRepr; use ark_ff::UniformRand; - use rand::seq::SliceRandom; + use rand::prelude::SliceRandom; use super::*; use crate::{test_common::*, utils::is_sorted, DkgParams}; diff --git a/ferveo/src/test_common.rs b/ferveo/src/test_common.rs index 22d072a2..21739c7e 100644 --- a/ferveo/src/test_common.rs +++ b/ferveo/src/test_common.rs @@ -35,6 +35,7 @@ pub fn gen_validators(keypairs: &[Keypair]) -> Vec> { .map(|(i, keypair)| Validator { address: gen_address(i), public_key: keypair.public_key(), + share_index: i as u32, }) .collect() } @@ -47,8 +48,7 @@ pub fn setup_dkg_for_n_validators( my_validator_index: usize, ) -> TestSetup { let keypairs = gen_keypairs(shares_num); - let mut validators = gen_validators(keypairs.as_slice()); - validators.sort(); + let validators = gen_validators(keypairs.as_slice()); let me = validators[my_validator_index].clone(); let dkg = PubliclyVerifiableDkg::new( &validators, diff --git a/ferveo/src/validator.rs b/ferveo/src/validator.rs index d931ca06..146e62eb 100644 --- a/ferveo/src/validator.rs +++ b/ferveo/src/validator.rs @@ -45,6 +45,8 @@ pub struct Validator { pub address: EthereumAddress, /// The Public key pub public_key: PublicKey, + /// The index of the validator in the given ritual + pub share_index: u32, } impl PartialOrd for Validator { @@ -64,10 +66,12 @@ impl Validator { pub fn new( address: String, public_key: PublicKey, + share_index: u32, ) -> Result { Ok(Self { address: EthereumAddress::from_str(&address)?, public_key, + share_index, }) } }