gnark-plonky2-verifier/plonky2_verifier/hash.go
plonky2_verifier/hash.goRaw
1package plonky2_verifier
2
3import (
4 "fmt"
5 . "gnark-ed25519/field"
6
7 "github.com/consensys/gnark/frontend"
8)
9
10type Hash = [4]F
11
12func SelectHash(fieldAPI frontend.API, bit frontend.Variable, leftHash, rightHash Hash) Hash {
13 var returnHash Hash
14 for i := 0; i < 4; i++ {
15 returnHash[i] = fieldAPI.Select(bit, leftHash[i], rightHash[i]).(F)
16 }
17
18 return returnHash
19}
20
21func Lookup2Hash(fieldAPI frontend.API, b0 frontend.Variable, b1 frontend.Variable, h0, h1, h2, h3 Hash) Hash {
22 var returnHash Hash
23
24 for i := 0; i < 4; i++ {
25 returnHash[i] = fieldAPI.Lookup2(b0, b1, h0[i], h1[i], h2[i], h3[i]).(F)
26 }
27
28 return returnHash
29}
30
31func AssertIsEqualHash(fieldAPI frontend.API, h1, h2 Hash) {
32 for i := 0; i < 4; i++ {
33 fieldAPI.AssertIsEqual(h1[0], h2[0])
34 }
35}
36
37func PrintHash(f frontend.API, h Hash) {
38 for i := 0; i < 4; i++ {
39 fmt.Println("Hash Limb", i)
40 f.Println(h[i])
41 }
42}