Validate JoinPlan.

This commit is contained in:
Andreas Fackler 2019-08-27 11:13:06 +02:00 committed by Andreas Fackler
parent 0e50c2f473
commit ab3da7cf64
2 changed files with 24 additions and 7 deletions

View File

@ -100,6 +100,10 @@ where
era: u64, era: u64,
epoch: u64, epoch: u64,
) -> Self { ) -> Self {
assert!(
netinfo.all_ids().eq(pub_keys.keys()),
"Every validator must have a public key."
);
let max_future_epochs = params.max_future_epochs; let max_future_epochs = params.max_future_epochs;
let our_id = netinfo.our_id().clone(); let our_id = netinfo.our_id().clone();
let honey_badger = HoneyBadger::builder(netinfo) let honey_badger = HoneyBadger::builder(netinfo)
@ -134,15 +138,25 @@ where
pub_key_set, pub_key_set,
params, params,
} = join_plan; } = join_plan;
let new_pub_keys_opt = match change {
ChangeState::InProgress(Change::EncryptionSchedule(..)) | ChangeState::None => None,
ChangeState::InProgress(Change::NodeChange(pks)) => Some(pks.clone()),
ChangeState::Complete(change) => {
let valid = match change {
Change::EncryptionSchedule(schedule) => schedule == params.encryption_schedule,
Change::NodeChange(new_pub_keys) => new_pub_keys == pub_keys,
};
if !valid {
return Err(Error::InvalidJoinPlan);
}
None
}
};
let netinfo = Arc::new(NetworkInfo::new(our_id, None, pub_key_set, pub_keys.keys())); let netinfo = Arc::new(NetworkInfo::new(our_id, None, pub_key_set, pub_keys.keys()));
let mut dhb = DynamicHoneyBadger::new(secret_key, pub_keys, netinfo, params, era, 0); let mut dhb = DynamicHoneyBadger::new(secret_key, pub_keys, netinfo, params, era, 0);
let step = match change { let step = match new_pub_keys_opt {
ChangeState::InProgress(Change::NodeChange(new_pub_keys)) => { Some(new_pub_keys) => dhb.update_key_gen(era, new_pub_keys, rng)?,
dhb.update_key_gen(join_plan.era, new_pub_keys, rng)? None => Step::default(),
}
ChangeState::InProgress(Change::EncryptionSchedule(..))
| ChangeState::None
| ChangeState::Complete(..) => Step::default(),
}; };
Ok((dhb, step)) Ok((dhb, step))
} }

View File

@ -22,6 +22,9 @@ pub enum Error {
/// Failed to handle a `SyncKeyGen` message. /// Failed to handle a `SyncKeyGen` message.
#[fail(display = "Error handling SyncKeyGen message: {}", _0)] #[fail(display = "Error handling SyncKeyGen message: {}", _0)]
SyncKeyGen(sync_key_gen::Error), SyncKeyGen(sync_key_gen::Error),
/// The join plan contains contradictory information.
#[fail(display = "Invalid Join Plan")]
InvalidJoinPlan,
/// Unknown sender /// Unknown sender
#[fail(display = "Unknown sender")] #[fail(display = "Unknown sender")]
UnknownSender, UnknownSender,