Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions waku/waku_rln_relay/group_manager/on_chain/group_manager.nim
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,11 @@ method generateProof*(

let x = keccak.keccak256.digest(data)

let extNullifier = poseidon(@[@(epoch), @(rlnIdentifier)]).valueOr:
let epochHash = sha256(@(epoch)).valueOr:
return err("Failed to compute epoch hash: " & error)
let rlnIdentifierHash = sha256(@(rlnIdentifier)).valueOr:
return err("Failed to compute rln identifier hash: " & error)
let extNullifier = poseidon(@[@(epochHash), @(rlnIdentifierHash)]).valueOr:
return err("Failed to compute external nullifier: " & error)

let witness = RLNWitnessInput(
Expand Down Expand Up @@ -457,10 +461,15 @@ method verifyProof*(

var normalizedProof = proof

normalizedProof.externalNullifier = poseidon(
@[@(proof.epoch), @(proof.rlnIdentifier)]
).valueOr:
return err("Failed to compute external nullifier: " & error)
let epochHash = sha256(@(proof.epoch)).valueOr:
return err("Failed to compute epoch hash: " & error)
let rlnIdentifierHash = sha256(@(proof.rlnIdentifier)).valueOr:
return err("Failed to compute rln identifier hash: " & error)
let externalNullifier = poseidon(
@[@(epochHash), @(rlnIdentifierHash)]
).valueOr:
return err("Failed to compute external nullifier: " & error)
normalizedProof.externalNullifier = externalNullifier

let proofBytes = serialize(normalizedProof, input)
let proofBuffer = proofBytes.toBuffer()
Expand Down
13 changes: 9 additions & 4 deletions waku/waku_rln_relay/rln/wrappers.nim
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,8 @@ proc createRLNInstance*(): RLNResult =

proc sha256*(data: openArray[byte]): RlnRelayResult[MerkleNode] =
## a thin layer on top of the Nim wrapper of the sha256 hasher
var lenPrefData = encodeLengthPrefix(data)
var
hashInputBuffer = lenPrefData.toBuffer()
hashInputBuffer = data.toBuffer()
outputBuffer: Buffer # will holds the hash output

trace "sha256 hash input buffer length", bufflen = hashInputBuffer.len
Expand Down Expand Up @@ -181,8 +180,14 @@ proc toLeaves*(rateCommitments: seq[RateCommitment]): RlnRelayResult[seq[seq[byt
return ok(leaves)

proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] =
let externalNullifier = poseidon(@[@(proof.epoch), @(proof.rlnIdentifier)]).valueOr:
return err("could not construct the external nullifier")
let epochHash = sha256(@(proof.epoch)).valueOr:
return err("Failed to compute epoch hash: " & error)
let rlnIdentifierHash = sha256(@(proof.rlnIdentifier)).valueOr:
return err("Failed to compute rln identifier hash: " & error)
let externalNullifier = poseidon(
@[@(epochHash), @(rlnIdentifierHash)]
).valueOr:
return err("Failed to compute external nullifier: " & error)
return ok(
ProofMetadata(
nullifier: proof.nullifier,
Expand Down