Turn main into test

This commit is contained in:
Remco Bloemen 2022-02-28 17:17:42 -08:00
parent 972b34238d
commit 1b0cf0a8fa
7 changed files with 58 additions and 68 deletions

View File

@ -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"] }

View File

@ -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};

View File

@ -9,4 +9,57 @@ use ark_bn254::Parameters;
use ark_ec::bn::Bn;
pub type Groth16Proof = ark_groth16::Proof<Bn<Parameters>>;
pub type EthereumGroth16Proof = ark_circom::ethereum::Proof;
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);
}
}

View File

@ -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);
}

View File

@ -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 {

View File

@ -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<Poseidon> = Lazy::new(Poseidon::new);

View File

@ -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::{