diff --git a/src/bin/beacon.rs b/src/bin/beacon.rs index ada2a3d..72f4d6a 100644 --- a/src/bin/beacon.rs +++ b/src/bin/beacon.rs @@ -1,22 +1,22 @@ -extern crate phase2; -extern crate pairing; -extern crate rand; extern crate blake2_rfc; extern crate byteorder; +extern crate pairing; +extern crate phase2; +extern crate rand; #[macro_use] extern crate hex_literal; -use std::fs::File; -use std::io::{BufWriter, BufReader}; use blake2_rfc::blake2b::Blake2b; +use std::fs::File; +use std::io::{BufReader, BufWriter}; fn main() { let current_params = File::open("params").expect("couldn't open `./params`"); - let mut current_params = BufReader::with_capacity(1024*1024, current_params); + let mut current_params = BufReader::with_capacity(1024 * 1024, current_params); let new_params = File::create("new_params").expect("couldn't create `./new_params`"); - let mut new_params = BufWriter::with_capacity(1024*1024, new_params); + let mut new_params = BufWriter::with_capacity(1024 * 1024, new_params); let mut sapling_spend = phase2::MPCParameters::read(&mut current_params, false) .expect("couldn't deserialize Sapling Spend params"); @@ -29,12 +29,13 @@ fn main() { // Create an RNG based on the outcome of the random beacon let rng = &mut { - use byteorder::{ReadBytesExt, BigEndian}; - use rand::{SeedableRng}; + use byteorder::{BigEndian, ReadBytesExt}; use rand::chacha::ChaChaRng; + use rand::SeedableRng; // Place beacon value here (2^42 SHA256 hash of Bitcoin block hash #534861) - let beacon_value: [u8; 32] = hex!("2bf41a959668e5b9b688e58d613b3dcc99ee159a880cf764ec67e6488d8b8af3"); + let beacon_value: [u8; 32] = + hex!("2bf41a959668e5b9b688e58d613b3dcc99ee159a880cf764ec67e6488d8b8af3"); print!("Final result of beacon: "); for b in beacon_value.iter() { @@ -46,7 +47,9 @@ fn main() { let mut seed = [0u32; 8]; for i in 0..8 { - seed[i] = digest.read_u32::().expect("digest is large enough for this to work"); + seed[i] = digest + .read_u32::() + .expect("digest is large enough for this to work"); } ChaChaRng::from_seed(&seed) @@ -56,9 +59,15 @@ fn main() { let h2 = sapling_output.contribute(rng); let h3 = sprout_joinsplit.contribute(rng); - sapling_spend.write(&mut new_params).expect("couldn't write new Sapling Spend params"); - sapling_output.write(&mut new_params).expect("couldn't write new Sapling Spend params"); - sprout_joinsplit.write(&mut new_params).expect("couldn't write new Sapling Spend params"); + sapling_spend + .write(&mut new_params) + .expect("couldn't write new Sapling Spend params"); + sapling_output + .write(&mut new_params) + .expect("couldn't write new Sapling Spend params"); + sprout_joinsplit + .write(&mut new_params) + .expect("couldn't write new Sapling Spend params"); let mut h = Blake2b::new(64); h.update(&h1); @@ -66,9 +75,11 @@ fn main() { h.update(&h3); let h = h.finalize(); - print!("Done!\n\n\ - Your contribution has been written to `./new_params`\n\n\ - The contribution you made is bound to the following hash:\n"); + print!( + "Done!\n\n\ + Your contribution has been written to `./new_params`\n\n\ + The contribution you made is bound to the following hash:\n" + ); for line in h.as_ref().chunks(16) { print!("\t"); diff --git a/src/bin/compute.rs b/src/bin/compute.rs index c91913d..593ec5d 100644 --- a/src/bin/compute.rs +++ b/src/bin/compute.rs @@ -1,18 +1,18 @@ -extern crate phase2; -extern crate pairing; -extern crate rand; extern crate blake2_rfc; +extern crate pairing; +extern crate phase2; +extern crate rand; -use std::fs::File; -use std::io::{BufWriter, BufReader}; use blake2_rfc::blake2b::Blake2b; +use std::fs::File; +use std::io::{BufReader, BufWriter}; fn main() { let current_params = File::open("params").expect("couldn't open `./params`"); - let mut current_params = BufReader::with_capacity(1024*1024, current_params); + let mut current_params = BufReader::with_capacity(1024 * 1024, current_params); let new_params = File::create("new_params").expect("couldn't create `./new_params`"); - let mut new_params = BufWriter::with_capacity(1024*1024, new_params); + let mut new_params = BufWriter::with_capacity(1024 * 1024, new_params); let mut sapling_spend = phase2::MPCParameters::read(&mut current_params, false) .expect("couldn't deserialize Sapling Spend params"); @@ -29,9 +29,15 @@ fn main() { let h2 = sapling_output.contribute(rng); let h3 = sprout_joinsplit.contribute(rng); - sapling_spend.write(&mut new_params).expect("couldn't write new Sapling Spend params"); - sapling_output.write(&mut new_params).expect("couldn't write new Sapling Spend params"); - sprout_joinsplit.write(&mut new_params).expect("couldn't write new Sapling Spend params"); + sapling_spend + .write(&mut new_params) + .expect("couldn't write new Sapling Spend params"); + sapling_output + .write(&mut new_params) + .expect("couldn't write new Sapling Spend params"); + sprout_joinsplit + .write(&mut new_params) + .expect("couldn't write new Sapling Spend params"); let mut h = Blake2b::new(64); h.update(&h1); @@ -39,9 +45,11 @@ fn main() { h.update(&h3); let h = h.finalize(); - print!("Done!\n\n\ - Your contribution has been written to `./new_params`\n\n\ - The contribution you made is bound to the following hash:\n"); + print!( + "Done!\n\n\ + Your contribution has been written to `./new_params`\n\n\ + The contribution you made is bound to the following hash:\n" + ); for line in h.as_ref().chunks(16) { print!("\t"); diff --git a/src/bin/new.rs b/src/bin/new.rs index 2bd6ce0..bc21f79 100644 --- a/src/bin/new.rs +++ b/src/bin/new.rs @@ -1,6 +1,6 @@ +extern crate pairing; extern crate phase2; extern crate sapling_crypto; -extern crate pairing; use std::fs::File; use std::io::BufWriter; @@ -20,8 +20,11 @@ fn main() { commitment_randomness: None, ar: None, auth_path: vec![None; 32], // Tree depth is 32 for sapling - anchor: None - }).unwrap().write(&mut params).unwrap(); + anchor: None, + }) + .unwrap() + .write(&mut params) + .unwrap(); // Sapling output circuit phase2::MPCParameters::new(sapling_crypto::circuit::sapling::Output { @@ -29,8 +32,11 @@ fn main() { value_commitment: None, payment_address: None, commitment_randomness: None, - esk: None - }).unwrap().write(&mut params).unwrap(); + esk: None, + }) + .unwrap() + .write(&mut params) + .unwrap(); // Sprout joinsplit circuit phase2::MPCParameters::new(sapling_crypto::circuit::sprout::JoinSplit { @@ -38,28 +44,37 @@ fn main() { vpub_new: None, h_sig: None, phi: None, - inputs: vec![sapling_crypto::circuit::sprout::JSInput { - value: None, - a_sk: None, - rho: None, - r: None, - auth_path: [None; 29] // Depth is 29 for Sprout - }, sapling_crypto::circuit::sprout::JSInput { - value: None, - a_sk: None, - rho: None, - r: None, - auth_path: [None; 29] // Depth is 29 for Sprout - }], - outputs: vec![sapling_crypto::circuit::sprout::JSOutput { - value: None, - a_pk: None, - r: None - }, sapling_crypto::circuit::sprout::JSOutput { - value: None, - a_pk: None, - r: None - }], + inputs: vec![ + sapling_crypto::circuit::sprout::JSInput { + value: None, + a_sk: None, + rho: None, + r: None, + auth_path: [None; 29], // Depth is 29 for Sprout + }, + sapling_crypto::circuit::sprout::JSInput { + value: None, + a_sk: None, + rho: None, + r: None, + auth_path: [None; 29], // Depth is 29 for Sprout + }, + ], + outputs: vec![ + sapling_crypto::circuit::sprout::JSOutput { + value: None, + a_pk: None, + r: None, + }, + sapling_crypto::circuit::sprout::JSOutput { + value: None, + a_pk: None, + r: None, + }, + ], rt: None, - }).unwrap().write(&mut params).unwrap(); + }) + .unwrap() + .write(&mut params) + .unwrap(); } diff --git a/src/bin/split_params.rs b/src/bin/split_params.rs index 4b2d0a5..a4ef36e 100644 --- a/src/bin/split_params.rs +++ b/src/bin/split_params.rs @@ -1,16 +1,16 @@ //! This binary just splits the parameters up into separate files. -extern crate phase2; -extern crate pairing; -extern crate rand; extern crate blake2_rfc; +extern crate pairing; +extern crate phase2; +extern crate rand; use std::fs::File; -use std::io::{BufWriter, BufReader}; +use std::io::{BufReader, BufWriter}; fn main() { let current_params = File::open("params").expect("couldn't open `./params`"); - let mut current_params = BufReader::with_capacity(1024*1024, current_params); + let mut current_params = BufReader::with_capacity(1024 * 1024, current_params); let sapling_spend = phase2::MPCParameters::read(&mut current_params, false) .expect("couldn't deserialize Sapling Spend params"); @@ -22,23 +22,29 @@ fn main() { .expect("couldn't deserialize Sprout JoinSplit params"); { - let f = File::create("sapling-spend.params").expect("couldn't create `./sapling-spend.params`"); - let mut f = BufWriter::with_capacity(1024*1024, f); - sapling_spend.write(&mut f) + let f = + File::create("sapling-spend.params").expect("couldn't create `./sapling-spend.params`"); + let mut f = BufWriter::with_capacity(1024 * 1024, f); + sapling_spend + .write(&mut f) .expect("couldn't write new Sapling Spend params"); } { - let f = File::create("sapling-output.params").expect("couldn't create `./sapling-output.params`"); - let mut f = BufWriter::with_capacity(1024*1024, f); - sapling_output.write(&mut f) + let f = File::create("sapling-output.params") + .expect("couldn't create `./sapling-output.params`"); + let mut f = BufWriter::with_capacity(1024 * 1024, f); + sapling_output + .write(&mut f) .expect("couldn't write new Sapling Output params"); } { - let f = File::create("sprout-groth16.params").expect("couldn't create `./sapling-groth16.params`"); - let mut f = BufWriter::with_capacity(1024*1024, f); - sprout_joinsplit.write(&mut f) + let f = File::create("sprout-groth16.params") + .expect("couldn't create `./sapling-groth16.params`"); + let mut f = BufWriter::with_capacity(1024 * 1024, f); + sprout_joinsplit + .write(&mut f) .expect("couldn't write new Sprout JoinSplit params"); } } diff --git a/src/bin/verify.rs b/src/bin/verify.rs index 25c5625..0d4bc97 100644 --- a/src/bin/verify.rs +++ b/src/bin/verify.rs @@ -1,11 +1,11 @@ +extern crate blake2_rfc; +extern crate pairing; extern crate phase2; extern crate sapling_crypto; -extern crate pairing; -extern crate blake2_rfc; +use blake2_rfc::blake2b::Blake2b; use std::fs::File; use std::io::BufReader; -use blake2_rfc::blake2b::Blake2b; fn main() { let jubjub_params = sapling_crypto::jubjub::JubjubBls12::new(); @@ -22,56 +22,69 @@ fn main() { let sprout_joinsplit = phase2::MPCParameters::read(&mut params, true) .expect("couldn't deserialize Sprout JoinSplit params"); - let sapling_spend_contributions = sapling_spend.verify(sapling_crypto::circuit::sapling::Spend { - params: &jubjub_params, - value_commitment: None, - proof_generation_key: None, - payment_address: None, - commitment_randomness: None, - ar: None, - auth_path: vec![None; 32], // Tree depth is 32 for sapling - anchor: None - }).expect("parameters are invalid"); + let sapling_spend_contributions = sapling_spend + .verify(sapling_crypto::circuit::sapling::Spend { + params: &jubjub_params, + value_commitment: None, + proof_generation_key: None, + payment_address: None, + commitment_randomness: None, + ar: None, + auth_path: vec![None; 32], // Tree depth is 32 for sapling + anchor: None, + }) + .expect("parameters are invalid"); - let sapling_output_contributions = sapling_output.verify(sapling_crypto::circuit::sapling::Output { - params: &jubjub_params, - value_commitment: None, - payment_address: None, - commitment_randomness: None, - esk: None - }).expect("parameters are invalid"); + let sapling_output_contributions = sapling_output + .verify(sapling_crypto::circuit::sapling::Output { + params: &jubjub_params, + value_commitment: None, + payment_address: None, + commitment_randomness: None, + esk: None, + }) + .expect("parameters are invalid"); - let sprout_joinsplit_contributions = sprout_joinsplit.verify(sapling_crypto::circuit::sprout::JoinSplit { - vpub_old: None, - vpub_new: None, - h_sig: None, - phi: None, - inputs: vec![sapling_crypto::circuit::sprout::JSInput { - value: None, - a_sk: None, - rho: None, - r: None, - auth_path: [None; 29] // Depth is 29 for Sprout - }, sapling_crypto::circuit::sprout::JSInput { - value: None, - a_sk: None, - rho: None, - r: None, - auth_path: [None; 29] // Depth is 29 for Sprout - }], - outputs: vec![sapling_crypto::circuit::sprout::JSOutput { - value: None, - a_pk: None, - r: None - }, sapling_crypto::circuit::sprout::JSOutput { - value: None, - a_pk: None, - r: None - }], - rt: None, - }).expect("parameters are invalid"); + let sprout_joinsplit_contributions = sprout_joinsplit + .verify(sapling_crypto::circuit::sprout::JoinSplit { + vpub_old: None, + vpub_new: None, + h_sig: None, + phi: None, + inputs: vec![ + sapling_crypto::circuit::sprout::JSInput { + value: None, + a_sk: None, + rho: None, + r: None, + auth_path: [None; 29], // Depth is 29 for Sprout + }, + sapling_crypto::circuit::sprout::JSInput { + value: None, + a_sk: None, + rho: None, + r: None, + auth_path: [None; 29], // Depth is 29 for Sprout + }, + ], + outputs: vec![ + sapling_crypto::circuit::sprout::JSOutput { + value: None, + a_pk: None, + r: None, + }, + sapling_crypto::circuit::sprout::JSOutput { + value: None, + a_pk: None, + r: None, + }, + ], + rt: None, + }) + .expect("parameters are invalid"); - for ((a, b), c) in sapling_spend_contributions.into_iter() + for ((a, b), c) in sapling_spend_contributions + .into_iter() .zip(sapling_output_contributions.into_iter()) .zip(sprout_joinsplit_contributions) { diff --git a/src/bin/verify_transform.rs b/src/bin/verify_transform.rs index 11b30ae..7845ac7 100644 --- a/src/bin/verify_transform.rs +++ b/src/bin/verify_transform.rs @@ -1,10 +1,10 @@ -extern crate phase2; -extern crate pairing; extern crate blake2_rfc; +extern crate pairing; +extern crate phase2; +use blake2_rfc::blake2b::Blake2b; use std::fs::File; use std::io::BufReader; -use blake2_rfc::blake2b::Blake2b; fn main() { let params = File::open("params").unwrap(); @@ -33,17 +33,17 @@ fn main() { let h1 = match phase2::verify_contribution(&sapling_spend, &new_sapling_spend) { Ok(hash) => hash, - Err(_) => panic!("invalid transformation!") + Err(_) => panic!("invalid transformation!"), }; let h2 = match phase2::verify_contribution(&sapling_output, &new_sapling_output) { Ok(hash) => hash, - Err(_) => panic!("invalid transformation!") + Err(_) => panic!("invalid transformation!"), }; let h3 = match phase2::verify_contribution(&sprout_joinsplit, &new_sprout_joinsplit) { Ok(hash) => hash, - Err(_) => panic!("invalid transformation!") + Err(_) => panic!("invalid transformation!"), }; let mut h = Blake2b::new(64);