Merge pull request #104 from str4d/remove-sapling-crypto
Refactor to remove sapling-crypto
This commit is contained in:
commit
3584485516
|
@ -57,16 +57,20 @@ name = "bellman"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"bit-vec 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"blake2s_simd 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ff 0.4.0",
|
||||
"futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"group 0.1.0",
|
||||
"hex-literal 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pairing 0.14.2",
|
||||
"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_xorshift 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -309,7 +313,6 @@ dependencies = [
|
|||
"pairing 0.14.2",
|
||||
"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)",
|
||||
"sapling-crypto 0.0.1",
|
||||
"zcash_primitives 0.0.0",
|
||||
"zcash_proofs 0.0.0",
|
||||
]
|
||||
|
@ -457,23 +460,6 @@ dependencies = [
|
|||
"rand_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sapling-crypto"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"bellman 0.1.0",
|
||||
"blake2b_simd 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"blake2s_simd 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ff 0.4.0",
|
||||
"hex-literal 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pairing 0.14.2",
|
||||
"rand_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_xorshift 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sha2"
|
||||
version = "0.8.0"
|
||||
|
@ -532,7 +518,6 @@ dependencies = [
|
|||
"pairing 0.14.2",
|
||||
"rand_core 0.5.0 (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",
|
||||
"zcash_primitives 0.0.0",
|
||||
]
|
||||
|
||||
|
@ -542,17 +527,19 @@ version = "0.0.0"
|
|||
dependencies = [
|
||||
"aes 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"blake2b_simd 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"blake2s_simd 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"crypto_api_chachapoly 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ff 0.4.0",
|
||||
"fpe 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hex-literal 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pairing 0.14.2",
|
||||
"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)",
|
||||
"sapling-crypto 0.0.1",
|
||||
"rand_xorshift 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -566,8 +553,9 @@ dependencies = [
|
|||
"directories 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ff 0.4.0",
|
||||
"pairing 0.14.2",
|
||||
"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)",
|
||||
"sapling-crypto 0.0.1",
|
||||
"rand_xorshift 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"zcash_primitives 0.0.0",
|
||||
]
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ members = [
|
|||
"group",
|
||||
"librustzcash",
|
||||
"pairing",
|
||||
"sapling-crypto",
|
||||
"zcash_client_backend",
|
||||
"zcash_primitives",
|
||||
"zcash_proofs",
|
||||
|
|
|
@ -10,6 +10,7 @@ version = "0.1.0"
|
|||
|
||||
[dependencies]
|
||||
bit-vec = "0.4.4"
|
||||
blake2s_simd = "0.5"
|
||||
ff = { path = "../ff" }
|
||||
futures = "0.1"
|
||||
futures-cpupool = { version = "0.1", optional = true }
|
||||
|
@ -21,7 +22,10 @@ rand_core = "0.5"
|
|||
byteorder = "1"
|
||||
|
||||
[dev-dependencies]
|
||||
hex-literal = "0.1"
|
||||
rand = "0.7"
|
||||
rand_xorshift = "0.2"
|
||||
sha2 = "0.8"
|
||||
|
||||
[features]
|
||||
groth16 = ["pairing"]
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#[cfg(test)]
|
||||
pub mod test;
|
||||
|
||||
pub mod boolean;
|
||||
|
@ -7,15 +6,10 @@ pub mod uint32;
|
|||
pub mod blake2s;
|
||||
pub mod num;
|
||||
pub mod lookup;
|
||||
pub mod ecc;
|
||||
pub mod pedersen_hash;
|
||||
pub mod multipack;
|
||||
pub mod sha256;
|
||||
|
||||
pub mod sapling;
|
||||
pub mod sprout;
|
||||
|
||||
use bellman::{
|
||||
use crate::{
|
||||
SynthesisError
|
||||
};
|
||||
|
||||
|
@ -25,7 +19,7 @@ use bellman::{
|
|||
/// This basically is just an extension to `Option`
|
||||
/// which allows for a convenient mapping to an
|
||||
/// error on `None`.
|
||||
trait Assignment<T> {
|
||||
pub trait Assignment<T> {
|
||||
fn get(&self) -> Result<&T, SynthesisError>;
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ use pairing::{
|
|||
Engine,
|
||||
};
|
||||
|
||||
use bellman::{
|
||||
use crate::{
|
||||
SynthesisError,
|
||||
ConstraintSystem
|
||||
};
|
||||
|
@ -325,10 +325,10 @@ mod test {
|
|||
use rand_core::{RngCore, SeedableRng};
|
||||
use rand_xorshift::XorShiftRng;
|
||||
|
||||
use ::circuit::boolean::{Boolean, AllocatedBit};
|
||||
use ::circuit::test::TestConstraintSystem;
|
||||
use crate::gadgets::boolean::{Boolean, AllocatedBit};
|
||||
use crate::gadgets::test::TestConstraintSystem;
|
||||
use super::blake2s;
|
||||
use bellman::{ConstraintSystem};
|
||||
use crate::{ConstraintSystem};
|
||||
|
||||
#[test]
|
||||
fn test_blank_hash() {
|
|
@ -1,7 +1,7 @@
|
|||
use ff::{BitIterator, Field, PrimeField};
|
||||
use pairing::Engine;
|
||||
|
||||
use bellman::{
|
||||
use crate::{
|
||||
ConstraintSystem,
|
||||
SynthesisError,
|
||||
LinearCombination,
|
||||
|
@ -801,10 +801,10 @@ impl From<AllocatedBit> for Boolean {
|
|||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use bellman::{ConstraintSystem};
|
||||
use crate::{ConstraintSystem};
|
||||
use ff::{Field, PrimeField};
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use ::circuit::test::*;
|
||||
use crate::gadgets::test::*;
|
||||
use super::{
|
||||
AllocatedBit,
|
||||
Boolean,
|
|
@ -7,7 +7,7 @@ use super::num::{
|
|||
Num
|
||||
};
|
||||
use super::boolean::Boolean;
|
||||
use bellman::{
|
||||
use crate::{
|
||||
ConstraintSystem
|
||||
};
|
||||
|
||||
|
@ -197,8 +197,8 @@ pub fn lookup3_xy_with_conditional_negation<E: Engine, CS>(
|
|||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use ::circuit::test::*;
|
||||
use ::circuit::boolean::{Boolean, AllocatedBit};
|
||||
use crate::gadgets::test::*;
|
||||
use crate::gadgets::boolean::{Boolean, AllocatedBit};
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use rand_core::{RngCore, SeedableRng};
|
||||
use rand_xorshift::XorShiftRng;
|
|
@ -1,7 +1,7 @@
|
|||
use ff::{Field, PrimeField};
|
||||
use pairing::Engine;
|
||||
|
||||
use bellman::{
|
||||
use crate::{
|
||||
SynthesisError,
|
||||
ConstraintSystem,
|
||||
LinearCombination,
|
|
@ -1,6 +1,6 @@
|
|||
use ff::{Field, PrimeField};
|
||||
use pairing::Engine;
|
||||
use bellman::{ConstraintSystem, SynthesisError};
|
||||
use crate::{ConstraintSystem, SynthesisError};
|
||||
use super::boolean::{Boolean};
|
||||
use super::num::Num;
|
||||
use super::Assignment;
|
||||
|
@ -80,12 +80,12 @@ pub fn compute_multipacking<E: Engine>(
|
|||
|
||||
#[test]
|
||||
fn test_multipacking() {
|
||||
use bellman::{ConstraintSystem};
|
||||
use crate::{ConstraintSystem};
|
||||
use pairing::bls12_381::{Bls12};
|
||||
use rand_core::{RngCore, SeedableRng};
|
||||
use rand_xorshift::XorShiftRng;
|
||||
|
||||
use ::circuit::test::*;
|
||||
use crate::gadgets::test::*;
|
||||
use super::boolean::{AllocatedBit, Boolean};
|
||||
|
||||
let mut rng = XorShiftRng::from_seed([
|
|
@ -1,7 +1,7 @@
|
|||
use ff::{BitIterator, Field, PrimeField, PrimeFieldRepr};
|
||||
use pairing::Engine;
|
||||
|
||||
use bellman::{
|
||||
use crate::{
|
||||
SynthesisError,
|
||||
ConstraintSystem,
|
||||
LinearCombination,
|
||||
|
@ -455,13 +455,13 @@ impl<E: Engine> Num<E> {
|
|||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use bellman::{ConstraintSystem};
|
||||
use crate::{ConstraintSystem};
|
||||
use ff::{BitIterator, Field, PrimeField};
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use rand_core::SeedableRng;
|
||||
use rand_xorshift::XorShiftRng;
|
||||
|
||||
use ::circuit::test::*;
|
||||
use crate::gadgets::test::*;
|
||||
use super::{AllocatedNum, Boolean};
|
||||
|
||||
#[test]
|
|
@ -1,7 +1,7 @@
|
|||
use super::uint32::UInt32;
|
||||
use super::multieq::MultiEq;
|
||||
use super::boolean::Boolean;
|
||||
use bellman::{ConstraintSystem, SynthesisError};
|
||||
use crate::{ConstraintSystem, SynthesisError};
|
||||
use pairing::Engine;
|
||||
|
||||
const ROUND_CONSTANTS: [u32; 64] = [
|
||||
|
@ -305,9 +305,9 @@ fn sha256_compression_function<E, CS>(
|
|||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use circuit::boolean::AllocatedBit;
|
||||
use crate::gadgets::boolean::AllocatedBit;
|
||||
use pairing::bls12_381::Bls12;
|
||||
use circuit::test::TestConstraintSystem;
|
||||
use crate::gadgets::test::TestConstraintSystem;
|
||||
use rand_core::{RngCore, SeedableRng};
|
||||
use rand_xorshift::XorShiftRng;
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
use ff::{Field, PrimeField, PrimeFieldRepr};
|
||||
use pairing::Engine;
|
||||
|
||||
use bellman::{
|
||||
use crate::{
|
||||
LinearCombination,
|
||||
SynthesisError,
|
||||
ConstraintSystem,
|
|
@ -1,7 +1,7 @@
|
|||
use ff::{Field, PrimeField};
|
||||
use pairing::Engine;
|
||||
|
||||
use bellman::{
|
||||
use crate::{
|
||||
SynthesisError,
|
||||
ConstraintSystem,
|
||||
LinearCombination
|
||||
|
@ -409,13 +409,13 @@ impl UInt32 {
|
|||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use ::circuit::boolean::{Boolean};
|
||||
use crate::gadgets::boolean::{Boolean};
|
||||
use super::{UInt32};
|
||||
use ff::Field;
|
||||
use pairing::bls12_381::{Bls12};
|
||||
use ::circuit::test::*;
|
||||
use bellman::{ConstraintSystem};
|
||||
use circuit::multieq::MultiEq;
|
||||
use crate::gadgets::test::*;
|
||||
use crate::{ConstraintSystem};
|
||||
use crate::gadgets::multieq::MultiEq;
|
||||
use rand_core::{RngCore, SeedableRng};
|
||||
use rand_xorshift::XorShiftRng;
|
||||
|
|
@ -6,6 +6,7 @@ extern crate rand_core;
|
|||
|
||||
extern crate futures;
|
||||
extern crate bit_vec;
|
||||
extern crate blake2s_simd;
|
||||
extern crate byteorder;
|
||||
|
||||
#[cfg(feature = "multicore")]
|
||||
|
@ -15,9 +16,20 @@ extern crate futures_cpupool;
|
|||
#[cfg(feature = "multicore")]
|
||||
extern crate num_cpus;
|
||||
|
||||
#[cfg(test)]
|
||||
#[macro_use]
|
||||
extern crate hex_literal;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate rand;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate rand_xorshift;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate sha2;
|
||||
|
||||
pub mod gadgets;
|
||||
pub mod multicore;
|
||||
mod multiexp;
|
||||
pub mod domain;
|
||||
|
|
|
@ -24,6 +24,5 @@ lazy_static = "1"
|
|||
byteorder = "1"
|
||||
rand_core = "0.5"
|
||||
rand_os = "0.2"
|
||||
sapling-crypto = { path = "../sapling-crypto" }
|
||||
zcash_primitives = { path = "../zcash_primitives" }
|
||||
zcash_proofs = { path = "../zcash_proofs" }
|
||||
|
|
|
@ -7,7 +7,6 @@ extern crate libc;
|
|||
extern crate pairing;
|
||||
extern crate rand_core;
|
||||
extern crate rand_os;
|
||||
extern crate sapling_crypto;
|
||||
extern crate zcash_primitives;
|
||||
extern crate zcash_proofs;
|
||||
|
||||
|
@ -16,20 +15,19 @@ extern crate lazy_static;
|
|||
use ff::{PrimeField, PrimeFieldRepr};
|
||||
use pairing::bls12_381::{Bls12, Fr, FrRepr};
|
||||
|
||||
use sapling_crypto::{
|
||||
circuit::multipack,
|
||||
use zcash_primitives::{
|
||||
constants::CRH_IVK_PERSONALIZATION,
|
||||
jubjub::{
|
||||
edwards,
|
||||
fs::{Fs, FsRepr},
|
||||
FixedGenerators, JubjubEngine, JubjubParams, PrimeOrder, ToUniform, Unknown,
|
||||
},
|
||||
redjubjub::{self, Signature},
|
||||
};
|
||||
|
||||
use sapling_crypto::circuit::sapling::TREE_DEPTH as SAPLING_TREE_DEPTH;
|
||||
use sapling_crypto::circuit::sprout::{self, TREE_DEPTH as SPROUT_TREE_DEPTH};
|
||||
use zcash_proofs::circuit::sapling::TREE_DEPTH as SAPLING_TREE_DEPTH;
|
||||
use zcash_proofs::circuit::sprout::{self, TREE_DEPTH as SPROUT_TREE_DEPTH};
|
||||
|
||||
use bellman::gadgets::multipack;
|
||||
use bellman::groth16::{
|
||||
create_random_proof, verify_proof, Parameters, PreparedVerifyingKey, Proof,
|
||||
};
|
||||
|
@ -58,10 +56,13 @@ use std::ffi::OsString;
|
|||
#[cfg(target_os = "windows")]
|
||||
use std::os::windows::ffi::OsStringExt;
|
||||
|
||||
use sapling_crypto::primitives::{ProofGenerationKey, ViewingKey};
|
||||
use zcash_primitives::{
|
||||
merkle_tree::CommitmentTreeWitness,
|
||||
note_encryption::sapling_ka_agree,
|
||||
primitives::{
|
||||
Diversifier, Note, PaymentAddress, ProofGenerationKey, ViewingKey,
|
||||
},
|
||||
redjubjub::{self, Signature},
|
||||
sapling::{merkle_hash, spend_sig},
|
||||
transaction::components::Amount,
|
||||
zip32, JUBJUB,
|
||||
|
@ -236,7 +237,7 @@ fn init_zksnark_params(
|
|||
|
||||
#[no_mangle]
|
||||
pub extern "system" fn librustzcash_tree_uncommitted(result: *mut [c_uchar; 32]) {
|
||||
let tmp = sapling_crypto::primitives::Note::<Bls12>::uncommitted().into_repr();
|
||||
let tmp = Note::<Bls12>::uncommitted().into_repr();
|
||||
|
||||
// Should be okay, caller is responsible for ensuring the pointer
|
||||
// is a valid pointer to 32 bytes that can be mutated.
|
||||
|
@ -341,7 +342,7 @@ pub extern "system" fn librustzcash_crh_ivk(
|
|||
|
||||
#[no_mangle]
|
||||
pub extern "system" fn librustzcash_check_diversifier(diversifier: *const [c_uchar; 11]) -> bool {
|
||||
let diversifier = sapling_crypto::primitives::Diversifier(unsafe { *diversifier });
|
||||
let diversifier = Diversifier(unsafe { *diversifier });
|
||||
diversifier.g_d::<Bls12>(&JUBJUB).is_some()
|
||||
}
|
||||
|
||||
|
@ -352,7 +353,7 @@ pub extern "system" fn librustzcash_ivk_to_pkd(
|
|||
result: *mut [c_uchar; 32],
|
||||
) -> bool {
|
||||
let ivk = read_fs(unsafe { &*ivk });
|
||||
let diversifier = sapling_crypto::primitives::Diversifier(unsafe { *diversifier });
|
||||
let diversifier = Diversifier(unsafe { *diversifier });
|
||||
if let Some(g_d) = diversifier.g_d::<Bls12>(&JUBJUB) {
|
||||
let pk_d = g_d.mul(ivk, &JUBJUB);
|
||||
|
||||
|
@ -407,8 +408,8 @@ fn priv_get_note(
|
|||
pk_d: *const [c_uchar; 32],
|
||||
value: u64,
|
||||
r: *const [c_uchar; 32],
|
||||
) -> Result<sapling_crypto::primitives::Note<Bls12>, ()> {
|
||||
let diversifier = sapling_crypto::primitives::Diversifier(unsafe { *diversifier });
|
||||
) -> Result<Note<Bls12>, ()> {
|
||||
let diversifier = Diversifier(unsafe { *diversifier });
|
||||
let g_d = match diversifier.g_d::<Bls12>(&JUBJUB) {
|
||||
Some(g_d) => g_d,
|
||||
None => return Err(()),
|
||||
|
@ -430,7 +431,7 @@ fn priv_get_note(
|
|||
Err(_) => return Err(()),
|
||||
};
|
||||
|
||||
let note = sapling_crypto::primitives::Note {
|
||||
let note = Note {
|
||||
value,
|
||||
g_d,
|
||||
pk_d,
|
||||
|
@ -539,7 +540,7 @@ pub extern "system" fn librustzcash_sapling_ka_derivepublic(
|
|||
esk: *const [c_uchar; 32],
|
||||
result: *mut [c_uchar; 32],
|
||||
) -> bool {
|
||||
let diversifier = sapling_crypto::primitives::Diversifier(unsafe { *diversifier });
|
||||
let diversifier = Diversifier(unsafe { *diversifier });
|
||||
|
||||
// Compute g_d from the diversifier
|
||||
let g_d = match diversifier.g_d::<Bls12>(&JUBJUB) {
|
||||
|
@ -940,7 +941,7 @@ pub extern "system" fn librustzcash_sapling_output_proof(
|
|||
};
|
||||
|
||||
// Grab the diversifier from the caller.
|
||||
let diversifier = sapling_crypto::primitives::Diversifier(unsafe { *diversifier });
|
||||
let diversifier = Diversifier(unsafe { *diversifier });
|
||||
|
||||
// Grab pk_d from the caller.
|
||||
let pk_d = match edwards::Point::<Bls12, Unknown>::read(&(unsafe { &*pk_d })[..], &JUBJUB) {
|
||||
|
@ -955,7 +956,7 @@ pub extern "system" fn librustzcash_sapling_output_proof(
|
|||
};
|
||||
|
||||
// Construct a payment address
|
||||
let payment_address = sapling_crypto::primitives::PaymentAddress {
|
||||
let payment_address = PaymentAddress {
|
||||
pk_d: pk_d,
|
||||
diversifier: diversifier,
|
||||
};
|
||||
|
@ -1086,7 +1087,7 @@ pub extern "system" fn librustzcash_sapling_spend_proof(
|
|||
};
|
||||
|
||||
// Grab the diversifier from the caller
|
||||
let diversifier = sapling_crypto::primitives::Diversifier(unsafe { *diversifier });
|
||||
let diversifier = Diversifier(unsafe { *diversifier });
|
||||
|
||||
// The caller chooses the note randomness
|
||||
let rcm = match Fs::from_repr(read_fs(&(unsafe { &*rcm })[..])) {
|
||||
|
|
|
@ -2,8 +2,8 @@ use ff::{PrimeField, PrimeFieldRepr};
|
|||
use pairing::bls12_381::Bls12;
|
||||
use rand_core::RngCore;
|
||||
use rand_os::OsRng;
|
||||
use sapling_crypto::jubjub::{edwards, JubjubBls12};
|
||||
use sapling_crypto::primitives::{Diversifier, ViewingKey};
|
||||
use zcash_primitives::jubjub::{edwards, JubjubBls12};
|
||||
use zcash_primitives::primitives::{Diversifier, ViewingKey};
|
||||
|
||||
use {
|
||||
librustzcash_sapling_generate_r, librustzcash_sapling_ka_agree,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use ff::{PrimeField, PrimeFieldRepr};
|
||||
use pairing::bls12_381::Bls12;
|
||||
use sapling_crypto::{
|
||||
use zcash_primitives::{
|
||||
jubjub::{fs::FsRepr, FixedGenerators, JubjubEngine, JubjubParams},
|
||||
primitives::{Diversifier, ProofGenerationKey},
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use sapling_crypto::jubjub::{FixedGenerators, JubjubParams};
|
||||
use zcash_primitives::jubjub::{FixedGenerators, JubjubParams};
|
||||
|
||||
use super::JUBJUB;
|
||||
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
use ff::{PrimeField, PrimeFieldRepr};
|
||||
use pairing::bls12_381::Bls12;
|
||||
use sapling_crypto::{
|
||||
jubjub::{FixedGenerators, JubjubEngine},
|
||||
redjubjub::{PrivateKey, PublicKey, Signature},
|
||||
};
|
||||
use zcash_primitives::jubjub::{FixedGenerators, JubjubEngine};
|
||||
use zcash_primitives::redjubjub::{PrivateKey, PublicKey, Signature};
|
||||
|
||||
use super::JUBJUB;
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
/target/
|
||||
**/*.rs.bk
|
||||
Cargo.lock
|
|
@ -1,14 +0,0 @@
|
|||
Copyrights in the "sapling-crypto" library are retained by their contributors. No
|
||||
copyright assignment is required to contribute to the "sapling-crypto" library.
|
||||
|
||||
The "sapling-crypto" library is licensed under either of
|
||||
|
||||
* Apache License, Version 2.0, (see ./LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* MIT license (see ./LICENSE-MIT or http://opensource.org/licenses/MIT)
|
||||
|
||||
at your option.
|
||||
|
||||
Unless you explicitly state otherwise, any contribution intentionally
|
||||
submitted for inclusion in the work by you, as defined in the Apache-2.0
|
||||
license, shall be dual licensed as above, without any additional terms or
|
||||
conditions.
|
|
@ -1,27 +0,0 @@
|
|||
[package]
|
||||
authors = ["Sean Bowe <sean@z.cash>"]
|
||||
description = "Cryptographic library for Zcash Sapling"
|
||||
documentation = "https://github.com/zcash-hackworks/sapling"
|
||||
homepage = "https://github.com/zcash-hackworks/sapling"
|
||||
license = "MIT/Apache-2.0"
|
||||
name = "sapling-crypto"
|
||||
repository = "https://github.com/zcash-hackworks/sapling"
|
||||
version = "0.0.1"
|
||||
|
||||
[dependencies.pairing]
|
||||
path = "../pairing"
|
||||
features = ["expose-arith"]
|
||||
|
||||
[dependencies]
|
||||
bellman = { path = "../bellman" }
|
||||
blake2b_simd = "0.5"
|
||||
blake2s_simd = "0.5"
|
||||
ff = { path = "../ff" }
|
||||
rand_core = "0.5"
|
||||
digest = "0.8"
|
||||
byteorder = "1"
|
||||
|
||||
[dev-dependencies]
|
||||
hex-literal = "0.1"
|
||||
rand_xorshift = "0.2"
|
||||
sha2 = "0.8"
|
|
@ -1,201 +0,0 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -1,23 +0,0 @@
|
|||
Permission is hereby granted, free of charge, to any
|
||||
person obtaining a copy of this software and associated
|
||||
documentation files (the "Software"), to deal in the
|
||||
Software without restriction, including without
|
||||
limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software
|
||||
is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice
|
||||
shall be included in all copies or substantial portions
|
||||
of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
||||
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
||||
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
||||
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
|
@ -1,23 +0,0 @@
|
|||
# sapling-crypto
|
||||
|
||||
This repository contains a (work-in-progress) implementation of Zcash's "Sapling" cryptography.
|
||||
|
||||
## Security Warnings
|
||||
|
||||
This library is currently under development and has not been reviewed.
|
||||
|
||||
## License
|
||||
|
||||
Licensed under either of
|
||||
|
||||
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
|
||||
|
||||
at your option.
|
||||
|
||||
### Contribution
|
||||
|
||||
Unless you explicitly state otherwise, any contribution intentionally
|
||||
submitted for inclusion in the work by you, as defined in the Apache-2.0
|
||||
license, shall be dual licensed as above, without any additional terms or
|
||||
conditions.
|
|
@ -1,27 +0,0 @@
|
|||
extern crate pairing;
|
||||
extern crate bellman;
|
||||
extern crate blake2b_simd;
|
||||
extern crate blake2s_simd;
|
||||
extern crate digest;
|
||||
extern crate ff;
|
||||
extern crate rand_core;
|
||||
extern crate byteorder;
|
||||
|
||||
#[cfg(test)]
|
||||
#[macro_use]
|
||||
extern crate hex_literal;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate rand_xorshift;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate sha2;
|
||||
|
||||
pub mod jubjub;
|
||||
pub mod group_hash;
|
||||
pub mod circuit;
|
||||
pub mod pedersen_hash;
|
||||
pub mod primitives;
|
||||
pub mod constants;
|
||||
pub mod redjubjub;
|
||||
pub mod util;
|
|
@ -9,7 +9,6 @@ edition = "2018"
|
|||
[dependencies]
|
||||
bech32 = "0.7"
|
||||
pairing = { path = "../pairing" }
|
||||
sapling-crypto = { path = "../sapling-crypto" }
|
||||
zcash_primitives = { path = "../zcash_primitives" }
|
||||
|
||||
[dev-dependencies]
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
use bech32::{self, Error, FromBase32, ToBase32};
|
||||
use pairing::bls12_381::Bls12;
|
||||
use sapling_crypto::{
|
||||
use zcash_primitives::{
|
||||
jubjub::edwards,
|
||||
primitives::{Diversifier, PaymentAddress},
|
||||
};
|
||||
|
@ -98,15 +98,15 @@ pub fn decode_extended_full_viewing_key(
|
|||
/// use pairing::bls12_381::Bls12;
|
||||
/// use rand_core::SeedableRng;
|
||||
/// use rand_xorshift::XorShiftRng;
|
||||
/// use sapling_crypto::{
|
||||
/// jubjub::edwards,
|
||||
/// primitives::{Diversifier, PaymentAddress},
|
||||
/// };
|
||||
/// use zcash_client_backend::{
|
||||
/// constants::testnet::HRP_SAPLING_PAYMENT_ADDRESS,
|
||||
/// encoding::encode_payment_address,
|
||||
/// };
|
||||
/// use zcash_primitives::JUBJUB;
|
||||
/// use zcash_primitives::{
|
||||
/// jubjub::edwards,
|
||||
/// primitives::{Diversifier, PaymentAddress},
|
||||
/// JUBJUB,
|
||||
/// };
|
||||
///
|
||||
/// let rng = &mut XorShiftRng::from_seed([
|
||||
/// 0x59, 0x62, 0xbe, 0x3d, 0x76, 0x3d, 0x31, 0x8d, 0x17, 0xdb, 0x37, 0x32, 0x54, 0x06,
|
||||
|
@ -138,15 +138,15 @@ pub fn encode_payment_address(hrp: &str, addr: &PaymentAddress<Bls12>) -> String
|
|||
/// use pairing::bls12_381::Bls12;
|
||||
/// use rand_core::SeedableRng;
|
||||
/// use rand_xorshift::XorShiftRng;
|
||||
/// use sapling_crypto::{
|
||||
/// jubjub::edwards,
|
||||
/// primitives::{Diversifier, PaymentAddress},
|
||||
/// };
|
||||
/// use zcash_client_backend::{
|
||||
/// constants::testnet::HRP_SAPLING_PAYMENT_ADDRESS,
|
||||
/// encoding::decode_payment_address,
|
||||
/// };
|
||||
/// use zcash_primitives::JUBJUB;
|
||||
/// use zcash_primitives::{
|
||||
/// jubjub::edwards,
|
||||
/// primitives::{Diversifier, PaymentAddress},
|
||||
/// JUBJUB,
|
||||
/// };
|
||||
///
|
||||
/// let rng = &mut XorShiftRng::from_seed([
|
||||
/// 0x59, 0x62, 0xbe, 0x3d, 0x76, 0x3d, 0x31, 0x8d, 0x17, 0xdb, 0x37, 0x32, 0x54, 0x06,
|
||||
|
@ -187,7 +187,7 @@ mod tests {
|
|||
use pairing::bls12_381::Bls12;
|
||||
use rand_core::SeedableRng;
|
||||
use rand_xorshift::XorShiftRng;
|
||||
use sapling_crypto::{
|
||||
use zcash_primitives::{
|
||||
jubjub::edwards,
|
||||
primitives::{Diversifier, PaymentAddress},
|
||||
};
|
||||
|
|
|
@ -8,6 +8,7 @@ authors = [
|
|||
[dependencies]
|
||||
aes = "0.3"
|
||||
blake2b_simd = "0.5"
|
||||
blake2s_simd = "0.5"
|
||||
byteorder = "1"
|
||||
crypto_api_chachapoly = "0.2.1"
|
||||
ff = { path = "../ff" }
|
||||
|
@ -18,5 +19,8 @@ pairing = { path = "../pairing" }
|
|||
rand = "0.7"
|
||||
rand_core = "0.5"
|
||||
rand_os = "0.2"
|
||||
sapling-crypto = { path = "../sapling-crypto" }
|
||||
sha2 = "0.8"
|
||||
|
||||
[dev-dependencies]
|
||||
hex-literal = "0.1"
|
||||
rand_xorshift = "0.2"
|
||||
|
|
|
@ -1,20 +1,22 @@
|
|||
#![feature(test)]
|
||||
|
||||
extern crate rand;
|
||||
extern crate rand_core;
|
||||
extern crate rand_os;
|
||||
extern crate test;
|
||||
extern crate pairing;
|
||||
extern crate sapling_crypto;
|
||||
extern crate zcash_primitives;
|
||||
|
||||
use rand::{Rand, thread_rng};
|
||||
use rand_core::RngCore;
|
||||
use rand_os::OsRng;
|
||||
use pairing::bls12_381::Bls12;
|
||||
use sapling_crypto::jubjub::JubjubBls12;
|
||||
use sapling_crypto::pedersen_hash::{pedersen_hash, Personalization};
|
||||
use zcash_primitives::jubjub::JubjubBls12;
|
||||
use zcash_primitives::pedersen_hash::{pedersen_hash, Personalization};
|
||||
|
||||
#[bench]
|
||||
fn bench_pedersen_hash(b: &mut test::Bencher) {
|
||||
let params = JubjubBls12::new();
|
||||
let rng = &mut thread_rng();
|
||||
let bits = (0..510).map(|_| bool::rand(rng)).collect::<Vec<_>>();
|
||||
let rng = &mut OsRng;
|
||||
let bits = (0..510).map(|_| (rng.next_u32() % 2) != 0).collect::<Vec<_>>();
|
||||
let personalization = Personalization::MerkleTree(31);
|
||||
|
||||
b.iter(|| {
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
use blake2b_simd::{Hash as Blake2bHash, Params as Blake2bParams};
|
||||
use ff::{PrimeField, PrimeFieldRepr};
|
||||
use sapling_crypto::{
|
||||
use crate::{
|
||||
jubjub::{edwards, FixedGenerators, JubjubEngine, JubjubParams, ToUniform, Unknown},
|
||||
primitives::{ProofGenerationKey, ViewingKey},
|
||||
};
|
||||
|
@ -188,7 +188,7 @@ impl<E: JubjubEngine> FullViewingKey<E> {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use pairing::bls12_381::Bls12;
|
||||
use sapling_crypto::jubjub::{edwards, FixedGenerators, JubjubParams, PrimeOrder};
|
||||
use crate::jubjub::{edwards, FixedGenerators, JubjubParams, PrimeOrder};
|
||||
use std::error::Error;
|
||||
|
||||
use super::FullViewingKey;
|
||||
|
|
|
@ -3,6 +3,7 @@ extern crate lazy_static;
|
|||
|
||||
extern crate aes;
|
||||
extern crate blake2b_simd;
|
||||
extern crate blake2s_simd;
|
||||
extern crate byteorder;
|
||||
extern crate crypto_api_chachapoly;
|
||||
extern crate ff;
|
||||
|
@ -12,25 +13,38 @@ extern crate pairing;
|
|||
extern crate rand;
|
||||
extern crate rand_core;
|
||||
extern crate rand_os;
|
||||
extern crate sapling_crypto;
|
||||
extern crate sha2;
|
||||
|
||||
use sapling_crypto::jubjub::JubjubBls12;
|
||||
#[cfg(test)]
|
||||
#[macro_use]
|
||||
extern crate hex_literal;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate rand_xorshift;
|
||||
|
||||
pub mod block;
|
||||
pub mod constants;
|
||||
pub mod group_hash;
|
||||
pub mod jubjub;
|
||||
pub mod keys;
|
||||
pub mod legacy;
|
||||
pub mod merkle_tree;
|
||||
pub mod note_encryption;
|
||||
pub mod pedersen_hash;
|
||||
pub mod primitives;
|
||||
pub mod prover;
|
||||
pub mod redjubjub;
|
||||
pub mod sapling;
|
||||
mod serialize;
|
||||
pub mod transaction;
|
||||
mod util;
|
||||
pub mod zip32;
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_vectors;
|
||||
|
||||
use jubjub::JubjubBls12;
|
||||
|
||||
lazy_static! {
|
||||
pub static ref JUBJUB: JubjubBls12 = { JubjubBls12::new() };
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ use crypto_api_chachapoly::{ChaCha20Ietf, ChachaPolyIetf};
|
|||
use ff::{PrimeField, PrimeFieldRepr};
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
use sapling_crypto::{
|
||||
use crate::{
|
||||
jubjub::{
|
||||
edwards,
|
||||
fs::{Fs, FsRepr},
|
||||
|
@ -211,18 +211,16 @@ fn prf_ock(
|
|||
/// extern crate ff;
|
||||
/// extern crate pairing;
|
||||
/// extern crate rand_os;
|
||||
/// extern crate sapling_crypto;
|
||||
/// extern crate zcash_primitives;
|
||||
///
|
||||
/// use ff::Field;
|
||||
/// use pairing::bls12_381::Bls12;
|
||||
/// use rand_os::OsRng;
|
||||
/// use sapling_crypto::{
|
||||
/// jubjub::fs::Fs,
|
||||
/// primitives::{Diversifier, PaymentAddress, ValueCommitment},
|
||||
/// };
|
||||
/// use zcash_primitives::{
|
||||
/// jubjub::fs::Fs,
|
||||
/// keys::OutgoingViewingKey,
|
||||
/// note_encryption::{Memo, SaplingNoteEncryption},
|
||||
/// primitives::{Diversifier, PaymentAddress, ValueCommitment},
|
||||
/// JUBJUB,
|
||||
/// };
|
||||
///
|
||||
|
@ -551,7 +549,7 @@ mod tests {
|
|||
use pairing::bls12_381::{Bls12, Fr, FrRepr};
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
use rand_os::OsRng;
|
||||
use sapling_crypto::{
|
||||
use crate::{
|
||||
jubjub::{
|
||||
edwards,
|
||||
fs::{Fs, FsRepr},
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
//! Abstractions over the proving system and parameters.
|
||||
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use sapling_crypto::{
|
||||
use crate::{
|
||||
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},
|
||||
};
|
||||
|
@ -75,14 +75,15 @@ pub(crate) mod mock {
|
|||
use ff::Field;
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use rand_os::OsRng;
|
||||
use sapling_crypto::{
|
||||
|
||||
use crate::{
|
||||
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,
|
||||
|
|
|
@ -3,10 +3,12 @@
|
|||
|
||||
use ff::{Field, PrimeField, PrimeFieldRepr};
|
||||
use rand_core::RngCore;
|
||||
use crate::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<E: JubjubEngine, R: Read>(reader: R) -> io::Result<E::Fs> {
|
||||
let mut s_repr = <E::Fs as PrimeField>::Repr::default();
|
||||
|
@ -209,7 +211,7 @@ mod tests {
|
|||
use rand_core::SeedableRng;
|
||||
use rand_xorshift::XorShiftRng;
|
||||
|
||||
use jubjub::{JubjubBls12, fs::Fs, edwards};
|
||||
use crate::jubjub::{edwards, fs::Fs, JubjubBls12};
|
||||
|
||||
use super::*;
|
||||
|
|
@ -3,19 +3,18 @@
|
|||
use ff::{BitIterator, PrimeField, PrimeFieldRepr};
|
||||
use pairing::bls12_381::{Bls12, Fr, FrRepr};
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
use sapling_crypto::{
|
||||
use crate::{
|
||||
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 =
|
||||
sapling_crypto::circuit::sapling::TREE_DEPTH;
|
||||
pub const SAPLING_COMMITMENT_TREE_DEPTH: usize = 32;
|
||||
|
||||
/// Compute a parent node in the Sapling commitment tree given its two children.
|
||||
pub fn merkle_hash(depth: usize, lhs: &FrRepr, rhs: &FrRepr) -> FrRepr {
|
||||
|
|
|
@ -3,10 +3,9 @@
|
|||
use ff::Field;
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use rand::{rngs::OsRng, seq::SliceRandom, CryptoRng, RngCore};
|
||||
use sapling_crypto::{
|
||||
use crate::{
|
||||
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},
|
||||
|
@ -534,7 +534,8 @@ impl<R: RngCore + CryptoRng> Builder<R> {
|
|||
mod tests {
|
||||
use ff::{Field, PrimeField};
|
||||
use rand::rngs::OsRng;
|
||||
use sapling_crypto::jubjub::fs::Fs;
|
||||
|
||||
use crate::jubjub::fs::Fs;
|
||||
|
||||
use super::{Builder, Error};
|
||||
use crate::{
|
||||
|
|
|
@ -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 crate::jubjub::{edwards, Unknown};
|
||||
use std::io::{self, Read, Write};
|
||||
|
||||
use legacy::Script;
|
||||
use redjubjub::{PublicKey, Signature};
|
||||
use JUBJUB;
|
||||
|
||||
pub mod amount;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
use ff::Field;
|
||||
use pairing::bls12_381::Bls12;
|
||||
use rand_os::OsRng;
|
||||
use sapling_crypto::{
|
||||
jubjub::{fs::Fs, FixedGenerators},
|
||||
redjubjub::PrivateKey,
|
||||
};
|
||||
|
||||
use crate::jubjub::{fs::Fs, FixedGenerators};
|
||||
|
||||
use super::{components::Amount, sighash::signature_hash, Transaction, TransactionData};
|
||||
use legacy::Script;
|
||||
use redjubjub::PrivateKey;
|
||||
use JUBJUB;
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use blake2b_simd::Params;
|
||||
|
||||
use jubjub::{JubjubEngine, ToUniform};
|
||||
use crate::jubjub::{JubjubEngine, ToUniform};
|
||||
|
||||
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();
|
|
@ -4,7 +4,8 @@ use byteorder::{ByteOrder, LittleEndian, ReadBytesExt, WriteBytesExt};
|
|||
use ff::Field;
|
||||
use fpe::ff1::{BinaryNumeralString, FF1};
|
||||
use pairing::bls12_381::Bls12;
|
||||
use sapling_crypto::{
|
||||
|
||||
use crate::{
|
||||
jubjub::{fs::Fs, FixedGenerators, JubjubEngine, JubjubParams, ToUniform},
|
||||
primitives::{Diversifier, PaymentAddress, ViewingKey},
|
||||
};
|
||||
|
|
|
@ -13,9 +13,12 @@ directories = { version = "1", optional = true }
|
|||
ff = { path = "../ff" }
|
||||
pairing = { path = "../pairing" }
|
||||
rand_os = "0.2"
|
||||
sapling-crypto = { path = "../sapling-crypto" }
|
||||
zcash_primitives = { path = "../zcash_primitives" }
|
||||
|
||||
[dev-dependencies]
|
||||
rand_core = "0.5"
|
||||
rand_xorshift = "0.2"
|
||||
|
||||
[features]
|
||||
default = ["local-prover"]
|
||||
local-prover = ["directories"]
|
||||
|
|
|
@ -1,21 +1,22 @@
|
|||
extern crate ff;
|
||||
extern crate sapling_crypto;
|
||||
extern crate bellman;
|
||||
extern crate pairing;
|
||||
extern crate rand_core;
|
||||
extern crate rand_xorshift;
|
||||
extern crate zcash_primitives;
|
||||
extern crate zcash_proofs;
|
||||
|
||||
use ff::Field;
|
||||
use std::time::{Duration, Instant};
|
||||
use sapling_crypto::jubjub::{
|
||||
use zcash_primitives::jubjub::{
|
||||
JubjubBls12,
|
||||
edwards,
|
||||
fs,
|
||||
};
|
||||
use sapling_crypto::circuit::sapling::{
|
||||
use zcash_proofs::circuit::sapling::{
|
||||
Spend
|
||||
};
|
||||
use sapling_crypto::primitives::{
|
||||
use zcash_primitives::primitives::{
|
||||
Diversifier,
|
||||
ProofGenerationKey,
|
||||
ValueCommitment
|
|
@ -0,0 +1,5 @@
|
|||
pub mod ecc;
|
||||
pub mod pedersen_hash;
|
||||
|
||||
pub mod sapling;
|
||||
pub mod sprout;
|
|
@ -6,27 +6,27 @@ use bellman::{
|
|||
ConstraintSystem
|
||||
};
|
||||
|
||||
use super::{
|
||||
use bellman::gadgets::{
|
||||
Assignment
|
||||
};
|
||||
|
||||
use super::num::{
|
||||
use bellman::gadgets::num::{
|
||||
AllocatedNum,
|
||||
Num
|
||||
};
|
||||
|
||||
use ::jubjub::{
|
||||
use zcash_primitives::jubjub::{
|
||||
edwards,
|
||||
JubjubEngine,
|
||||
JubjubParams,
|
||||
FixedGenerators
|
||||
};
|
||||
|
||||
use super::lookup::{
|
||||
use bellman::gadgets::lookup::{
|
||||
lookup3_xy
|
||||
};
|
||||
|
||||
use super::boolean::Boolean;
|
||||
use bellman::gadgets::boolean::Boolean;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct EdwardsPoint<E: Engine> {
|
||||
|
@ -753,22 +753,23 @@ mod test {
|
|||
use rand_core::{RngCore, SeedableRng};
|
||||
use rand_xorshift::XorShiftRng;
|
||||
|
||||
use ::circuit::test::*;
|
||||
use ::jubjub::{
|
||||
use bellman::gadgets::test::*;
|
||||
use zcash_primitives::jubjub::{
|
||||
montgomery,
|
||||
edwards,
|
||||
JubjubBls12,
|
||||
JubjubParams,
|
||||
FixedGenerators
|
||||
};
|
||||
use ::jubjub::fs::Fs;
|
||||
use zcash_primitives::jubjub::fs::Fs;
|
||||
|
||||
use super::{
|
||||
MontgomeryPoint,
|
||||
EdwardsPoint,
|
||||
AllocatedNum,
|
||||
fixed_base_multiplication
|
||||
};
|
||||
use super::super::boolean::{
|
||||
use bellman::gadgets::boolean::{
|
||||
Boolean,
|
||||
AllocatedBit
|
||||
};
|
|
@ -1,23 +1,20 @@
|
|||
use super::*;
|
||||
use super::ecc::{
|
||||
MontgomeryPoint,
|
||||
EdwardsPoint
|
||||
};
|
||||
use super::boolean::Boolean;
|
||||
use ::jubjub::*;
|
||||
use bellman::gadgets::boolean::Boolean;
|
||||
use zcash_primitives::jubjub::*;
|
||||
use bellman::{
|
||||
ConstraintSystem
|
||||
ConstraintSystem, SynthesisError
|
||||
};
|
||||
use super::lookup::*;
|
||||
pub use pedersen_hash::Personalization;
|
||||
use bellman::gadgets::lookup::*;
|
||||
pub use zcash_primitives::pedersen_hash::Personalization;
|
||||
|
||||
impl Personalization {
|
||||
fn get_constant_bools(&self) -> Vec<Boolean> {
|
||||
self.get_bits()
|
||||
fn get_constant_bools(person: &Personalization) -> Vec<Boolean> {
|
||||
person.get_bits()
|
||||
.into_iter()
|
||||
.map(|e| Boolean::constant(e))
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn pedersen_hash<E: JubjubEngine, CS>(
|
||||
|
@ -28,7 +25,7 @@ pub fn pedersen_hash<E: JubjubEngine, CS>(
|
|||
) -> Result<EdwardsPoint<E>, SynthesisError>
|
||||
where CS: ConstraintSystem<E>
|
||||
{
|
||||
let personalization = personalization.get_constant_bools();
|
||||
let personalization = get_constant_bools(&personalization);
|
||||
assert_eq!(personalization.len(), 6);
|
||||
|
||||
let mut edwards_result = None;
|
||||
|
@ -113,8 +110,9 @@ pub fn pedersen_hash<E: JubjubEngine, CS>(
|
|||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use ::circuit::test::*;
|
||||
use ::circuit::boolean::{Boolean, AllocatedBit};
|
||||
use bellman::gadgets::test::*;
|
||||
use bellman::gadgets::boolean::{Boolean, AllocatedBit};
|
||||
use zcash_primitives::pedersen_hash;
|
||||
use ff::PrimeField;
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use rand_core::{RngCore, SeedableRng};
|
||||
|
@ -177,7 +175,7 @@ mod test {
|
|||
|
||||
assert!(cs.is_satisfied());
|
||||
|
||||
let expected = ::pedersen_hash::pedersen_hash::<Bls12, _>(
|
||||
let expected = pedersen_hash::pedersen_hash::<Bls12, _>(
|
||||
Personalization::MerkleTree(1),
|
||||
input.clone().into_iter(),
|
||||
params
|
||||
|
@ -187,7 +185,7 @@ mod test {
|
|||
assert_eq!(res.get_y().get_value().unwrap(), expected.1);
|
||||
|
||||
// Test against the output of a different personalization
|
||||
let unexpected = ::pedersen_hash::pedersen_hash::<Bls12, _>(
|
||||
let unexpected = pedersen_hash::pedersen_hash::<Bls12, _>(
|
||||
Personalization::MerkleTree(0),
|
||||
input.into_iter(),
|
||||
params
|
|
@ -6,28 +6,28 @@ use bellman::{
|
|||
Circuit
|
||||
};
|
||||
|
||||
use jubjub::{
|
||||
use zcash_primitives::jubjub::{
|
||||
JubjubEngine,
|
||||
FixedGenerators
|
||||
};
|
||||
|
||||
use constants;
|
||||
use zcash_primitives::constants;
|
||||
|
||||
use primitives::{
|
||||
use zcash_primitives::primitives::{
|
||||
ValueCommitment,
|
||||
ProofGenerationKey,
|
||||
PaymentAddress
|
||||
};
|
||||
|
||||
use super::Assignment;
|
||||
use super::boolean;
|
||||
use bellman::gadgets::Assignment;
|
||||
use bellman::gadgets::boolean;
|
||||
use super::ecc;
|
||||
use super::pedersen_hash;
|
||||
use super::blake2s;
|
||||
use super::num;
|
||||
use super::multipack;
|
||||
use bellman::gadgets::blake2s;
|
||||
use bellman::gadgets::num;
|
||||
use bellman::gadgets::multipack;
|
||||
|
||||
pub const TREE_DEPTH: usize = 32;
|
||||
pub const TREE_DEPTH: usize = zcash_primitives::sapling::SAPLING_COMMITMENT_TREE_DEPTH;
|
||||
|
||||
/// This is an instance of the `Spend` circuit.
|
||||
pub struct Spend<'a, E: JubjubEngine> {
|
||||
|
@ -598,13 +598,16 @@ impl<'a, E: JubjubEngine> Circuit<E> for Output<'a, E> {
|
|||
|
||||
#[test]
|
||||
fn test_input_circuit_with_bls12_381() {
|
||||
use bellman::gadgets::test::*;
|
||||
use ff::{BitIterator, Field};
|
||||
use pairing::bls12_381::*;
|
||||
use rand_core::{RngCore, SeedableRng};
|
||||
use rand_xorshift::XorShiftRng;
|
||||
|
||||
use ::circuit::test::*;
|
||||
use jubjub::{JubjubBls12, fs, edwards};
|
||||
use zcash_primitives::{
|
||||
jubjub::{JubjubBls12, fs, edwards},
|
||||
pedersen_hash,
|
||||
primitives::{Diversifier, Note, ProofGenerationKey},
|
||||
};
|
||||
|
||||
let params = &JubjubBls12::new();
|
||||
let rng = &mut XorShiftRng::from_seed([
|
||||
|
@ -623,7 +626,7 @@ fn test_input_circuit_with_bls12_381() {
|
|||
let nsk = fs::Fs::random(rng);
|
||||
let ak = edwards::Point::rand(rng, params).mul_by_cofactor(params);
|
||||
|
||||
let proof_generation_key = ::primitives::ProofGenerationKey {
|
||||
let proof_generation_key = ProofGenerationKey {
|
||||
ak: ak.clone(),
|
||||
nsk: nsk.clone()
|
||||
};
|
||||
|
@ -636,7 +639,7 @@ fn test_input_circuit_with_bls12_381() {
|
|||
let diversifier = {
|
||||
let mut d = [0; 11];
|
||||
rng.fill_bytes(&mut d);
|
||||
::primitives::Diversifier(d)
|
||||
Diversifier(d)
|
||||
};
|
||||
|
||||
if let Some(p) = viewing_key.into_payment_address(
|
||||
|
@ -657,7 +660,7 @@ fn test_input_circuit_with_bls12_381() {
|
|||
{
|
||||
let rk = viewing_key.rk(ar, params).into_xy();
|
||||
let expected_value_cm = value_commitment.cm(params).into_xy();
|
||||
let note = ::primitives::Note {
|
||||
let note = Note {
|
||||
value: value_commitment.value,
|
||||
g_d: g_d.clone(),
|
||||
pk_d: payment_address.pk_d.clone(),
|
||||
|
@ -685,8 +688,8 @@ fn test_input_circuit_with_bls12_381() {
|
|||
lhs.reverse();
|
||||
rhs.reverse();
|
||||
|
||||
cur = ::pedersen_hash::pedersen_hash::<Bls12, _>(
|
||||
::pedersen_hash::Personalization::MerkleTree(i),
|
||||
cur = pedersen_hash::pedersen_hash::<Bls12, _>(
|
||||
pedersen_hash::Personalization::MerkleTree(i),
|
||||
lhs.into_iter()
|
||||
.take(Fr::NUM_BITS as usize)
|
||||
.chain(rhs.into_iter().take(Fr::NUM_BITS as usize)),
|
||||
|
@ -739,12 +742,15 @@ fn test_input_circuit_with_bls12_381() {
|
|||
|
||||
#[test]
|
||||
fn test_output_circuit_with_bls12_381() {
|
||||
use bellman::gadgets::test::*;
|
||||
use ff::Field;
|
||||
use pairing::bls12_381::*;
|
||||
use rand_core::{RngCore, SeedableRng};
|
||||
use rand_xorshift::XorShiftRng;
|
||||
use ::circuit::test::*;
|
||||
use jubjub::{JubjubBls12, fs, edwards};
|
||||
use zcash_primitives::{
|
||||
jubjub::{JubjubBls12, fs, edwards},
|
||||
primitives::{Diversifier, ProofGenerationKey},
|
||||
};
|
||||
|
||||
let params = &JubjubBls12::new();
|
||||
let rng = &mut XorShiftRng::from_seed([
|
||||
|
@ -761,7 +767,7 @@ fn test_output_circuit_with_bls12_381() {
|
|||
let nsk = fs::Fs::random(rng);
|
||||
let ak = edwards::Point::rand(rng, params).mul_by_cofactor(params);
|
||||
|
||||
let proof_generation_key = ::primitives::ProofGenerationKey {
|
||||
let proof_generation_key = ProofGenerationKey {
|
||||
ak: ak.clone(),
|
||||
nsk: nsk.clone()
|
||||
};
|
||||
|
@ -774,7 +780,7 @@ fn test_output_circuit_with_bls12_381() {
|
|||
let diversifier = {
|
||||
let mut d = [0; 11];
|
||||
rng.fill_bytes(&mut d);
|
||||
::primitives::Diversifier(d)
|
||||
Diversifier(d)
|
||||
};
|
||||
|
||||
if let Some(p) = viewing_key.into_payment_address(
|
|
@ -1,9 +1,9 @@
|
|||
use pairing::{Engine};
|
||||
use bellman::{ConstraintSystem, SynthesisError};
|
||||
use circuit::sha256::{
|
||||
use bellman::gadgets::sha256::{
|
||||
sha256
|
||||
};
|
||||
use circuit::boolean::{
|
||||
use bellman::gadgets::boolean::{
|
||||
Boolean
|
||||
};
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
use pairing::{Engine};
|
||||
use bellman::{ConstraintSystem, SynthesisError};
|
||||
use circuit::sha256::{
|
||||
use bellman::gadgets::sha256::{
|
||||
sha256_block_no_padding
|
||||
};
|
||||
use circuit::boolean::{
|
||||
use bellman::gadgets::boolean::{
|
||||
AllocatedBit,
|
||||
Boolean
|
||||
};
|
|
@ -1,11 +1,11 @@
|
|||
use ff::Field;
|
||||
use pairing::Engine;
|
||||
use bellman::{ConstraintSystem, SynthesisError, Circuit, LinearCombination};
|
||||
use circuit::boolean::{
|
||||
use bellman::gadgets::boolean::{
|
||||
AllocatedBit,
|
||||
Boolean
|
||||
};
|
||||
use circuit::multipack::pack_into_inputs;
|
||||
use bellman::gadgets::multipack::pack_into_inputs;
|
||||
|
||||
mod prfs;
|
||||
mod commitment;
|
||||
|
@ -355,7 +355,7 @@ fn witness_u252<E, CS>(
|
|||
#[test]
|
||||
fn test_sprout_constraints() {
|
||||
use pairing::bls12_381::{Bls12};
|
||||
use ::circuit::test::*;
|
||||
use bellman::gadgets::test::*;
|
||||
|
||||
use byteorder::{WriteBytesExt, ReadBytesExt, LittleEndian};
|
||||
|
||||
|
@ -479,7 +479,7 @@ fn test_sprout_constraints() {
|
|||
expected_inputs.write_u64::<LittleEndian>(vpub_old.unwrap()).unwrap();
|
||||
expected_inputs.write_u64::<LittleEndian>(vpub_new.unwrap()).unwrap();
|
||||
|
||||
use circuit::multipack;
|
||||
use bellman::gadgets::multipack;
|
||||
|
||||
let expected_inputs = multipack::bytes_to_bits(&expected_inputs);
|
||||
let expected_inputs = multipack::compute_multipacking::<Bls12>(&expected_inputs);
|
|
@ -1,6 +1,6 @@
|
|||
use pairing::{Engine};
|
||||
use bellman::{ConstraintSystem, SynthesisError};
|
||||
use circuit::boolean::{Boolean};
|
||||
use bellman::gadgets::boolean::{Boolean};
|
||||
|
||||
use super::*;
|
||||
use super::prfs::*;
|
|
@ -1,9 +1,9 @@
|
|||
use pairing::{Engine};
|
||||
use bellman::{ConstraintSystem, SynthesisError};
|
||||
use circuit::sha256::{
|
||||
use bellman::gadgets::sha256::{
|
||||
sha256_block_no_padding
|
||||
};
|
||||
use circuit::boolean::{
|
||||
use bellman::gadgets::boolean::{
|
||||
Boolean
|
||||
};
|
||||
|
|
@ -4,18 +4,24 @@ extern crate byteorder;
|
|||
extern crate ff;
|
||||
extern crate pairing;
|
||||
extern crate rand_os;
|
||||
extern crate sapling_crypto;
|
||||
extern crate zcash_primitives;
|
||||
|
||||
#[cfg(feature = "local-prover")]
|
||||
extern crate directories;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate rand_core;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate rand_xorshift;
|
||||
|
||||
use bellman::groth16::{prepare_verifying_key, Parameters, PreparedVerifyingKey, VerifyingKey};
|
||||
use pairing::bls12_381::Bls12;
|
||||
use std::fs::File;
|
||||
use std::io::{self, BufReader};
|
||||
use std::path::Path;
|
||||
|
||||
pub mod circuit;
|
||||
mod hashreader;
|
||||
pub mod sapling;
|
||||
|
||||
|
|
|
@ -3,15 +3,15 @@
|
|||
use bellman::groth16::{Parameters, PreparedVerifyingKey};
|
||||
use directories::BaseDirs;
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use sapling_crypto::{
|
||||
use zcash_primitives::{
|
||||
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,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use pairing::bls12_381::Bls12;
|
||||
use sapling_crypto::jubjub::{
|
||||
use zcash_primitives::jubjub::{
|
||||
edwards, fs::FsRepr, FixedGenerators, JubjubBls12, JubjubParams, Unknown,
|
||||
};
|
||||
use zcash_primitives::transaction::components::Amount;
|
||||
|
|
|
@ -1,23 +1,25 @@
|
|||
use bellman::groth16::{
|
||||
create_random_proof, verify_proof, Parameters, PreparedVerifyingKey, Proof,
|
||||
use bellman::{
|
||||
gadgets::multipack,
|
||||
groth16::{
|
||||
create_random_proof, verify_proof, Parameters, PreparedVerifyingKey, Proof,
|
||||
},
|
||||
};
|
||||
use ff::Field;
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use rand_os::OsRng;
|
||||
use sapling_crypto::{
|
||||
circuit::{
|
||||
multipack,
|
||||
sapling::{Output, Spend},
|
||||
},
|
||||
use zcash_primitives::{
|
||||
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;
|
||||
use crate::circuit::sapling::{Output, Spend};
|
||||
|
||||
/// A context object for creating the Sapling components of a Zcash transaction.
|
||||
pub struct SaplingProvingContext {
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
use bellman::groth16::{verify_proof, PreparedVerifyingKey, Proof};
|
||||
use bellman::{
|
||||
gadgets::multipack,
|
||||
groth16::{verify_proof, PreparedVerifyingKey, Proof},
|
||||
};
|
||||
use ff::Field;
|
||||
use pairing::bls12_381::{Bls12, Fr};
|
||||
use sapling_crypto::{
|
||||
circuit::multipack,
|
||||
jubjub::{edwards, FixedGenerators, JubjubBls12, Unknown},
|
||||
use zcash_primitives::jubjub::{edwards, FixedGenerators, JubjubBls12, Unknown};
|
||||
use zcash_primitives::{
|
||||
redjubjub::{PublicKey, Signature},
|
||||
transaction::components::Amount,
|
||||
};
|
||||
use zcash_primitives::transaction::components::Amount;
|
||||
|
||||
use super::compute_value_balance;
|
||||
|
||||
|
|
Loading…
Reference in New Issue