Skip to content

Commit c22391e

Browse files
committed
update operator circom verifier to accept raw pub inputs
1 parent cec54d3 commit c22391e

File tree

3 files changed

+45
-15
lines changed

3 files changed

+45
-15
lines changed

go.mod

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ go 1.22.3
44

55
toolchain go1.23.4
66

7+
replace github.com/iden3/go-rapidsnark => github.com/MarcosNicolau/go-rapidsnark v0.0.0-20250828172020-87df0a23ada4
8+
9+
replace github.com/iden3/go-rapidsnark/types => github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4
10+
11+
replace github.com/iden3/go-rapidsnark/verifier => github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4
12+
713
require (
814
github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1
915
github.com/ethereum/go-ethereum v1.14.0
@@ -18,7 +24,6 @@ require (
1824
github.com/consensys/gnark v0.12.0
1925
github.com/consensys/gnark-crypto v0.17.0
2026
github.com/fxamacker/cbor/v2 v2.7.0
21-
github.com/iden3/go-rapidsnark/types v0.0.3
2227
github.com/iden3/go-rapidsnark/verifier v0.0.5
2328
github.com/rs/zerolog v1.33.0
2429
github.com/ugorji/go/codec v1.2.12
@@ -63,6 +68,7 @@ require (
6368
github.com/gorilla/websocket v1.5.1 // indirect
6469
github.com/holiman/uint256 v1.2.4 // indirect
6570
github.com/iden3/go-iden3-crypto v0.0.17 // indirect
71+
github.com/iden3/go-rapidsnark/types v0.0.3 // indirect
6672
github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b // indirect
6773
github.com/klauspost/compress v1.17.7 // indirect
6874
github.com/lmittmann/tint v1.0.4 // indirect

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=
88
github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
99
github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1 h1:vW7AKcvt7fGlIeOMl2Ft9Au/ib8Z9ush8fSrpFSVr10=
1010
github.com/Layr-Labs/eigensdk-go v0.2.0-beta.1/go.mod h1:G4yqiK+5NfUuEMVGGncOEm7QskuGRPmKA7bKxpPzPT4=
11+
github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4 h1:NAZOH8mk5hgWpxf1ujVw+uggsRBMcXiiC7R7sZXVfW0=
12+
github.com/MarcosNicolau/go-rapidsnark/types v0.0.0-20250828172020-87df0a23ada4/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4=
13+
github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4 h1:Sz8H0fl9kjg8iZmaHT8pyCx4Smy5JJtq0OyKfz8iXls=
14+
github.com/MarcosNicolau/go-rapidsnark/verifier v0.0.0-20250828172020-87df0a23ada4/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI=
1115
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
1216
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
1317
github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
@@ -192,10 +196,6 @@ github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFck
192196
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
193197
github.com/iden3/go-iden3-crypto v0.0.17 h1:NdkceRLJo/pI4UpcjVah4lN/a3yzxRUGXqxbWcYh9mY=
194198
github.com/iden3/go-iden3-crypto v0.0.17/go.mod h1:dLpM4vEPJ3nDHzhWFXDjzkn1qHoBeOT/3UEhXsEsP3E=
195-
github.com/iden3/go-rapidsnark/types v0.0.3 h1:f0s1Qdut1qHe1O67+m+xUVRBPwSXnq5j0xSrBi0jqM4=
196-
github.com/iden3/go-rapidsnark/types v0.0.3/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4=
197-
github.com/iden3/go-rapidsnark/verifier v0.0.5 h1:J7y0ovrEjDQoWtZmlrp4tgGng1A9faMeYsQH4igAEqA=
198-
github.com/iden3/go-rapidsnark/verifier v0.0.5/go.mod h1:KgL3Yr9NehlFDI4EIWVLE3UDUi8ulyjbp7HcXSBfiGI=
199199
github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b h1:AvQTK7l0PTHODD06PVQX1Tn2o29sRIaKIDOvTJmKurY=
200200
github.com/ingonyama-zk/icicle/v3 v3.1.1-0.20241118092657-fccdb2f0921b/go.mod h1:e0JHb27/P6WorCJS3YolbY5XffS4PGBuoW38OthLkDs=
201201
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=

operator/pkg/operator.go

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"time"
1616

1717
rapidsnark_types "github.com/iden3/go-rapidsnark/types"
18-
"github.com/iden3/go-rapidsnark/verifier"
18+
rapidsnark_verifier "github.com/iden3/go-rapidsnark/verifier"
1919

2020
"github.com/ethereum/go-ethereum/crypto"
2121
"github.com/urfave/cli/v2"
@@ -621,30 +621,54 @@ func (o *Operator) verifyGnarkGroth16Proof(proofBytes []byte, pubInputBytes []by
621621

622622
// verifyCircomGroth16Bn256Proof verifies a Circom Groth16 proof using BN256 curve.
623623
func (o *Operator) verifyCircomGroth16Bn256Proof(proofBytes []byte, pubInputBytes []byte, verificationKeyBytes []byte) bool {
624+
bytesToBigInts32 := func(b []byte) []*big.Int {
625+
if len(b)%32 != 0 {
626+
panic("pubInputBytes length is not a multiple of 32")
627+
}
628+
629+
inputs := make([]*big.Int, 0, len(b)/32)
630+
for i := 0; i < len(b); i += 32 {
631+
chunk := b[i : i+32]
632+
bi := new(big.Int).SetBytes(chunk)
633+
inputs = append(inputs, bi)
634+
}
635+
return inputs
636+
}
637+
624638
proofData := &rapidsnark_types.ProofData{}
625639
err := json.Unmarshal(proofBytes, proofData)
626640
if err != nil {
627-
o.Logger.Infof("Could not marshal proof: %v", err)
641+
log.Printf("Could not unmarshal proof: %v", err)
628642
return false
629643
}
630644

631-
var pubSignals []string
632-
err = json.Unmarshal(pubInputBytes, &pubSignals)
645+
parsedProofData, err := rapidsnark_verifier.ParseProofData(*proofData)
633646
if err != nil {
634-
o.Logger.Infof("Could not marshal public signals: %v", err)
647+
log.Printf("Could not parse proof: %v", err)
635648
return false
636649
}
637650

638-
zkProof := rapidsnark_types.ZKProof{
639-
Proof: proofData,
640-
PubSignals: pubSignals,
651+
var vkStr rapidsnark_verifier.VkJSON
652+
err = json.Unmarshal(verificationKeyBytes, &vkStr)
653+
if err != nil {
654+
log.Printf("Could not unmarshal vk: %v", err)
655+
return false
641656
}
642657

643-
err = verifier.VerifyGroth16(zkProof, verificationKeyBytes)
658+
vk, err := rapidsnark_verifier.ParseVK(vkStr)
644659
if err != nil {
645-
o.Logger.Infof("Could not verify Circom Groth16 BN256 proof: %v", err)
660+
log.Printf("Could not parse vk: %v", err)
646661
return false
647662
}
663+
664+
inputs := bytesToBigInts32(pubInputBytes)
665+
666+
err = rapidsnark_verifier.VerifyRaw(vk, parsedProofData, inputs)
667+
if err != nil {
668+
log.Printf("Could not verify Groth16 proof: %v", err)
669+
return false
670+
}
671+
648672
return true
649673
}
650674

0 commit comments

Comments
 (0)