Skip to content

Commit eb52727

Browse files
committed
fix: hash inputs for external nullifier, remove length prefix for sha256
1 parent 12952d0 commit eb52727

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

waku/waku_rln_relay/group_manager/on_chain/group_manager.nim

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,11 @@ method generateProof*(
379379

380380
let x = keccak.keccak256.digest(data)
381381

382-
let extNullifier = poseidon(@[@(epoch), @(rlnIdentifier)]).valueOr:
382+
let epochHash = sha256(@(epoch)).valueOr:
383+
return err("Failed to compute epoch hash: " & error)
384+
let rlnIdentifierHash = sha256(@(rlnIdentifier)).valueOr:
385+
return err("Failed to compute rln identifier hash: " & error)
386+
let externalNullifier = poseidon(@[@(epochHash), @(rlnIdentifierHash)]).valueOr:
383387
return err("Failed to compute external nullifier: " & error)
384388

385389
let witness = RLNWitnessInput(
@@ -457,10 +461,15 @@ method verifyProof*(
457461

458462
var normalizedProof = proof
459463

460-
normalizedProof.externalNullifier = poseidon(
461-
@[@(proof.epoch), @(proof.rlnIdentifier)]
462-
).valueOr:
463-
return err("Failed to compute external nullifier: " & error)
464+
let epochHash = sha256(@(proof.epoch)).valueOr:
465+
return err("Failed to compute epoch hash: " & error)
466+
let rlnIdentifierHash = sha256(@(proof.rlnIdentifier)).valueOr:
467+
return err("Failed to compute rln identifier hash: " & error)
468+
let externalNullifier = poseidon(
469+
@[@(epochHash), @(rlnIdentifierHash)]
470+
).valueOr:
471+
return err("Failed to compute external nullifier: " & error)
472+
normalizedProof.externalNullifier = externalNullifier
464473

465474
let proofBytes = serialize(normalizedProof, input)
466475
let proofBuffer = proofBytes.toBuffer()

waku/waku_rln_relay/rln/wrappers.nim

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,8 @@ proc createRLNInstance*(): RLNResult =
121121

122122
proc sha256*(data: openArray[byte]): RlnRelayResult[MerkleNode] =
123123
## a thin layer on top of the Nim wrapper of the sha256 hasher
124-
var lenPrefData = encodeLengthPrefix(data)
125124
var
126-
hashInputBuffer = lenPrefData.toBuffer()
125+
hashInputBuffer = data.toBuffer()
127126
outputBuffer: Buffer # will holds the hash output
128127

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

183182
proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] =
184-
let externalNullifier = poseidon(@[@(proof.epoch), @(proof.rlnIdentifier)]).valueOr:
185-
return err("could not construct the external nullifier")
183+
let epochHash = sha256(@(proof.epoch)).valueOr:
184+
return err("Failed to compute epoch hash: " & error)
185+
let rlnIdentifierHash = sha256(@(proof.rlnIdentifier)).valueOr:
186+
return err("Failed to compute rln identifier hash: " & error)
187+
let externalNullifier = poseidon(
188+
@[@(epochHash), @(rlnIdentifierHash)]
189+
).valueOr:
190+
return err("Failed to compute external nullifier: " & error)
186191
return ok(
187192
ProofMetadata(
188193
nullifier: proof.nullifier,

0 commit comments

Comments
 (0)