1
0
Fork 0
mirror of synced 2025-09-24 04:40:05 +00:00
ZoKrates/zokrates_cli/examples/merkleTree/sha256PathProof3.zok
2020-07-16 13:20:43 +02:00

29 lines
No EOL
957 B
Text

import "hashes/sha256/512bit" as sha256
import "utils/multiplexer/256bit" as multiplex
// Merkle-Tree inclusion proof for tree depth 3
def main(field treeDepth, u32[8] rootDigest, private u32[8] leafDigest, private bool[2] directionSelector, u32[8] PathDigest0, private u32[8] PathDigest1) -> ():
//Setup
u32[8] currentDigest = leafDigest
field counter = 1
bool currentDirection = false
//Loop up the tree
currentDirection = directionSelector[0]
u32[8] lhs = multiplex(currentDirection, currentDigest, PathDigest0)
u32[8] rhs = multiplex(!currentDirection, currentDigest, PathDigest0)
currentDigest = sha256(lhs, rhs)
counter = counter + 1
currentDirection = directionSelector[1]
lhs = multiplex(currentDirection, currentDigest, PathDigest1)
rhs = multiplex(!currentDirection, currentDigest, PathDigest1)
currentDigest = sha256(lhs, rhs)
counter = counter + 1
assert(counter == treeDepth)
assert(rootDigest == currentDigest)
return