From 21d75f18536aec031dc772a86cf57bae20f8abd2 Mon Sep 17 00:00:00 2001 From: Kirk Baird Date: Mon, 18 Feb 2019 12:06:47 +1100 Subject: [PATCH] Use verify_proof_of_possession --- eth2/types/src/beacon_state.rs | 19 +++++++++++++------ eth2/utils/bls/src/lib.rs | 10 ++++++++-- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/eth2/types/src/beacon_state.rs b/eth2/types/src/beacon_state.rs index 18b5fc989..2bdf85fcc 100644 --- a/eth2/types/src/beacon_state.rs +++ b/eth2/types/src/beacon_state.rs @@ -4,6 +4,7 @@ use crate::{ Bitfield, ChainSpec, Crosslink, Deposit, DepositInput, Epoch, Eth1Data, Eth1DataVote, Fork, Hash256, PendingAttestation, PublicKey, Signature, Slot, Validator, }; +use bls::verify_proof_of_possession; use honey_badger_split::SplitExt; use log::trace; use rand::RngCore; @@ -389,6 +390,7 @@ impl BeaconState { &self, slot: Slot, registry_change: bool, + spec: &ChainSpec, ) -> Result, u64)>, BeaconStateError> { let epoch = slot.epoch(spec.epoch_length); @@ -668,12 +670,17 @@ impl BeaconState { withdrawal_credentials: Hash256, spec: &ChainSpec, ) -> Result { - if !self.validate_proof_of_possession( - pubkey.clone(), - proof_of_possession, - withdrawal_credentials, - &spec, - ) { + // TODO: update proof of possession to function written above ( + // requires bls::create_proof_of_possession to be updated + // https://github.com/sigp/lighthouse/issues/239 + if !verify_proof_of_possession(&proof_of_possession, &pubkey) + //if !self.validate_proof_of_possession( + // pubkey.clone(), + // proof_of_possession, + // withdrawal_credentials, + // &spec, + // ) + { return Err(()); } diff --git a/eth2/utils/bls/src/lib.rs b/eth2/utils/bls/src/lib.rs index 074929b32..4d0864a90 100644 --- a/eth2/utils/bls/src/lib.rs +++ b/eth2/utils/bls/src/lib.rs @@ -16,7 +16,7 @@ pub use crate::signature::Signature; pub use self::bls_aggregates::AggregatePublicKey; -pub const BLS_AGG_SIG_BYTE_SIZE: usize = 97; +pub const BLS_AGG_SIG_BYTE_SIZE: usize = 96; use hashing::hash; use ssz::ssz_encode; @@ -29,7 +29,14 @@ fn extend_if_needed(hash: &mut Vec) { /// For some signature and public key, ensure that the signature message was the public key and it /// was signed by the secret key that corresponds to that public key. +pub fn verify_proof_of_possession(sig: &Signature, pubkey: &PublicKey) -> bool { + // TODO: replace this function with state.validate_proof_of_possession + // https://github.com/sigp/lighthouse/issues/239 + sig.verify(&ssz_encode(pubkey), 0, &pubkey) +} +// TODO: Update this method +// https://github.com/sigp/lighthouse/issues/239 pub fn create_proof_of_possession(keypair: &Keypair) -> Signature { Signature::new(&ssz_encode(&keypair.pk), 0, &keypair.sk) } @@ -40,6 +47,5 @@ pub fn bls_verify_aggregate( signature: &AggregateSignature, domain: u64, ) -> bool { - // TODO: add domain signature.verify(message, domain, pubkey) }