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,
epoch: u64,
) -> 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 our_id = netinfo.our_id().clone();
let honey_badger = HoneyBadger::builder(netinfo)
@ -134,15 +138,25 @@ where
pub_key_set,
params,
} = 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 mut dhb = DynamicHoneyBadger::new(secret_key, pub_keys, netinfo, params, era, 0);
let step = match change {
ChangeState::InProgress(Change::NodeChange(new_pub_keys)) => {
dhb.update_key_gen(join_plan.era, new_pub_keys, rng)?
}
ChangeState::InProgress(Change::EncryptionSchedule(..))
| ChangeState::None
| ChangeState::Complete(..) => Step::default(),
let step = match new_pub_keys_opt {
Some(new_pub_keys) => dhb.update_key_gen(era, new_pub_keys, rng)?,
None => Step::default(),
};
Ok((dhb, step))
}

View File

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