Skip to content

Commit b6bd9a2

Browse files
committed
feat: update gnark to v0.9.1
1 parent d46ef6b commit b6bd9a2

File tree

4 files changed

+105
-41
lines changed

4 files changed

+105
-41
lines changed

go.mod

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,31 @@ module github.com/worldcoin/semaphore-mtb-setup
33
go 1.19
44

55
require (
6-
github.com/consensys/gnark v0.8.0
7-
github.com/consensys/gnark-crypto v0.9.1
6+
github.com/consensys/gnark v0.9.1
7+
github.com/consensys/gnark-crypto v0.12.2-0.20231013160410-1f65e75b6dfb
88
github.com/urfave/cli/v2 v2.25.7
99
github.com/worldcoin/ptau-deserializer v0.1.3
1010
)
1111

1212
require (
13+
github.com/bits-and-blooms/bitset v1.8.0 // indirect
1314
github.com/blang/semver/v4 v4.0.0 // indirect
1415
github.com/consensys/bavard v0.1.13 // indirect
1516
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
16-
github.com/fxamacker/cbor/v2 v2.4.0 // indirect
17-
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect
17+
github.com/davecgh/go-spew v1.1.1 // indirect
18+
github.com/fxamacker/cbor/v2 v2.5.0 // indirect
19+
github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b // indirect
1820
github.com/mattn/go-colorable v0.1.13 // indirect
1921
github.com/mattn/go-isatty v0.0.19 // indirect
2022
github.com/mmcloughlin/addchain v0.4.0 // indirect
21-
github.com/rs/zerolog v1.29.1 // indirect
23+
github.com/pmezard/go-difflib v1.0.0 // indirect
24+
github.com/rs/zerolog v1.30.0 // indirect
2225
github.com/russross/blackfriday/v2 v2.1.0 // indirect
26+
github.com/stretchr/testify v1.8.4 // indirect
2327
github.com/x448/float16 v0.8.4 // indirect
2428
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
25-
golang.org/x/crypto v0.6.0 // indirect
26-
golang.org/x/sys v0.9.0 // indirect
29+
golang.org/x/crypto v0.12.0 // indirect
30+
golang.org/x/sys v0.11.0 // indirect
31+
gopkg.in/yaml.v3 v3.0.1 // indirect
2732
rsc.io/tmplfunc v0.0.3 // indirect
2833
)

go.sum

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
1+
github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c=
2+
github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8=
13
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
24
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
35
github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ=
46
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
5-
github.com/consensys/gnark v0.8.0 h1:0bQ2MyDG4oNjMQpNyL8HjrrUSSL3yYJg0Elzo6LzmcU=
6-
github.com/consensys/gnark v0.8.0/go.mod h1:aKmA7dIiLbTm0OV37xTq0z+Bpe4xER8EhRLi6necrm8=
7-
github.com/consensys/gnark-crypto v0.9.1 h1:mru55qKdWl3E035hAoh1jj9d7hVnYY5pfb6tmovSmII=
8-
github.com/consensys/gnark-crypto v0.9.1/go.mod h1:a2DQL4+5ywF6safEeZFEPGRiiGbjzGFRUN2sg06VuU4=
7+
github.com/consensys/gnark v0.9.1 h1:aTwBp5469MY/2jNrf4ABrqHRW3+JytfkADdw4ZBY7T0=
8+
github.com/consensys/gnark v0.9.1/go.mod h1:udWvWGXnfBE7mn7BsNoGAvZDnUhcONBEtNijvVjfY80=
9+
github.com/consensys/gnark-crypto v0.12.2-0.20231013160410-1f65e75b6dfb h1:f0BMgIjhZy4lSRHCXFbQst85f5agZAjtDMixQqBWNpc=
10+
github.com/consensys/gnark-crypto v0.12.2-0.20231013160410-1f65e75b6dfb/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY=
911
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
1012
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
1113
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
1214
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
13-
github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88=
14-
github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo=
15+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
16+
github.com/fxamacker/cbor/v2 v2.5.0 h1:oHsG0V/Q6E/wqTS2O1Cozzsy69nqCiguo5Q1a1ADivE=
17+
github.com/fxamacker/cbor/v2 v2.5.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo=
1518
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
1619
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
17-
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs=
18-
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA=
20+
github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo=
21+
github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
1922
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
23+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
24+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
2025
github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c=
2126
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
2227
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
@@ -30,12 +35,15 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky
3035
github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU=
3136
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
3237
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
33-
github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
34-
github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc=
35-
github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU=
38+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
39+
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
40+
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
41+
github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
42+
github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
3643
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
3744
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
3845
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
46+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
3947
github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs=
4048
github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
4149
github.com/worldcoin/ptau-deserializer v0.1.3 h1:VU9k9EaEZ6tSpfqf11md9eoyglOEmuNaEOA0btcM5yI=
@@ -44,14 +52,19 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
4452
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
4553
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
4654
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
47-
golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
48-
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
55+
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
56+
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
57+
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
4958
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5059
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5160
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5261
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
53-
golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
54-
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
62+
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
63+
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
64+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
65+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
66+
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
5567
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
68+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
5669
rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU=
5770
rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA=

keys/keys.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ type VerifyingKey struct {
2626
Beta, Delta, Gamma bn254.G2Affine
2727
}
2828

29-
CommitmentKey pedersen.Key
29+
CommitmentKey pedersen.VerifyingKey
3030
CommitmentInfo constraint.Commitment // since the verifier doesn't input a constraint system, this needs to be provided here
3131
}
3232

@@ -308,7 +308,7 @@ func extractVK(phase2Path string) error {
308308
if err := decEvals.Decode(&ckk); err != nil {
309309
return err
310310
}
311-
vk.CommitmentKey, err = pedersen.Setup(ckk)
311+
_, vk.CommitmentKey, err = pedersen.Setup(ckk)
312312
if err != nil {
313313
return err
314314
}

phase2/utils.go

Lines changed: 63 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,23 @@ func processHeader(r1csPath string, phase1File, phase2File *os.File) (*phase1.He
6262
return nil, nil, fmt.Errorf("phase 1 parameters can support up to %d, but the circuit #Constraints are %d", N, header2.Constraints)
6363
}
6464
// Initialize Domain, #Wires, #Witness, #Public, #PrivateCommitted
65+
66+
// Calculate number of private commitments
67+
commitments, ok := r1cs.CommitmentInfo.(constraint.Groth16Commitments)
68+
if !ok {
69+
return nil, nil, errors.New("commitment info is not of type Groth16Commitments")
70+
}
71+
privateCommittedNum := 0
72+
for _, commitment := range commitments {
73+
privateCommittedNum += len(commitment.PrivateCommitted)
74+
}
75+
6576
header2.Wires = r1cs.NbInternalVariables + r1cs.GetNbPublicVariables() + r1cs.GetNbSecretVariables()
66-
header2.PrivateCommitted = r1cs.CommitmentInfo.NbPrivateCommitted
77+
header2.PrivateCommitted = privateCommittedNum
6778
header2.Public = r1cs.GetNbPublicVariables()
6879
header2.Witness = r1cs.GetNbSecretVariables() + r1cs.NbInternalVariables - header2.PrivateCommitted
6980

70-
if r1cs.CommitmentInfo.Is() { // the commitment itself is defined by a hint so the prover considers it private
81+
if Is(commitments) { // the commitment itself is defined by a hint so the prover considers it private
7182
header2.Public++ // but the verifier will need to inject the value itself so on the groth16
7283
header2.Witness-- // level it must be considered public
7384
}
@@ -176,7 +187,7 @@ func processEvaluations(header1 *phase1.Header, header2 *Header, r1csPath string
176187

177188
// Accumlate {[A]₁}
178189
buff := make([]bn254.G1Affine, header2.Wires)
179-
for i, c := range r1cs.Constraints {
190+
for i, c := range r1cs.GetR1Cs() {
180191
for _, t := range c.L {
181192
accumulateG1(&r1cs, &buff[t.WireID()], t, &tauG1[i])
182193
}
@@ -189,7 +200,7 @@ func processEvaluations(header1 *phase1.Header, header2 *Header, r1csPath string
189200
// Reset buff
190201
buff = make([]bn254.G1Affine, header2.Wires)
191202
// Accumlate {[B]₁}
192-
for i, c := range r1cs.Constraints {
203+
for i, c := range r1cs.GetR1Cs() {
193204
for _, t := range c.R {
194205
accumulateG1(&r1cs, &buff[t.WireID()], t, &tauG1[i])
195206
}
@@ -213,7 +224,7 @@ func processEvaluations(header1 *phase1.Header, header2 *Header, r1csPath string
213224
return err
214225
}
215226
// Accumlate {[B]₂}
216-
for i, c := range r1cs.Constraints {
227+
for i, c := range r1cs.GetR1Cs() {
217228
for _, t := range c.R {
218229
accumulateG2(&r1cs, &buff2[t.WireID()], t, &tauG2[i])
219230
}
@@ -307,7 +318,7 @@ func processPVCKK(header1 *phase1.Header, header2 *Header, r1csPath string, phas
307318
return err
308319
}
309320

310-
for i, c := range r1cs.Constraints {
321+
for i, c := range r1cs.GetR1Cs() {
311322
// Output(Tau)
312323
for _, t := range c.O {
313324
accumulateG1(&r1cs, &L[t.WireID()], t, &buffSRS[i])
@@ -318,7 +329,7 @@ func processPVCKK(header1 *phase1.Header, header2 *Header, r1csPath string, phas
318329
if err := dec.Decode(&buffSRS); err != nil {
319330
return err
320331
}
321-
for i, c := range r1cs.Constraints {
332+
for i, c := range r1cs.GetR1Cs() {
322333
// Right(AlphaTauG1)
323334
for _, t := range c.R {
324335
accumulateG1(&r1cs, &L[t.WireID()], t, &buffSRS[i])
@@ -329,14 +340,19 @@ func processPVCKK(header1 *phase1.Header, header2 *Header, r1csPath string, phas
329340
if err := dec.Decode(&buffSRS); err != nil {
330341
return err
331342
}
332-
for i, c := range r1cs.Constraints {
343+
for i, c := range r1cs.GetR1Cs() {
333344
// Left(BetaTauG1)
334345
for _, t := range c.L {
335346
accumulateG1(&r1cs, &L[t.WireID()], t, &buffSRS[i])
336347
}
337348
}
338349

339-
pkk, vkk, ckk := filterL(L, header2, &r1cs.CommitmentInfo)
350+
commitments, ok := r1cs.CommitmentInfo.(constraint.Groth16Commitments)
351+
if !ok {
352+
return errors.New("commitment info is not of type Groth16Commitments")
353+
}
354+
355+
pkk, vkk, ckk := filterL(L, header2, commitments)
340356
// Write PKK
341357
for i := 0; i < len(pkk); i++ {
342358
if err := enc.Encode(&pkk[i]); err != nil {
@@ -534,23 +550,42 @@ func aggregate(inputDecoder, originDecoder *bn254.Decoder, size int) (*bn254.G1A
534550
return &inG, &orG, nil
535551
}
536552

537-
func filterL(L []bn254.G1Affine, header2 *Header, cmtInfo *constraint.Commitment) ([]bn254.G1Affine, []bn254.G1Affine, []bn254.G1Affine) {
553+
func filterL(L []bn254.G1Affine, header2 *Header, cmtInfo constraint.Groth16Commitments) ([]bn254.G1Affine, []bn254.G1Affine, []bn254.G1Affine) {
538554
pkk := make([]bn254.G1Affine, header2.Witness)
539555
vkk := make([]bn254.G1Affine, header2.Public)
540556
ckk := make([]bn254.G1Affine, header2.PrivateCommitted)
541557
vI, cI := 0, 0
558+
559+
commitmentIndexes := make(map[int]struct{})
560+
for _, c := range cmtInfo {
561+
commitmentIndexes[c.CommitmentIndex] = struct{}{}
562+
}
563+
564+
numPrivateCommitted := 0
565+
for _, commitment := range cmtInfo {
566+
numPrivateCommitted += len(commitment.PrivateCommitted)
567+
}
568+
542569
for i := range L {
543-
isCommittedPrivate := cI < cmtInfo.NbPrivateCommitted && i == cmtInfo.PrivateCommitted()[i]
544-
isCommitment := cmtInfo.Is() && i == cmtInfo.CommitmentIndex
570+
_, isCommitment := commitmentIndexes[i]
571+
isCommittedPrivate := cI < numPrivateCommitted
545572
isPublic := i < header2.Public
573+
546574
if isCommittedPrivate {
547-
ckk[cI].Set(&L[i])
548-
cI++
575+
if cI < len(ckk) {
576+
ckk[cI].Set(&L[i])
577+
cI++
578+
}
549579
} else if isCommitment || isPublic {
550-
vkk[vI].Set(&L[i])
551-
vI++
580+
if vI < len(vkk) {
581+
vkk[vI].Set(&L[i])
582+
vI++
583+
}
552584
} else {
553-
pkk[i-cI-vI].Set(&L[i])
585+
pIndex := i - cI - vI
586+
if pIndex >= 0 && pIndex < len(pkk) {
587+
pkk[pIndex].Set(&L[i])
588+
}
554589
}
555590
}
556591

@@ -594,3 +629,14 @@ func readPhase1(phase1File *os.File, power byte) (*bn254.G1Affine, *bn254.G1Affi
594629
return &alpha, &beta1, &beta2, nil
595630

596631
}
632+
633+
func Is(commitments constraint.Groth16Commitments) bool {
634+
var isCommitted bool
635+
for _, commitment := range commitments {
636+
if len(commitment.PublicAndCommitmentCommitted) > 0 || len(commitment.PrivateCommitted) > 0 {
637+
isCommitted = true
638+
break
639+
}
640+
}
641+
return isCommitted
642+
}

0 commit comments

Comments
 (0)