Skip to content

Commit 99c6a58

Browse files
authored
Perf: Parallelize subgroup checks in KZG MPC setup (#615)
Co-authored-by: Arya Tabaie <15056835+Tabaie@users.noreply.github.com>
1 parent de0d77f commit 99c6a58

File tree

9 files changed

+180
-32
lines changed

9 files changed

+180
-32
lines changed

ecc/bls12-377/kzg/mpcsetup.go

Lines changed: 22 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ecc/bls12-381/kzg/mpcsetup.go

Lines changed: 22 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ecc/bls24-315/kzg/mpcsetup.go

Lines changed: 22 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ecc/bls24-317/kzg/mpcsetup.go

Lines changed: 22 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ecc/bn254/kzg/mpcsetup.go

Lines changed: 22 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ecc/bw6-633/kzg/mpcsetup.go

Lines changed: 22 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ecc/bw6-761/kzg/mpcsetup.go

Lines changed: 22 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/generator/kzg/template/mpcsetup.go.tmpl

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import (
33
"crypto/sha256"
44
"encoding/binary"
55
"errors"
6+
"fmt"
67
curve "github.com/consensys/gnark-crypto/ecc/{{.Name}}"
78
"github.com/consensys/gnark-crypto/ecc/{{.Name}}/fr"
89
"github.com/consensys/gnark-crypto/ecc/{{.Name}}/mpcsetup"
10+
"github.com/consensys/gnark-crypto/utils"
911
"io"
1012
"math/big"
1113
)
@@ -113,11 +115,27 @@ func (s *MpcSetup) Verify(next *MpcSetup) error {
113115
}
114116

115117
if !next.srs.Vk.G2[1].IsInSubGroup() {
116-
return errors.New("𝔾₂ representation not in subgroup")
118+
return errors.New("[x]₂ representation not in subgroup")
117119
}
118-
for i := 1; i < len(next.srs.Pk.G1); i++ {
119-
if !next.srs.Pk.G1[i].IsInSubGroup() {
120-
return errors.New("𝔾₁ representation not in subgroup")
120+
121+
// TODO @Tabaie replace with batch subgroup check
122+
n := len(next.srs.Pk.G1) - 1
123+
wp := utils.NewWorkerPool()
124+
defer wp.Stop()
125+
fail := make(chan error, wp.NbWorkers())
126+
127+
wp.Submit(n, func(start, end int) {
128+
for i := start; i < end; i++ {
129+
if !next.srs.Pk.G1[i+1].IsInSubGroup() {
130+
fail <- fmt.Errorf("[x^%d]₁ representation not in subgroup", i+1)
131+
break
132+
}
133+
}
134+
}, n/wp.NbWorkers()+1).Wait()
135+
close(fail)
136+
for err := range fail {
137+
if err != nil {
138+
return err
121139
}
122140
}
123141

utils/parallel.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ func NewWorkerPool() *WorkerPool {
3535
return p
3636
}
3737

38+
func (wp *WorkerPool) NbWorkers() int {
39+
return wp.nbWorkers
40+
}
41+
3842
// Stop (but does not wait) the pool. It frees the worker.
3943
func (wp *WorkerPool) Stop() {
4044
close(wp.chJobs)

0 commit comments

Comments
 (0)