diff --git a/ferveo-python/examples/exception.py b/ferveo-python/examples/exception.py index 4e16aea9..daa067b7 100644 --- a/ferveo-python/examples/exception.py +++ b/ferveo-python/examples/exception.py @@ -16,7 +16,7 @@ def gen_eth_addr(i: int) -> str: validator_keypairs = [Keypair.random() for _ in range(0, shares_num)] validators = [ - Validator(gen_eth_addr(i), keypair.public_key()) + Validator(gen_eth_addr(i), keypair.public_key(), i) for i, keypair in enumerate(validator_keypairs) ] diff --git a/ferveo-python/examples/server_api_precomputed.py b/ferveo-python/examples/server_api_precomputed.py index 7c433e96..72263405 100644 --- a/ferveo-python/examples/server_api_precomputed.py +++ b/ferveo-python/examples/server_api_precomputed.py @@ -21,7 +21,7 @@ def gen_eth_addr(i: int) -> str: validator_keypairs = [Keypair.random() for _ in range(0, shares_num)] validators = [ - Validator(gen_eth_addr(i), keypair.public_key()) + Validator(gen_eth_addr(i), keypair.public_key(), i) for i, keypair in enumerate(validator_keypairs) ] diff --git a/ferveo-python/examples/server_api_simple.py b/ferveo-python/examples/server_api_simple.py index 4f9e8447..5fd2c8e5 100644 --- a/ferveo-python/examples/server_api_simple.py +++ b/ferveo-python/examples/server_api_simple.py @@ -19,7 +19,7 @@ def gen_eth_addr(i: int) -> str: shares_num = 4 validator_keypairs = [Keypair.random() for _ in range(0, shares_num)] validators = [ - Validator(gen_eth_addr(i), keypair.public_key()) + Validator(gen_eth_addr(i), keypair.public_key(), i) for i, keypair in enumerate(validator_keypairs) ] diff --git a/ferveo-python/test/test_ferveo.py b/ferveo-python/test/test_ferveo.py index 6f00b6df..b3496d3e 100644 --- a/ferveo-python/test/test_ferveo.py +++ b/ferveo-python/test/test_ferveo.py @@ -44,7 +44,7 @@ def scenario_for_variant(variant: FerveoVariant, shares_num, threshold, shares_t tau = 1 validator_keypairs = [Keypair.random() for _ in range(0, shares_num)] validators = [ - Validator(gen_eth_addr(i), keypair.public_key()) + Validator(gen_eth_addr(i), keypair.public_key(), i) for i, keypair in enumerate(validator_keypairs) ] validators.sort(key=lambda v: v.address) diff --git a/ferveo-python/test/test_serialization.py b/ferveo-python/test/test_serialization.py index 57032c6a..6c600771 100644 --- a/ferveo-python/test/test_serialization.py +++ b/ferveo-python/test/test_serialization.py @@ -17,7 +17,7 @@ def gen_eth_addr(i: int) -> str: shares_num = 4 validator_keypairs = [Keypair.random() for _ in range(shares_num)] validators = [ - Validator(gen_eth_addr(i), keypair.public_key()) + Validator(gen_eth_addr(i), keypair.public_key(), i) for i, keypair in enumerate(validator_keypairs) ] validators.sort(key=lambda v: v.address) diff --git a/ferveo-wasm/examples/node/src/main.test.ts b/ferveo-wasm/examples/node/src/main.test.ts index 047beeb5..5814a53d 100644 --- a/ferveo-wasm/examples/node/src/main.test.ts +++ b/ferveo-wasm/examples/node/src/main.test.ts @@ -29,7 +29,7 @@ function setupTest(sharesNum :number, threshold: number) { for (let i = 0; i < sharesNum; i++) { const keypair = Keypair.random(); validatorKeypairs.push(keypair); - const validator = new Validator(genEthAddr(i), keypair.publicKey); + const validator = new Validator(genEthAddr(i), keypair.publicKey, i); validators.push(validator); } 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, }) } }