Turn main into test
This commit is contained in:
parent
972b34238d
commit
1b0cf0a8fa
|
@ -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"] }
|
||||
|
|
|
@ -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};
|
||||
|
|
55
src/lib.rs
55
src/lib.rs
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
60
src/main.rs
60
src/main.rs
|
@ -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);
|
||||
}
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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::{
|
||||
|
|
Loading…
Reference in New Issue