fix signing root encoding
This commit is contained in:
parent
0ced9e8f55
commit
e30be6871b
23
src/main.rs
23
src/main.rs
|
@ -1,6 +1,6 @@
|
||||||
use eyre::Result;
|
use eyre::Result;
|
||||||
use ssz_rs::prelude::*;
|
use ssz_rs::prelude::*;
|
||||||
use blst::min_pk::*;
|
use blst::{min_pk::*, BLST_ERROR};
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
|
@ -110,7 +110,7 @@ impl LightClient {
|
||||||
for byte in bytes {
|
for byte in bytes {
|
||||||
let byte_str = format!("{:08b}", byte);
|
let byte_str = format!("{:08b}", byte);
|
||||||
byte_str.chars().for_each(|b| if b == '1' { count += 1 });
|
byte_str.chars().for_each(|b| if b == '1' { count += 1 });
|
||||||
bits.push_str(&byte_str);
|
bits.push_str(&byte_str.chars().rev().collect::<String>());
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut pks: Vec<PublicKey> = Vec::new();
|
let mut pks: Vec<PublicKey> = Vec::new();
|
||||||
|
@ -132,21 +132,17 @@ impl LightClient {
|
||||||
|
|
||||||
let header_root = bytes_to_bytes32(update.attested_header.hash_tree_root()?.as_bytes());
|
let header_root = bytes_to_bytes32(update.attested_header.hash_tree_root()?.as_bytes());
|
||||||
let signing_root = compute_committee_sign_root(header_root)?;
|
let signing_root = compute_committee_sign_root(header_root)?;
|
||||||
println!("signing root: {}", signing_root);
|
|
||||||
|
|
||||||
// println!("{:?}", pks);
|
|
||||||
let aggregate = AggregatePublicKey::aggregate(&pks[..], true).unwrap().to_public_key();
|
|
||||||
let aggregate_str = hex::encode(aggregate.compress());
|
|
||||||
println!("aggregate key: {}", aggregate_str);
|
|
||||||
|
|
||||||
let sig_bytes = hex::decode(update.sync_aggregate.sync_committee_signature.strip_prefix("0x").unwrap())?;
|
let sig_bytes = hex::decode(update.sync_aggregate.sync_committee_signature.strip_prefix("0x").unwrap())?;
|
||||||
let sig = Signature::from_bytes(&sig_bytes).unwrap();
|
let sig = Signature::from_bytes(&sig_bytes).unwrap();
|
||||||
let dst: &[u8] = b"BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_";
|
let dst: &[u8] = b"BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_";
|
||||||
// let is_valid_sig = sig.verify(false, signing_root.as_bytes(), dst, &[], &aggregate, true);
|
let is_valid_sig = sig.fast_aggregate_verify(true, signing_root.as_bytes(), dst, &pks) == BLST_ERROR::BLST_SUCCESS;
|
||||||
let is_valid_sig = sig.fast_aggregate_verify(true, signing_root.as_bytes(), dst, &pks);
|
println!("committee signature valid: {}", is_valid_sig);
|
||||||
|
|
||||||
|
if !is_valid_sig {
|
||||||
|
return Err(eyre::eyre!("Invalid Update"));
|
||||||
|
}
|
||||||
|
|
||||||
println!("{:?}", is_valid_sig);
|
|
||||||
println!("{}", update.attested_header.slot);
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -186,7 +182,7 @@ fn bytes_to_bytes32(bytes: &[u8]) -> [u8; 32] {
|
||||||
fn compute_committee_sign_root(header: Bytes32) -> Result<Node> {
|
fn compute_committee_sign_root(header: Bytes32) -> Result<Node> {
|
||||||
let genesis_root = hex::decode("043db0d9a83813551ee2f33450d23797757d430911a9320530ad8a0eabc43efb")?.to_vec().try_into().unwrap();
|
let genesis_root = hex::decode("043db0d9a83813551ee2f33450d23797757d430911a9320530ad8a0eabc43efb")?.to_vec().try_into().unwrap();
|
||||||
let domain_type = &hex::decode("07000000")?[..];
|
let domain_type = &hex::decode("07000000")?[..];
|
||||||
let fork_version = Vector::from_iter(hex::decode("02000000").unwrap());
|
let fork_version = Vector::from_iter(hex::decode("02001020").unwrap());
|
||||||
let domain = compute_domain(domain_type, fork_version, genesis_root)?;
|
let domain = compute_domain(domain_type, fork_version, genesis_root)?;
|
||||||
compute_signing_root(header, domain)
|
compute_signing_root(header, domain)
|
||||||
}
|
}
|
||||||
|
@ -201,7 +197,6 @@ fn compute_domain(domain_type: &[u8], fork_version: Vector<u8, 4>, genesis_root:
|
||||||
let start = domain_type;
|
let start = domain_type;
|
||||||
let end = &fork_data_root.as_bytes()[..28];
|
let end = &fork_data_root.as_bytes()[..28];
|
||||||
let d = [start, end].concat();
|
let d = [start, end].concat();
|
||||||
println!("{:?}", d);
|
|
||||||
Ok(d.to_vec().try_into().unwrap())
|
Ok(d.to_vec().try_into().unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue