Skip to content

Commit cec54d3

Browse files
committed
update batcher circom verifier to accept raw pub inputs
1 parent a3675f1 commit cec54d3

File tree

3 files changed

+45
-14
lines changed

3 files changed

+45
-14
lines changed

crates/batcher/go_verifiers_lib/go.mod

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ module verifier
22

33
go 1.22.3
44

5+
replace github.com/iden3/go-rapidsnark => github.com/MarcosNicolau/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4
6+
7+
replace github.com/iden3/go-rapidsnark/types => github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4
8+
9+
replace github.com/iden3/go-rapidsnark/verifier => github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4
10+
511
require (
612
github.com/consensys/gnark v0.12.0
713
github.com/consensys/gnark-crypto v0.17.0

crates/batcher/go_verifiers_lib/go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:NAZOH8mk5hgWpxf1ujVw+uggsRBMcXiiC7R7sZXVfW0=
2+
github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4=
3+
github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:Sz8H0fl9kjg8iZmaHT8pyCx4Smy5JJtq0OyKfz8iXls=
4+
github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI=
15
github.com/bits-and-blooms/bitset v1.20.0 h1:2F+rfL86jE2d/bmw7OhqUg2Sj/1rURkBn3MdfoPyRVU=
26
github.com/bits-and-blooms/bitset v1.20.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8=
37
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
@@ -21,10 +25,6 @@ github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73
2125
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
2226
github.com/iden3/go-iden3-crypto v0.0.17 h1:NdkceRLJo/pI4UpcjVah4lN/a3yzxRUGXqxbWcYh9mY=
2327
github.com/iden3/go-iden3-crypto v0.0.17/go.mod h1:dLpM4vEPJ3nDHzhWFXDjzkn1qHoBeOT/3UEhXsEsP3E=
24-
github.com/iden3/go-rapidsnark/types v0.0.3 h1:f0s1Qdut1qHe1O67+m+xUVRBPwSXnq5j0xSrBi0jqM4=
25-
github.com/iden3/go-rapidsnark/types v0.0.3/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4=
26-
github.com/iden3/go-rapidsnark/verifier v0.0.5 h1:J7y0ovrEjDQoWtZmlrp4tgGng1A9faMeYsQH4igAEqA=
27-
github.com/iden3/go-rapidsnark/verifier v0.0.5/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI=
2828
github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b h1:AvQTK7l0PTHODD06PVQX1Tn2o29sRIaKIDOvTJmKurY=
2929
github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b/go.mod h1:e0JHb27/P6WorCJS3YolbY5XffS4PGBuoW38OthLkDs=
3030
github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4=

crates/batcher/go_verifiers_lib/verifier.go

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ import "C"
1414
import (
1515
"bytes"
1616
"encoding/json"
17-
"github.com/iden3/go-rapidsnark/types"
18-
"github.com/iden3/go-rapidsnark/verifier"
17+
"math/big"
1918

2019
"log"
2120
"unsafe"
@@ -24,6 +23,8 @@ import (
2423
"github.com/consensys/gnark/backend/groth16"
2524
"github.com/consensys/gnark/backend/plonk"
2625
"github.com/consensys/gnark/backend/witness"
26+
"github.com/iden3/go-rapidsnark/types"
27+
"github.com/iden3/go-rapidsnark/verifier"
2728
)
2829

2930
func listRefToBytes(listRef C.ListRef) []byte {
@@ -122,6 +123,20 @@ func verifyGnarkGroth16Proof(proofBytesRef C.ListRef, pubInputBytesRef C.ListRef
122123
return err == nil
123124
}
124125

126+
func bytesToBigInts32(b []byte) []*big.Int {
127+
if len(b)%32 != 0 {
128+
panic("pubInputBytes length is not a multiple of 32")
129+
}
130+
131+
inputs := make([]*big.Int, 0, len(b)/32)
132+
for i := 0; i < len(b); i += 32 {
133+
chunk := b[i : i+32]
134+
bi := new(big.Int).SetBytes(chunk)
135+
inputs = append(inputs, bi)
136+
}
137+
return inputs
138+
}
139+
125140
//export VerifyCircomGroth16ProofBN256
126141
func VerifyCircomGroth16ProofBN256(proofBytesRef C.ListRef, pubInputBytesRef C.ListRef, verificationKeyBytesRef C.ListRef) bool {
127142
proofBytes := listRefToBytes(proofBytesRef)
@@ -131,26 +146,36 @@ func VerifyCircomGroth16ProofBN256(proofBytesRef C.ListRef, pubInputBytesRef C.L
131146
proofData := &types.ProofData{}
132147
err := json.Unmarshal(proofBytes, proofData)
133148
if err != nil {
134-
log.Printf("Could not marshal proof: %v", err)
149+
log.Printf("Could not unmarshal proof: %v", err)
135150
return false
136151
}
137152

138-
var pubSignals []string
139-
err = json.Unmarshal(pubInputBytes, &pubSignals)
153+
parsedProofData, err := verifier.ParseProofData(*proofData)
140154
if err != nil {
141-
log.Printf("Error unmarshaling JSON: %v", err)
155+
log.Printf("Could not parse proof: %v", err)
142156
return false
143157
}
144158

145-
zkProof := types.ZKProof{
146-
Proof: proofData,
147-
PubSignals: pubSignals,
159+
var vkStr verifier.VkJSON
160+
err = json.Unmarshal(verificationKeyBytes, &vkStr)
161+
if err != nil {
162+
log.Printf("Could not unmarshal vk: %v", err)
163+
return false
164+
}
165+
166+
vk, err := verifier.ParseVK(vkStr)
167+
if err != nil {
168+
log.Printf("Could not parse vk: %v", err)
169+
return false
148170
}
149171

150-
err = verifier.VerifyGroth16(zkProof, verificationKeyBytes)
172+
inputs := bytesToBigInts32(pubInputBytes)
173+
174+
err = verifier.VerifyRaw(vk, parsedProofData, inputs)
151175
if err != nil {
152176
log.Printf("Could not verify Groth16 proof: %v", err)
153177
return false
154178
}
179+
155180
return true
156181
}

0 commit comments

Comments
 (0)