arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
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}