mirror of
https://github.com/vacp2p/research.git
synced 2025-02-23 11:48:22 +00:00
Semaphore experiments
Based on https://github.com/kobigurk/semaphore but only focusing on the core circom circuits, not contracts or on chain orchestration.
See https://github.com/iden3/snarkjs for a quick start.
According to https://github.com/kobigurk/semaphore#zksnark-statement:
The statement assures that given public inputs:
signal_hash
external_nullifier
root
nullifiers_hash
and private inputs:
identity_pk
identity_nullifier
identity_trapdoor
identity_path_elements
identity_path_index
auth_sig_r
auth_sig_s
the following conditions hold:
The commitment of the identity structure (identity_pk, identity_nullifier, identity_trapdoor) exists in the identity tree with the root root, using the path (identity_path_elements, identity_path_index). This ensures that the user was added to the system at some point in the past.
nullifiers_hash is uniquely derived from external_nullifier, identity_nullifier and identity_path_index. This ensures a user cannot broadcast a signal with the same external_nullifier more than once.
The message (external_nullifier, signal_hash) is signed by the secret key corresponding to identity_pk, having the signature (auth_sig_r, auth_sig_s). This ensures that a state of the contract having a specific external_nullifier, ensuring no double-signaling.
So we need to setup these identity_* and auth_* inputs.