From 1b0cf0a8face4688db1faf8a455d46f1cf7df616 Mon Sep 17 00:00:00 2001 From: Remco Bloemen Date: Mon, 28 Feb 2022 17:17:42 -0800 Subject: [PATCH] Turn main into test --- Cargo.toml | 3 --- src/identity.rs | 2 +- src/lib.rs | 55 +++++++++++++++++++++++++++++++++++++++- src/main.rs | 60 -------------------------------------------- src/merkle_tree.rs | 2 +- src/poseidon_tree.rs | 2 +- src/protocol.rs | 2 +- 7 files changed, 58 insertions(+), 68 deletions(-) delete mode 100644 src/main.rs diff --git a/Cargo.toml b/Cargo.toml index 41da83e..5c2b465 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,9 +13,6 @@ categories = ["cryptography"] readme = "Readme.md" license-file = "mit-license.md" -[lib] -name = "semaphore" - [dependencies] ark-circom = { git = "https://github.com/gakonst/ark-circom", features=["circom-2"] } ark-std = { version = "0.3.0", default-features = false, features = ["parallel"] } diff --git a/src/identity.rs b/src/identity.rs index f31e9f8..f585c5a 100644 --- a/src/identity.rs +++ b/src/identity.rs @@ -1,6 +1,6 @@ use num_bigint::{BigInt, Sign}; use once_cell::sync::Lazy; -use poseidon_rs::{Poseidon}; +use poseidon_rs::Poseidon; use sha2::{Digest, Sha256}; use crate::util::{bigint_to_fr, fr_to_bigint}; diff --git a/src/lib.rs b/src/lib.rs index ee28584..4ec79ce 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,4 +9,57 @@ use ark_bn254::Parameters; use ark_ec::bn::Bn; pub type Groth16Proof = ark_groth16::Proof>; -pub type EthereumGroth16Proof = ark_circom::ethereum::Proof; \ No newline at end of file +pub type EthereumGroth16Proof = ark_circom::ethereum::Proof; + +#[cfg(test)] +mod test { + use super::*; + use hash::*; + use hex_literal::hex; + use identity::*; + use poseidon_tree::*; + use protocol::*; + + #[test] + fn test_end_to_end() { + // generate identity + let id = Identity::new(b"hello"); + + // generate merkle tree + const LEAF: Hash = Hash::from_bytes_be(hex!( + "0000000000000000000000000000000000000000000000000000000000000000" + )); + + let mut tree = PoseidonTree::new(21, LEAF); + let (_, leaf) = id.commitment().to_bytes_be(); + tree.set(0, leaf.into()); + + let merkle_proof = tree.proof(0).expect("proof should exist"); + let root = tree.root().into(); + + // change signal and external_nullifier here + let signal = "xxx".as_bytes(); + let external_nullifier = "appId".as_bytes(); + + let nullifier_hash = generate_nullifier_hash(&id, external_nullifier); + + let config = SnarkFileConfig { + zkey: "./snarkfiles/semaphore.zkey".to_string(), + wasm: "./snarkfiles/semaphore.wasm".to_string(), + }; + + let proof = + generate_proof(&config, &id, &merkle_proof, external_nullifier, signal).unwrap(); + let success = verify_proof( + &config, + &root, + &nullifier_hash, + signal, + external_nullifier, + &proof, + ) + .unwrap(); + + assert!(success); + } +} diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 86feae0..0000000 --- a/src/main.rs +++ /dev/null @@ -1,60 +0,0 @@ -mod hash; -mod identity; -mod merkle_tree; -mod poseidon_tree; -mod protocol; -mod util; - -use hash::*; -use hex_literal::hex; -use identity::*; -use num_bigint::{BigInt}; -use poseidon_tree::*; -use protocol::*; - -fn main() { - // generate identity - let id = Identity::new(b"hello"); - dbg!(&id); - dbg!(id.commitment()); - - // generate merkle tree - const LEAF: Hash = Hash::from_bytes_be(hex!( - "0000000000000000000000000000000000000000000000000000000000000000" - )); - - let mut tree = PoseidonTree::new(21, LEAF); - let (_, leaf) = id.commitment().to_bytes_be(); - tree.set(0, leaf.into()); - - let root: BigInt = tree.root().into(); - dbg!(root); - - let merkle_proof = tree.proof(0).expect("proof should exist"); - let root = tree.root().into(); - - // change signal and external_nullifier here - let signal = "xxx".as_bytes(); - let external_nullifier = "appId".as_bytes(); - - let nullifier_hash = generate_nullifier_hash(&id, external_nullifier); - dbg!(&nullifier_hash); - - let config = SnarkFileConfig { - zkey: "./snarkfiles/semaphore.zkey".to_string(), - wasm: "./snarkfiles/semaphore.wasm".to_string(), - }; - - let proof = generate_proof(&config, &id, &merkle_proof, external_nullifier, signal).unwrap(); - let success = verify_proof( - &config, - &root, - &nullifier_hash, - signal, - external_nullifier, - &proof, - ) - .unwrap(); - - dbg!(success); -} diff --git a/src/merkle_tree.rs b/src/merkle_tree.rs index b435a75..7e1d12e 100644 --- a/src/merkle_tree.rs +++ b/src/merkle_tree.rs @@ -10,7 +10,7 @@ use std::{ }; use num_bigint::BigInt; -use serde::{Serialize, Deserialize}; +use serde::{Deserialize, Serialize}; /// Hash types, values and algorithms for a Merkle tree pub trait Hasher { diff --git a/src/poseidon_tree.rs b/src/poseidon_tree.rs index c3da2d3..a62d603 100644 --- a/src/poseidon_tree.rs +++ b/src/poseidon_tree.rs @@ -5,7 +5,7 @@ use crate::{ use ff::{PrimeField, PrimeFieldRepr}; use once_cell::sync::Lazy; use poseidon_rs::{Fr, FrRepr, Poseidon}; -use serde::{Serialize, Deserialize}; +use serde::{Deserialize, Serialize}; static POSEIDON: Lazy = Lazy::new(Poseidon::new); diff --git a/src/protocol.rs b/src/protocol.rs index a435303..23e9db4 100644 --- a/src/protocol.rs +++ b/src/protocol.rs @@ -9,7 +9,7 @@ use color_eyre::Result; use ethers_core::utils::keccak256; use num_bigint::{BigInt, Sign}; use once_cell::sync::Lazy; -use poseidon_rs::{Poseidon}; +use poseidon_rs::Poseidon; use std::{collections::HashMap, fs::File, ops::Shr}; use crate::{