Skip to content

Commit 89152b8

Browse files
authored
Merge pull request #5 from jsign/jsign-gt-morearguments
Complete Curdleproof migration to generic group backend
2 parents 6f2bd4a + 685d722 commit 89152b8

20 files changed

+1578
-1111
lines changed

common/rand.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,17 @@ func (r *Rand) GeneratePermutation(n int) ([]uint32, error) {
114114

115115
// Experimental
116116
func (r *Rand) GetGt() (bls12381.GT, error) {
117+
var byts [48 * 12]byte
118+
for i := 0; i < 6; i++ {
119+
a, err := r.GetG1Affine()
120+
if err != nil {
121+
return bls12381.GT{}, nil
122+
}
123+
abytes := a.RawBytes()
124+
copy(byts[i*(48*2):], abytes[:])
125+
}
117126
var randElem bls12381.GT
118-
if _, err := randElem.SetRandom(); err != nil {
127+
if err := randElem.SetBytes(byts[:]); err != nil {
119128
return bls12381.GT{}, fmt.Errorf("get random GT: %s", err)
120129
}
121130

common/util.go

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package common
22

33
import (
44
"errors"
5-
"fmt"
65
"math/big"
76
"runtime"
87

@@ -42,51 +41,6 @@ func Permute[T any](vs []T, perm []uint32) []T {
4241
return ret
4342
}
4443

45-
func ShufflePermuteCommit(
46-
crsGs []bls12381.G1Affine,
47-
crsHs []bls12381.G1Affine,
48-
Rs []bls12381.G1Affine,
49-
Ss []bls12381.G1Affine,
50-
perm []uint32,
51-
k fr.Element,
52-
rand *Rand,
53-
) ([]bls12381.G1Affine, []bls12381.G1Affine, bls12381.G1Jac, []fr.Element, error) {
54-
biK := FrToBigInt(&k)
55-
Ts := make([]bls12381.G1Affine, len(Rs))
56-
for i := range Ts {
57-
Ts[i].ScalarMultiplication(&Rs[i], biK)
58-
}
59-
60-
Us := make([]bls12381.G1Affine, len(Ss))
61-
for i := range Us {
62-
Us[i].ScalarMultiplication(&Ss[i], biK)
63-
}
64-
65-
Ts = Permute(Ts, perm)
66-
Us = Permute(Us, perm)
67-
68-
rangeFrs := make([]fr.Element, len(crsGs))
69-
for i := range perm {
70-
rangeFrs[i] = fr.NewElement(uint64(i))
71-
}
72-
73-
permRangeFrs := Permute(rangeFrs, perm)
74-
var M, M2 bls12381.G1Jac
75-
if _, err := M.MultiExp(crsGs, permRangeFrs, MultiExpConf); err != nil {
76-
return nil, nil, bls12381.G1Jac{}, nil, fmt.Errorf("calculating M_1: %s", err)
77-
}
78-
rs_m, err := rand.GetFrs(N_BLINDERS)
79-
if err != nil {
80-
return nil, nil, bls12381.G1Jac{}, nil, fmt.Errorf("getting rs_m: %s", err)
81-
}
82-
if _, err := M2.MultiExp(crsHs, rs_m, MultiExpConf); err != nil {
83-
return nil, nil, bls12381.G1Jac{}, nil, fmt.Errorf("calculating M_2: %s", err)
84-
}
85-
M.AddAssign(&M2)
86-
87-
return Ts, Us, M, rs_m, nil
88-
}
89-
9044
func DecodeAffineSliceToJac(d *bls12381.Decoder, out *[]bls12381.G1Jac) error {
9145
var affs []bls12381.G1Affine
9246
if err := d.Decode(&affs); err != nil {

crs.go

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,62 @@ package curdleproof
33
import (
44
"fmt"
55

6-
bls12381 "github.com/consensys/gnark-crypto/ecc/bls12-381"
76
"github.com/jsign/curdleproofs/common"
7+
"github.com/jsign/curdleproofs/group"
88
)
99

1010
type CRS struct {
11-
Gs []bls12381.G1Affine
12-
Hs []bls12381.G1Affine
13-
H bls12381.G1Jac
14-
Gt bls12381.G1Jac
15-
Gu bls12381.G1Jac
16-
Gsum bls12381.G1Affine
17-
Hsum bls12381.G1Affine
11+
Gs []group.Element
12+
Hs []group.Element
13+
H group.Element
14+
Gt group.Element
15+
Gu group.Element
16+
Gsum group.Element
17+
Hsum group.Element
1818
}
1919

20-
func GenerateCRS(size int, rand *common.Rand) (CRS, error) {
21-
gs, err := rand.GetG1Affines(size)
20+
// TODO: Clean up API if generic backend is used.
21+
func GenerateCRS(size int, g group.Group, genRandGroupElement func() (group.Element, error)) (CRS, error) {
22+
var err error
23+
gs := make([]group.Element, size)
24+
for i := range gs {
25+
gs[i], err = genRandGroupElement()
26+
if err != nil {
27+
return CRS{}, fmt.Errorf("gen gs: %s", err)
28+
}
29+
}
2230
if err != nil {
2331
return CRS{}, fmt.Errorf("gen gs: %s", err)
2432
}
25-
hs, err := rand.GetG1Affines(common.N_BLINDERS)
33+
hs := make([]group.Element, common.N_BLINDERS)
34+
for i := range hs {
35+
hs[i], err = genRandGroupElement()
36+
if err != nil {
37+
return CRS{}, fmt.Errorf("gen hs: %s", err)
38+
}
39+
}
2640
if err != nil {
2741
return CRS{}, fmt.Errorf("gen hs: %s", err)
2842
}
29-
h, err := rand.GetG1Jac()
43+
h, err := genRandGroupElement()
3044
if err != nil {
3145
return CRS{}, fmt.Errorf("gen h: %s", err)
3246
}
33-
gt, err := rand.GetG1Jac()
47+
gt, err := genRandGroupElement()
3448
if err != nil {
3549
return CRS{}, fmt.Errorf("gen gt: %s", err)
3650
}
37-
gu, err := rand.GetG1Jac()
51+
gu, err := genRandGroupElement()
3852
if err != nil {
3953
return CRS{}, fmt.Errorf("gen gu: %s", err)
4054
}
41-
var gsum bls12381.G1Affine
55+
gsum := g.CreateElement()
4256
for _, g := range gs {
43-
gsum.Add(&gsum, &g)
57+
gsum.Add(gsum, g)
4458
}
45-
var hsum bls12381.G1Affine
59+
hsum := g.CreateElement()
4660
for _, h := range hs {
47-
hsum.Add(&hsum, &h)
61+
hsum.Add(hsum, h)
4862
}
4963

5064
return CRS{

0 commit comments

Comments
 (0)