diff --git a/Cargo.lock b/Cargo.lock index 3ca7b39..53bc275 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -552,6 +552,7 @@ dependencies = [ "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand_os 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "sapling-crypto 0.0.1", "sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/librustzcash/src/rustzcash.rs b/librustzcash/src/rustzcash.rs index 99c3187..bff8093 100644 --- a/librustzcash/src/rustzcash.rs +++ b/librustzcash/src/rustzcash.rs @@ -24,7 +24,6 @@ use sapling_crypto::{ fs::{Fs, FsRepr}, FixedGenerators, JubjubEngine, JubjubParams, PrimeOrder, ToUniform, Unknown, }, - redjubjub::{self, Signature}, }; use sapling_crypto::circuit::sapling::TREE_DEPTH as SAPLING_TREE_DEPTH; @@ -62,6 +61,7 @@ use sapling_crypto::primitives::{ProofGenerationKey, ViewingKey}; use zcash_primitives::{ merkle_tree::CommitmentTreeWitness, note_encryption::sapling_ka_agree, + redjubjub::{self, Signature}, sapling::{merkle_hash, spend_sig}, transaction::components::Amount, zip32, JUBJUB, diff --git a/librustzcash/src/tests/signatures.rs b/librustzcash/src/tests/signatures.rs index 2b28437..034b05a 100644 --- a/librustzcash/src/tests/signatures.rs +++ b/librustzcash/src/tests/signatures.rs @@ -1,9 +1,7 @@ use ff::{PrimeField, PrimeFieldRepr}; use pairing::bls12_381::Bls12; -use sapling_crypto::{ - jubjub::{FixedGenerators, JubjubEngine}, - redjubjub::{PrivateKey, PublicKey, Signature}, -}; +use sapling_crypto::jubjub::{FixedGenerators, JubjubEngine}; +use zcash_primitives::redjubjub::{PrivateKey, PublicKey, Signature}; use super::JUBJUB; diff --git a/sapling-crypto/src/lib.rs b/sapling-crypto/src/lib.rs index 14e713d..3662629 100644 --- a/sapling-crypto/src/lib.rs +++ b/sapling-crypto/src/lib.rs @@ -23,5 +23,3 @@ pub mod circuit; pub mod pedersen_hash; pub mod primitives; pub mod constants; -pub mod redjubjub; -pub mod util; diff --git a/zcash_primitives/Cargo.toml b/zcash_primitives/Cargo.toml index ba724be..49b1b7d 100644 --- a/zcash_primitives/Cargo.toml +++ b/zcash_primitives/Cargo.toml @@ -20,3 +20,6 @@ rand_core = "0.5" rand_os = "0.2" sapling-crypto = { path = "../sapling-crypto" } sha2 = "0.8" + +[dev-dependencies] +rand_xorshift = "0.2" diff --git a/zcash_primitives/src/lib.rs b/zcash_primitives/src/lib.rs index a95d000..771f13d 100644 --- a/zcash_primitives/src/lib.rs +++ b/zcash_primitives/src/lib.rs @@ -15,6 +15,9 @@ extern crate rand_os; extern crate sapling_crypto; extern crate sha2; +#[cfg(test)] +extern crate rand_xorshift; + use sapling_crypto::jubjub::JubjubBls12; pub mod block; @@ -23,9 +26,11 @@ pub mod legacy; pub mod merkle_tree; pub mod note_encryption; pub mod prover; +pub mod redjubjub; pub mod sapling; mod serialize; pub mod transaction; +mod util; pub mod zip32; #[cfg(test)] diff --git a/zcash_primitives/src/prover.rs b/zcash_primitives/src/prover.rs index 1d40965..a4af8d4 100644 --- a/zcash_primitives/src/prover.rs +++ b/zcash_primitives/src/prover.rs @@ -4,11 +4,11 @@ use pairing::bls12_381::{Bls12, Fr}; use sapling_crypto::{ jubjub::{edwards, fs::Fs, Unknown}, primitives::{Diversifier, PaymentAddress, ProofGenerationKey}, - redjubjub::{PublicKey, Signature}, }; use crate::{ merkle_tree::CommitmentTreeWitness, + redjubjub::{PublicKey, Signature}, sapling::Node, transaction::components::{Amount, GROTH_PROOF_SIZE}, }; @@ -78,11 +78,11 @@ pub(crate) mod mock { use sapling_crypto::{ jubjub::{edwards, fs::Fs, FixedGenerators, Unknown}, primitives::{Diversifier, PaymentAddress, ProofGenerationKey, ValueCommitment}, - redjubjub::{PublicKey, Signature}, }; use crate::{ merkle_tree::CommitmentTreeWitness, + redjubjub::{PublicKey, Signature}, sapling::Node, transaction::components::{Amount, GROTH_PROOF_SIZE}, JUBJUB, diff --git a/sapling-crypto/src/redjubjub.rs b/zcash_primitives/src/redjubjub.rs similarity index 98% rename from sapling-crypto/src/redjubjub.rs rename to zcash_primitives/src/redjubjub.rs index cd02347..955c7e3 100644 --- a/sapling-crypto/src/redjubjub.rs +++ b/zcash_primitives/src/redjubjub.rs @@ -3,10 +3,12 @@ use ff::{Field, PrimeField, PrimeFieldRepr}; use rand_core::RngCore; +use sapling_crypto::jubjub::{ + edwards::Point, FixedGenerators, JubjubEngine, JubjubParams, Unknown, +}; use std::io::{self, Read, Write}; -use jubjub::{FixedGenerators, JubjubEngine, JubjubParams, Unknown, edwards::Point}; -use util::{hash_to_scalar}; +use util::hash_to_scalar; fn read_scalar(reader: R) -> io::Result { let mut s_repr = ::Repr::default(); @@ -208,8 +210,7 @@ mod tests { use pairing::bls12_381::Bls12; use rand_core::SeedableRng; use rand_xorshift::XorShiftRng; - - use jubjub::{JubjubBls12, fs::Fs, edwards}; + use sapling_crypto::jubjub::{edwards, fs::Fs, JubjubBls12}; use super::*; diff --git a/zcash_primitives/src/sapling.rs b/zcash_primitives/src/sapling.rs index bd981e6..002cc1a 100644 --- a/zcash_primitives/src/sapling.rs +++ b/zcash_primitives/src/sapling.rs @@ -7,11 +7,11 @@ use sapling_crypto::{ jubjub::{fs::Fs, FixedGenerators, JubjubBls12}, pedersen_hash::{pedersen_hash, Personalization}, primitives::Note, - redjubjub::{PrivateKey, PublicKey, Signature}, }; use std::io::{self, Read, Write}; use crate::merkle_tree::Hashable; +use crate::redjubjub::{PrivateKey, PublicKey, Signature}; use JUBJUB; pub(crate) const SAPLING_COMMITMENT_TREE_DEPTH: usize = diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index a3134c3..792582d 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -6,7 +6,6 @@ use rand::{rngs::OsRng, seq::SliceRandom, CryptoRng, RngCore}; use sapling_crypto::{ jubjub::fs::Fs, primitives::{Diversifier, Note, PaymentAddress}, - redjubjub::PrivateKey, }; use zip32::ExtendedSpendingKey; @@ -16,6 +15,7 @@ use crate::{ merkle_tree::{CommitmentTreeWitness, IncrementalWitness}, note_encryption::{generate_esk, Memo, SaplingNoteEncryption}, prover::TxProver, + redjubjub::PrivateKey, sapling::{spend_sig, Node}, transaction::{ components::{amount::DEFAULT_FEE, Amount, OutputDescription, SpendDescription, TxOut}, diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index d50b4fb..1785344 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -1,13 +1,11 @@ use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use ff::{PrimeField, PrimeFieldRepr}; use pairing::bls12_381::{Bls12, Fr, FrRepr}; -use sapling_crypto::{ - jubjub::{edwards, Unknown}, - redjubjub::{PublicKey, Signature}, -}; +use sapling_crypto::jubjub::{edwards, Unknown}; use std::io::{self, Read, Write}; use legacy::Script; +use redjubjub::{PublicKey, Signature}; use JUBJUB; pub mod amount; diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index a8ecb17..6e2d15f 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -1,11 +1,11 @@ use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use hex; -use sapling_crypto::redjubjub::Signature; use sha2::{Digest, Sha256}; use std::fmt; use std::io::{self, Read, Write}; use std::ops::Deref; +use redjubjub::Signature; use serialize::Vector; pub mod builder; diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 4cd5d72..041ac21 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -1,13 +1,11 @@ use ff::Field; use pairing::bls12_381::Bls12; use rand_os::OsRng; -use sapling_crypto::{ - jubjub::{fs::Fs, FixedGenerators}, - redjubjub::PrivateKey, -}; +use sapling_crypto::jubjub::{fs::Fs, FixedGenerators}; use super::{components::Amount, sighash::signature_hash, Transaction, TransactionData}; use legacy::Script; +use redjubjub::PrivateKey; use JUBJUB; #[test] diff --git a/sapling-crypto/src/util.rs b/zcash_primitives/src/util.rs similarity index 84% rename from sapling-crypto/src/util.rs rename to zcash_primitives/src/util.rs index 1e759ba..f46e0a2 100644 --- a/sapling-crypto/src/util.rs +++ b/zcash_primitives/src/util.rs @@ -1,6 +1,5 @@ use blake2b_simd::Params; - -use jubjub::{JubjubEngine, ToUniform}; +use sapling_crypto::jubjub::{JubjubEngine, ToUniform}; pub fn hash_to_scalar(persona: &[u8], a: &[u8], b: &[u8]) -> E::Fs { let mut hasher = Params::new().hash_length(64).personal(persona).to_state(); diff --git a/zcash_proofs/src/prover.rs b/zcash_proofs/src/prover.rs index 4b5b0f4..c59ba62 100644 --- a/zcash_proofs/src/prover.rs +++ b/zcash_proofs/src/prover.rs @@ -6,12 +6,12 @@ use pairing::bls12_381::{Bls12, Fr}; use sapling_crypto::{ jubjub::{edwards, fs::Fs, Unknown}, primitives::{Diversifier, PaymentAddress, ProofGenerationKey}, - redjubjub::{PublicKey, Signature}, }; use std::path::Path; use zcash_primitives::{ merkle_tree::CommitmentTreeWitness, prover::TxProver, + redjubjub::{PublicKey, Signature}, sapling::Node, transaction::components::{Amount, GROTH_PROOF_SIZE}, JUBJUB, diff --git a/zcash_proofs/src/sapling/prover.rs b/zcash_proofs/src/sapling/prover.rs index 4b5a5f4..3d30524 100644 --- a/zcash_proofs/src/sapling/prover.rs +++ b/zcash_proofs/src/sapling/prover.rs @@ -11,10 +11,12 @@ use sapling_crypto::{ }, jubjub::{edwards, fs::Fs, FixedGenerators, JubjubBls12, Unknown}, primitives::{Diversifier, Note, PaymentAddress, ProofGenerationKey, ValueCommitment}, - redjubjub::{PrivateKey, PublicKey, Signature}, }; use zcash_primitives::{ - merkle_tree::CommitmentTreeWitness, sapling::Node, transaction::components::Amount, + merkle_tree::CommitmentTreeWitness, + redjubjub::{PrivateKey, PublicKey, Signature}, + sapling::Node, + transaction::components::Amount, }; use super::compute_value_balance; diff --git a/zcash_proofs/src/sapling/verifier.rs b/zcash_proofs/src/sapling/verifier.rs index 47fc9fe..ac4f3f7 100644 --- a/zcash_proofs/src/sapling/verifier.rs +++ b/zcash_proofs/src/sapling/verifier.rs @@ -4,9 +4,11 @@ use pairing::bls12_381::{Bls12, Fr}; use sapling_crypto::{ circuit::multipack, jubjub::{edwards, FixedGenerators, JubjubBls12, Unknown}, - redjubjub::{PublicKey, Signature}, }; -use zcash_primitives::transaction::components::Amount; +use zcash_primitives::{ + redjubjub::{PublicKey, Signature}, + transaction::components::Amount, +}; use super::compute_value_balance;