mirror of
https://github.com/privacy-scaling-explorations/zk-kit.git
synced 2026-04-22 03:00:15 -04:00
Former-commit-id: 51b9d25c806568b5194ca64722f121b438ab521f [formerly e3b1aaf2d5]
Former-commit-id: 9501c4cfd83c52c8ab91c5e61d5c0d4dd7cfd712
45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
import { ZkProtocol } from "./zk-protocol"
|
|
import { genSignalHash, poseidonHash } from "./utils"
|
|
import { Identity, MerkleProof } from "@libsem/types"
|
|
|
|
class Semaphore extends ZkProtocol {
|
|
/**
|
|
* Creates witness for semaphore proof
|
|
* @param identity semaphore identity
|
|
* @param merkleProof merkle proof that identity exists in semaphore tree
|
|
* @param externalNullifier topic on which vote should be broadcasted
|
|
* @param signal signal that should be broadcasted
|
|
* @param shouldHash should signal be hashed before broadcast
|
|
* @returns
|
|
*/
|
|
genWitness(
|
|
identity: Identity,
|
|
merkleProof: MerkleProof,
|
|
externalNullifier: string | bigint,
|
|
signal: string,
|
|
shouldHash = true
|
|
): any {
|
|
return {
|
|
identity_nullifier: identity.identityNullifier,
|
|
identity_trapdoor: identity.identityTrapdoor,
|
|
identity_path_index: merkleProof.indices,
|
|
path_elements: merkleProof.pathElements,
|
|
external_nullifier: externalNullifier,
|
|
signal_hash: shouldHash ? genSignalHash(signal) : signal
|
|
}
|
|
}
|
|
|
|
/**
|
|
* generates nullifier hash for semaphore proof
|
|
* @param externalNullifier external nullifier
|
|
* @param identityNullifier identity nullifier
|
|
* @param nLevels depth of tree
|
|
* @returns
|
|
*/
|
|
genNullifierHash(externalNullifier: string | bigint, identityNullifier: string | bigint): bigint {
|
|
return poseidonHash([BigInt(externalNullifier), BigInt(identityNullifier)])
|
|
}
|
|
}
|
|
|
|
export default new Semaphore()
|