Refactor contextual random rseed generation into util method in zcash_primitives
This commit is contained in:
parent
a3ae1b273d
commit
2ed9b6f881
|
@ -191,12 +191,13 @@ mod tests {
|
|||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use rand_core::{OsRng, RngCore};
|
||||
use zcash_primitives::{
|
||||
consensus::{NetworkUpgrade, Parameters},
|
||||
consensus::NetworkUpgrade,
|
||||
jubjub::{fs::Fs, FixedGenerators, JubjubParams, ToUniform},
|
||||
merkle_tree::CommitmentTree,
|
||||
note_encryption::{Memo, SaplingNoteEncryption},
|
||||
primitives::{Note, Rseed},
|
||||
primitives::Note,
|
||||
transaction::components::Amount,
|
||||
util::generate_random_rseed,
|
||||
zip32::{ExtendedFullViewingKey, ExtendedSpendingKey},
|
||||
JUBJUB,
|
||||
};
|
||||
|
@ -257,13 +258,11 @@ mod tests {
|
|||
|
||||
// Create a fake Note for the account
|
||||
let mut rng = OsRng;
|
||||
let rseed = if Network::is_nu_active(NetworkUpgrade::Canopy, height as u32) {
|
||||
let mut buffer = [0u8; 32];
|
||||
&rng.fill_bytes(&mut buffer);
|
||||
Rseed::AfterZip212(buffer)
|
||||
} else {
|
||||
Rseed::BeforeZip212(Fs::random(&mut rng))
|
||||
};
|
||||
let rseed = generate_random_rseed::<Network, OsRng>(
|
||||
NetworkUpgrade::Canopy,
|
||||
height as u32,
|
||||
&mut rng,
|
||||
);
|
||||
let note = Note {
|
||||
g_d: to.diversifier().g_d::<Bls12>(&JUBJUB).unwrap(),
|
||||
pk_d: to.pk_d().clone(),
|
||||
|
|
|
@ -95,7 +95,7 @@ fn get_target_and_anchor_heights(data: &Connection) -> Result<(u32, u32), error:
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::Network;
|
||||
use ff::{Field, PrimeField};
|
||||
use ff::PrimeField;
|
||||
use pairing::bls12_381::Bls12;
|
||||
use protobuf::Message;
|
||||
use rand_core::{OsRng, RngCore};
|
||||
|
@ -106,11 +106,11 @@ mod tests {
|
|||
};
|
||||
use zcash_primitives::{
|
||||
block::BlockHash,
|
||||
consensus::{NetworkUpgrade, Parameters},
|
||||
jubjub::fs::Fs,
|
||||
consensus::NetworkUpgrade,
|
||||
note_encryption::{Memo, SaplingNoteEncryption},
|
||||
primitives::{Note, PaymentAddress, Rseed},
|
||||
primitives::{Note, PaymentAddress},
|
||||
transaction::components::Amount,
|
||||
util::generate_random_rseed,
|
||||
zip32::ExtendedFullViewingKey,
|
||||
JUBJUB,
|
||||
};
|
||||
|
@ -127,13 +127,11 @@ mod tests {
|
|||
|
||||
// Create a fake Note for the account
|
||||
let mut rng = OsRng;
|
||||
let rseed = if Network::is_nu_active(NetworkUpgrade::Canopy, height as u32) {
|
||||
let mut buffer = [0u8; 32];
|
||||
&rng.fill_bytes(&mut buffer);
|
||||
Rseed::AfterZip212(buffer)
|
||||
} else {
|
||||
Rseed::BeforeZip212(Fs::random(&mut rng))
|
||||
};
|
||||
let rseed = generate_random_rseed::<Network, OsRng>(
|
||||
NetworkUpgrade::Canopy,
|
||||
height as u32,
|
||||
&mut rng,
|
||||
);
|
||||
let note = Note {
|
||||
g_d: to.diversifier().g_d::<Bls12>(&JUBJUB).unwrap(),
|
||||
pk_d: to.pk_d().clone(),
|
||||
|
@ -183,13 +181,11 @@ mod tests {
|
|||
value: Amount,
|
||||
) -> CompactBlock {
|
||||
let mut rng = OsRng;
|
||||
let rseed = if Network::is_nu_active(NetworkUpgrade::Canopy, height as u32) {
|
||||
let mut buffer = [0u8; 32];
|
||||
&rng.fill_bytes(&mut buffer);
|
||||
Rseed::AfterZip212(buffer)
|
||||
} else {
|
||||
Rseed::BeforeZip212(Fs::random(&mut rng))
|
||||
};
|
||||
let rseed = generate_random_rseed::<Network, OsRng>(
|
||||
NetworkUpgrade::Canopy,
|
||||
height as u32,
|
||||
&mut rng,
|
||||
);
|
||||
|
||||
// Create a fake CompactBlock containing the note
|
||||
let mut cspend = CompactSpend::new();
|
||||
|
@ -226,13 +222,11 @@ mod tests {
|
|||
// Create a fake Note for the change
|
||||
ctx.outputs.push({
|
||||
let change_addr = extfvk.default_address().unwrap().1;
|
||||
let rseed = if Network::is_nu_active(NetworkUpgrade::Canopy, height as u32) {
|
||||
let mut buffer = [0u8; 32];
|
||||
&rng.fill_bytes(&mut buffer);
|
||||
Rseed::AfterZip212(buffer)
|
||||
} else {
|
||||
Rseed::BeforeZip212(Fs::random(&mut rng))
|
||||
};
|
||||
let rseed = generate_random_rseed::<Network, OsRng>(
|
||||
NetworkUpgrade::Canopy,
|
||||
height as u32,
|
||||
&mut rng,
|
||||
);
|
||||
let note = Note {
|
||||
g_d: change_addr.diversifier().g_d::<Bls12>(&JUBJUB).unwrap(),
|
||||
pk_d: change_addr.pk_d().clone(),
|
||||
|
|
|
@ -24,7 +24,7 @@ pub mod redjubjub;
|
|||
pub mod sapling;
|
||||
pub mod serialize;
|
||||
pub mod transaction;
|
||||
mod util;
|
||||
pub mod util;
|
||||
pub mod zip32;
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
@ -593,6 +593,7 @@ mod tests {
|
|||
PrimeOrder, Unknown,
|
||||
},
|
||||
primitives::{Diversifier, PaymentAddress, Rseed, ValueCommitment},
|
||||
util::generate_random_rseed,
|
||||
Network,
|
||||
};
|
||||
use crypto_api_chachapoly::ChachaPolyIetf;
|
||||
|
@ -795,13 +796,7 @@ mod tests {
|
|||
};
|
||||
let cv = value_commitment.cm(&JUBJUB).into();
|
||||
|
||||
let rseed = if Network::is_nu_active(NetworkUpgrade::Canopy, height) {
|
||||
let mut buffer = [0u8; 32];
|
||||
&rng.fill_bytes(&mut buffer);
|
||||
Rseed::AfterZip212(buffer)
|
||||
} else {
|
||||
Rseed::BeforeZip212(Fs::random(rng))
|
||||
};
|
||||
let rseed = generate_random_rseed::<Network, R>(NetworkUpgrade::Canopy, height, &mut rng);
|
||||
|
||||
let note = pa.create_note(value, rseed, &JUBJUB).unwrap();
|
||||
let cmu = note.cm(&JUBJUB);
|
||||
|
|
|
@ -25,6 +25,7 @@ use crate::{
|
|||
components::{amount::DEFAULT_FEE, Amount, OutputDescription, SpendDescription, TxOut},
|
||||
signature_hash_data, Transaction, TransactionData, SIGHASH_ALL,
|
||||
},
|
||||
util::generate_random_rseed,
|
||||
Network, JUBJUB,
|
||||
};
|
||||
|
||||
|
@ -103,13 +104,7 @@ impl SaplingOutput {
|
|||
return Err(Error::InvalidAmount);
|
||||
}
|
||||
|
||||
let rseed = if P::is_nu_active(NetworkUpgrade::Canopy, height) {
|
||||
let mut buffer = [0u8; 32];
|
||||
&rng.fill_bytes(&mut buffer);
|
||||
Rseed::AfterZip212(buffer)
|
||||
} else {
|
||||
Rseed::BeforeZip212(Fs::random(rng))
|
||||
};
|
||||
let rseed = generate_random_rseed::<P, R>(NetworkUpgrade::Canopy, height, rng);
|
||||
|
||||
let note = Note {
|
||||
g_d,
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
use blake2b_simd::Params;
|
||||
|
||||
use crate::jubjub::{JubjubEngine, ToUniform};
|
||||
use crate::{
|
||||
consensus,
|
||||
consensus::NetworkUpgrade,
|
||||
jubjub::{fs::Fs, JubjubEngine, ToUniform},
|
||||
primitives::Rseed,
|
||||
};
|
||||
use ff::Field;
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
|
||||
pub fn hash_to_scalar<E: JubjubEngine>(persona: &[u8], a: &[u8], b: &[u8]) -> E::Fs {
|
||||
let mut hasher = Params::new().hash_length(64).personal(persona).to_state();
|
||||
|
@ -9,3 +16,17 @@ pub fn hash_to_scalar<E: JubjubEngine>(persona: &[u8], a: &[u8], b: &[u8]) -> E:
|
|||
let ret = hasher.finalize();
|
||||
E::Fs::to_uniform(ret.as_ref())
|
||||
}
|
||||
|
||||
pub fn generate_random_rseed<P: consensus::Parameters, R: RngCore + CryptoRng>(
|
||||
nu: NetworkUpgrade,
|
||||
height: u32,
|
||||
rng: &mut R,
|
||||
) -> Rseed<Fs> {
|
||||
if P::is_nu_active(nu, height) {
|
||||
let mut buffer = [0u8; 32];
|
||||
&rng.fill_bytes(&mut buffer);
|
||||
Rseed::AfterZip212(buffer)
|
||||
} else {
|
||||
Rseed::BeforeZip212(Fs::random(rng))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue