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 HashAPI struct {
11 fieldAPI frontend.API
12}
13
14func NewHashAPI(
15 fieldAPI frontend.API,
16) *HashAPI {
17 return &HashAPI{
18 fieldAPI: fieldAPI,
19 }
20}
21
22func (h *HashAPI) SelectHash(bit frontend.Variable, leftHash, rightHash Hash) Hash {
23 var returnHash Hash
24 for i := 0; i < 4; i++ {
25 returnHash[i] = h.fieldAPI.Select(bit, leftHash[i], rightHash[i]).(F)
26 }
27
28 return returnHash
29}
30
31func (h *HashAPI) Lookup2Hash(b0 frontend.Variable, b1 frontend.Variable, h0, h1, h2, h3 Hash) Hash {
32 var returnHash Hash
33
34 for i := 0; i < 4; i++ {
35 returnHash[i] = h.fieldAPI.Lookup2(b0, b1, h0[i], h1[i], h2[i], h3[i]).(F)
36 }
37
38 return returnHash
39}
40
41func (h *HashAPI) AssertIsEqualHash(h1, h2 Hash) {
42 for i := 0; i < 4; i++ {
43 h.fieldAPI.AssertIsEqual(h1[0], h2[0])
44 }
45}
46
47func (h *HashAPI) PrintHash(hash Hash) {
48 for i := 0; i < 4; i++ {
49 fmt.Println("Hash Limb", i)
50 h.fieldAPI.Println(hash[i])
51 }
52}