Skip to content

πŸ¦€ Rust support library for semaphore

License

Notifications You must be signed in to change notification settings

guildxyz/semaphore-rs

This branch is 90 commits behind worldcoin/semaphore-rs:main.

Folders and files

NameName
Last commit message
Last commit date
Jun 21, 2023
Mar 26, 2023
Sep 26, 2023
Jun 20, 2023
Mar 23, 2023
Jun 20, 2023
Jun 12, 2023
Oct 23, 2023
Mar 1, 2022
Jun 14, 2023
Oct 30, 2023
Feb 1, 2022

Repository files navigation

πŸ¦€ semaphore-rs

Rust support library for using semaphore. It's mostly a Rust rewrite of zk-kit, but just focuses on semaphore (for now) and still covers a much smaller scope. It's using ark-circom under the hood for generating the groth16 proofs.

Usage

Add this line to your cargo.toml:

semaphore = { git = "https://github.com/worldcoin/semaphore-rs" }

Building semaphore circuits

  1. Check out submodule (if not done before already): git submodule update --init --recursive
  2. Install semaphore dependencies cd semaphore && npm install
  3. Compile circuits npm exec ts-node ./scripts/compile-circuits.ts
  4. You'll find the zkey and wasm file in semaphore/build/snark

Example

Example as in src/lib.rs, run with cargo test.

use semaphore::{get_supported_depths, hash_to_field, Field, identity::Identity,
                poseidon_tree::LazyPoseidonTree, protocol::*};
use num_bigint::BigInt;

// generate identity
let mut secret = *b"secret";
let id = Identity::from_secret(&mut secret, None);

// Get the first available tree depth. This is controlled by the crate features.
let depth = get_supported_depths()[0];

// generate merkle tree
let leaf = Field::from(0);
let mut tree = LazyPoseidonTree::new(depth, leaf).derived();
tree = tree.update(0, &id.commitment());

let merkle_proof = tree.proof(0);
let root = tree.root();

// change signal and external_nullifier here
let signal_hash = hash_to_field(b"xxx");
let external_nullifier_hash = hash_to_field(b"appId");

let nullifier_hash = generate_nullifier_hash(&id, external_nullifier_hash);

let proof = generate_proof(&id, &merkle_proof, external_nullifier_hash, signal_hash).unwrap();
let success = verify_proof(root, nullifier_hash, signal_hash, external_nullifier_hash, &proof, depth).unwrap();

assert!(success);

About

πŸ¦€ Rust support library for semaphore

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%