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 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}