mirror of
https://github.com/privacy-scaling-explorations/zk-kit.git
synced 2026-04-22 03:00:15 -04:00
Semaphore identities
Library for managing identites for Semaphore and Rln protocols.
🛠 Install
npm or yarn
Install the @libsem/protocols package with npm:
npm i @libsem/protocols
or yarn:
yarn add @libsem/protocols
📜 Usage
Import
import { ZkIdentity, Identity } from '@libsem/identity';
import { Semaphore, MerkleProof, IProof, generateMerkleProof, genExternalNullifier, genSignalHash } from '@libsem/protocols';
const { ZkIdentity } = require('@libsem/identity');
const { Semaphore, Rln, NRln, generateMerkleProof, genExternalNullifier, genSignalHash } = require('@libsem/protocols');
Merkle Proofs Generate merkle proof for your identity given the array of registered identity commitments
const identityCommitments: Array<bigint> = [...];
const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity);
const merkleProof: MerkleProof = generateMerkleProof(TREE_DEPTH, ZERO_VALUE, NUMBER_OF_LEAVES_PER_NODE, identityCommitments, identityCommitment);
Semaphore
In order to create semaphore proof, make sure to
const witness = Semaphore.genWitness(identity, merkleProof, externalNullifier, signal);
const fullProof = await Semaphore.genProof(witness, wasmFilePath, finalZkeyPath);
Serialization
const identity: Identity = ZkIdentity.genIdentity();
const serialized: string = ZkIdentity.serializeIdentity(identity);
const unserialized: Identity = ZkIdentity.unSerializeIdentity(serialized);
📜 Final Note
For full examples of how to integrate with contracts check https://github.com/appliedzkp/semaphore repository
For additional info check tests directory