From 9f1c86bff37468e516128838a7a29ea8a9c4e6ad Mon Sep 17 00:00:00 2001 From: porcuquine Date: Wed, 3 Jun 2020 12:29:22 -0700 Subject: [PATCH] Add DomainSeparationTag type. --- storage-proofs/core/src/crypto/mod.rs | 12 ++++++++++-- storage-proofs/core/src/drgraph.rs | 4 ++-- storage-proofs/porep/src/stacked/vanilla/graph.rs | 3 ++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/storage-proofs/core/src/crypto/mod.rs b/storage-proofs/core/src/crypto/mod.rs index e9872f776b..87cd38f33b 100644 --- a/storage-proofs/core/src/crypto/mod.rs +++ b/storage-proofs/core/src/crypto/mod.rs @@ -5,9 +5,17 @@ pub mod pedersen; pub mod sloth; pub mod xor; -pub fn derive_porep_domain_seed(domain_separation_tag: &str, porep_id: [u8; 32]) -> [u8; 32] { +pub struct DomainSeparationTag(&'static str); + +pub const DRSAMPLE_DST: DomainSeparationTag = DomainSeparationTag("Filecoin_DRSample"); +pub const FEISTEL_DST: DomainSeparationTag = DomainSeparationTag("Filecoin_Feistel"); + +pub fn derive_porep_domain_seed( + domain_separation_tag: DomainSeparationTag, + porep_id: [u8; 32], +) -> [u8; 32] { Sha256::new() - .chain(domain_separation_tag) + .chain(domain_separation_tag.0) .chain(porep_id) .result() .into() diff --git a/storage-proofs/core/src/drgraph.rs b/storage-proofs/core/src/drgraph.rs index 056e02f758..e4770db73e 100644 --- a/storage-proofs/core/src/drgraph.rs +++ b/storage-proofs/core/src/drgraph.rs @@ -7,7 +7,7 @@ use rand::{rngs::OsRng, Rng, SeedableRng}; use rand_chacha::ChaCha8Rng; use sha2::{Digest, Sha256}; -use crate::crypto::derive_porep_domain_seed; +use crate::crypto::{derive_porep_domain_seed, DRSAMPLE_DST}; use crate::error::*; use crate::fr32::bytes_into_fr_repr_safe; use crate::hasher::{Hasher, PoseidonArity}; @@ -218,7 +218,7 @@ impl Graph for BucketGraph { ); let mut drg_seed = [0; 28]; - let raw_seed = derive_porep_domain_seed("Filecoin_DRSample", porep_id); + let raw_seed = derive_porep_domain_seed(DRSAMPLE_DST, porep_id); drg_seed.copy_from_slice(&raw_seed[..28]); Ok(BucketGraph { diff --git a/storage-proofs/porep/src/stacked/vanilla/graph.rs b/storage-proofs/porep/src/stacked/vanilla/graph.rs index f8941fd853..06296291c3 100644 --- a/storage-proofs/porep/src/stacked/vanilla/graph.rs +++ b/storage-proofs/porep/src/stacked/vanilla/graph.rs @@ -15,6 +15,7 @@ use storage_proofs_core::{ crypto::{ derive_porep_domain_seed, feistel::{self, FeistelPrecomputed}, + FEISTEL_DST, }, drgraph::BASE_DEGREE, drgraph::{BucketGraph, Graph}, @@ -187,7 +188,7 @@ where let bg_id = base_graph.identifier(); let mut feistel_keys = [0u64; 4]; - let raw_seed = derive_porep_domain_seed("Filecoin_Feistel", porep_id); + let raw_seed = derive_porep_domain_seed(FEISTEL_DST, porep_id); feistel_keys[0] = u64::from_le_bytes(raw_seed[0..8].try_into().unwrap()); feistel_keys[1] = u64::from_le_bytes(raw_seed[8..16].try_into().unwrap()); feistel_keys[2] = u64::from_le_bytes(raw_seed[16..24].try_into().unwrap());