From 5cb433151d5ff52afe3cbfa95dfb73f24b02cac9 Mon Sep 17 00:00:00 2001 From: porcuquine Date: Tue, 2 Jun 2020 23:58:26 -0700 Subject: [PATCH] Use porep_id to create drg_seed. --- .../src/bin/benchy/prodbench.rs | 2 ++ filecoin-proofs/Cargo.toml | 1 + filecoin-proofs/src/api/mod.rs | 1 + filecoin-proofs/src/api/seal.rs | 6 ++++ filecoin-proofs/src/bin/paramcache.rs | 1 + filecoin-proofs/src/bin/phase2.rs | 1 + filecoin-proofs/src/caches.rs | 2 ++ filecoin-proofs/src/parameters.rs | 28 +++++++++++++++---- filecoin-proofs/src/types/porep_config.rs | 1 + 9 files changed, 38 insertions(+), 5 deletions(-) diff --git a/fil-proofs-tooling/src/bin/benchy/prodbench.rs b/fil-proofs-tooling/src/bin/benchy/prodbench.rs index 4f69484c7..ddb39be80 100644 --- a/fil-proofs-tooling/src/bin/benchy/prodbench.rs +++ b/fil-proofs-tooling/src/bin/benchy/prodbench.rs @@ -330,9 +330,11 @@ fn cache_porep_params(porep_config: PoRepConfig) { use filecoin_proofs::parameters::public_params; use storage_proofs::porep::stacked::{StackedCompound, StackedDrg}; + let dummy_porep_id = [0; 32]; let public_params = public_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + dummy_porep_id, ) .unwrap(); diff --git a/filecoin-proofs/Cargo.toml b/filecoin-proofs/Cargo.toml index 54cc1c9d7..6b6121754 100644 --- a/filecoin-proofs/Cargo.toml +++ b/filecoin-proofs/Cargo.toml @@ -44,6 +44,7 @@ merkletree = "0.20.0" bincode = "1.1.2" anyhow = "1.0.23" rand_xorshift = "0.2.0" +sha2 = { version = "0.8.3", package = "sha2ni" } typenum = "1.11.2" bitintr = "0.3.0" gperftools = { version = "0.2", optional = true } diff --git a/filecoin-proofs/src/api/mod.rs b/filecoin-proofs/src/api/mod.rs index c6a5caf77..a55b509cf 100644 --- a/filecoin-proofs/src/api/mod.rs +++ b/filecoin-proofs/src/api/mod.rs @@ -157,6 +157,7 @@ where let pp = public_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, )?; let offset_padded: PaddedBytesAmount = UnpaddedBytesAmount::from(offset).into(); diff --git a/filecoin-proofs/src/api/seal.rs b/filecoin-proofs/src/api/seal.rs index 605e9ccd3..3eb4c640c 100644 --- a/filecoin-proofs/src/api/seal.rs +++ b/filecoin-proofs/src/api/seal.rs @@ -92,6 +92,7 @@ where vanilla_params: setup_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, )?, partitions: Some(usize::from(PoRepProofPartitions::from(porep_config))), priority: false, @@ -239,6 +240,7 @@ where vanilla_params: setup_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, )?, partitions: Some(usize::from(PoRepProofPartitions::from(porep_config))), priority: false, @@ -360,6 +362,7 @@ pub fn seal_commit_phase1, Tree: 'static + MerkleTreeTrait>( vanilla_params: setup_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, )?, partitions: Some(usize::from(PoRepProofPartitions::from(porep_config))), priority: false, @@ -442,6 +445,7 @@ pub fn seal_commit_phase2( vanilla_params: setup_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, )?, partitions: Some(usize::from(PoRepProofPartitions::from(porep_config))), priority: false, @@ -541,6 +545,7 @@ pub fn verify_seal( vanilla_params: setup_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, )?, partitions: Some(usize::from(PoRepProofPartitions::from(porep_config))), priority: false, @@ -646,6 +651,7 @@ pub fn verify_batch_seal( vanilla_params: setup_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, )?, partitions: Some(usize::from(PoRepProofPartitions::from(porep_config))), priority: false, diff --git a/filecoin-proofs/src/bin/paramcache.rs b/filecoin-proofs/src/bin/paramcache.rs index d2154adc5..65f6f414c 100644 --- a/filecoin-proofs/src/bin/paramcache.rs +++ b/filecoin-proofs/src/bin/paramcache.rs @@ -36,6 +36,7 @@ fn cache_porep_params(porep_config: PoRepConfig let public_params = public_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, ) .unwrap(); diff --git a/filecoin-proofs/src/bin/phase2.rs b/filecoin-proofs/src/bin/phase2.rs index 75baacc3d..b72aec474 100644 --- a/filecoin-proofs/src/bin/phase2.rs +++ b/filecoin-proofs/src/bin/phase2.rs @@ -185,6 +185,7 @@ fn blank_porep_poseidon_circuit( vanilla_params: setup_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, ) .unwrap(), partitions: Some(usize::from(PoRepProofPartitions::from(porep_config))), diff --git a/filecoin-proofs/src/caches.rs b/filecoin-proofs/src/caches.rs index de871cfee..4abf854b9 100644 --- a/filecoin-proofs/src/caches.rs +++ b/filecoin-proofs/src/caches.rs @@ -81,6 +81,7 @@ pub fn get_stacked_params( let public_params = public_params::( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, )?; let parameters_generator = || { @@ -151,6 +152,7 @@ pub fn get_stacked_verifying_key( let public_params = public_params( PaddedBytesAmount::from(porep_config), usize::from(PoRepProofPartitions::from(porep_config)), + porep_config.porep_id, )?; let vk_generator = || { diff --git a/filecoin-proofs/src/parameters.rs b/filecoin-proofs/src/parameters.rs index 97dba947e..a98a7aa4d 100644 --- a/filecoin-proofs/src/parameters.rs +++ b/filecoin-proofs/src/parameters.rs @@ -1,4 +1,5 @@ use anyhow::{ensure, Result}; +use sha2::{Digest, Sha256}; use storage_proofs::porep::stacked::{self, LayerChallenges, StackedDrg}; use storage_proofs::post::fallback; use storage_proofs::proof::ProofScheme; @@ -6,10 +7,10 @@ use storage_proofs::proof::ProofScheme; use crate::constants::*; use crate::types::{MerkleTreeTrait, PaddedBytesAmount, PoStConfig}; -const DRG_SEED: [u8; 28] = [ +const DRG_NONCE: [u8; 32] = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, -]; // Arbitrary, need a theory for how to vary this over time. + 26, 27, 28, 30, 30, 31, +]; type WinningPostSetupParams = fallback::SetupParams; pub type WinningPostPublicParams = fallback::PublicParams; @@ -20,8 +21,13 @@ pub type WindowPostPublicParams = fallback::PublicParams; pub fn public_params( sector_bytes: PaddedBytesAmount, partitions: usize, + porep_id: [u8; 32], ) -> Result> { - StackedDrg::::setup(&setup_params(sector_bytes, partitions)?) + StackedDrg::::setup(&setup_params( + sector_bytes, + partitions, + porep_id, + )?) } pub fn winning_post_public_params( @@ -68,9 +74,19 @@ pub fn window_post_setup_params(post_config: &PoStConfig) -> WindowPostSetupPara } } +fn drg_seed_from_porep_id(porep_id: [u8; 32]) -> [u8; 28] { + let mut drg_seed = [0; 28]; + + let hash = Sha256::new().chain(porep_id).chain(DRG_NONCE).result(); + + drg_seed.copy_from_slice(&hash[..28]); + drg_seed +} + pub fn setup_params( sector_bytes: PaddedBytesAmount, partitions: usize, + porep_id: [u8; 32], ) -> Result { let layer_challenges = select_challenges( partitions, @@ -97,11 +113,13 @@ pub fn setup_params( let degree = DRG_DEGREE; let expansion_degree = EXP_DEGREE; + let drg_seed = drg_seed_from_porep_id(porep_id); + Ok(stacked::SetupParams { nodes, degree, expansion_degree, - seed: DRG_SEED, + seed: drg_seed, layer_challenges, }) } diff --git a/filecoin-proofs/src/types/porep_config.rs b/filecoin-proofs/src/types/porep_config.rs index ee46785d4..7cb82d889 100644 --- a/filecoin-proofs/src/types/porep_config.rs +++ b/filecoin-proofs/src/types/porep_config.rs @@ -48,6 +48,7 @@ impl PoRepConfig { let params = crate::parameters::public_params::( self.sector_size.into(), self.partitions.into(), + self.porep_id, )?; Ok(