arnaucube
arnaucube/eth-kzg-ceremony-altPublic Self-hosted repository
eth-kzg-ceremony-alt/parsers.go
parsers.goRaw
 1package kzgceremony
 2
 3import (
 4	"encoding/hex"
 5	"strings"
 6
 7	bls12381 "github.com/kilic/bls12-381"
 8)
 9
10// WIP
11
12// ParseEthJSON parses the eth-kzg-ceremony SRS json format
13func ParseEthJSON(g1sStr, g2sStr []string) (*SRS, error) {
14	g1 := bls12381.NewG1()
15	g2 := bls12381.NewG2()
16	nG1s := len(g1sStr)
17	nG2s := len(g2sStr)
18	g1s := make([]*bls12381.PointG1, nG1s)
19	g2s := make([]*bls12381.PointG2, nG2s)
20	for i := 0; i < nG1s; i++ {
21		g1sBytes, err := hex.DecodeString(strings.TrimPrefix(g1sStr[i], "0x"))
22		if err != nil {
23			return nil, err
24		}
25		g1s_i, err := g1.FromCompressed(g1sBytes)
26		if err != nil {
27			return nil, err
28		}
29		g1s[i] = g1s_i
30	}
31	for i := 0; i < nG2s; i++ {
32		g2sBytes, err := hex.DecodeString(strings.TrimPrefix(g2sStr[i], "0x"))
33		if err != nil {
34			return nil, err
35		}
36		g2s_i, err := g2.FromCompressed(g2sBytes)
37		if err != nil {
38			return nil, err
39		}
40		g2s[i] = g2s_i
41	}
42	return &SRS{G1s: g1s, G2s: g2s}, nil
43}
44
45// ToEthJSON outputs the SRS into the eth-kzg-ceremony SRS json format
46func (srs *SRS) ToEthJSON() ([]string, []string, error) {
47	g1 := bls12381.NewG1()
48	g2 := bls12381.NewG2()
49	nG1s := len(srs.G1s)
50	nG2s := len(srs.G2s)
51	g1s := make([]string, nG1s)
52	g2s := make([]string, nG2s)
53
54	for i := 0; i < nG1s; i++ {
55		g1s[i] = "0x" + hex.EncodeToString(g1.ToCompressed(srs.G1s[i]))
56	}
57	for i := 0; i < nG2s; i++ {
58		g2s[i] = "0x" + hex.EncodeToString(g2.ToCompressed(srs.G2s[i]))
59	}
60	return g1s, g2s, nil
61}