arnaucube
arnaucube/go-bellman-verifierPublic Self-hosted repository
go-bellman-verifier/verifier.go
verifier.goRaw
 1package bellmanverifier
 2
 3import (
 4	"bytes"
 5	"encoding/hex"
 6	"fmt"
 7	"math/big"
 8	"strings"
 9
10	bn256 "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare"
11)
12
13func hexToG1(h []string) (*bn256.G1, error) {
14	in := ""
15	for i := range h {
16		in += strings.TrimPrefix(h[i], "0x")
17	}
18
19	b, err := hex.DecodeString(in)
20	if err != nil {
21		return nil, err
22	}
23	p := new(bn256.G1)
24	_, err = p.Unmarshal(b)
25
26	return p, err
27}
28
29func hexToG2Regular(h [][]string) (*bn256.G2, error) {
30	in := ""
31	for i := 0; i < len(h); i++ {
32		for j := 0; j < len(h[i]); j++ {
33			in += strings.TrimPrefix(h[i][j], "0x")
34		}
35	}
36
37	b, err := hex.DecodeString(in)
38	if err != nil {
39		return nil, err
40	}
41	p := new(bn256.G2)
42	_, err = p.Unmarshal(b)
43	return p, err
44}
45
46func hexToG2(h [][]string) (*bn256.G2, error) {
47	in := ""
48	in += strings.TrimPrefix(h[0][1], "0x") // note that values are switched
49	in += strings.TrimPrefix(h[0][0], "0x")
50	in += strings.TrimPrefix(h[1][1], "0x")
51	in += strings.TrimPrefix(h[1][0], "0x")
52
53	b, err := hex.DecodeString(in)
54	if err != nil {
55		return nil, err
56	}
57	p := new(bn256.G2)
58	_, err = p.Unmarshal(b)
59	return p, err
60}
61
62func stringToBigInt(s string) *big.Int {
63	base := 10
64	if bytes.HasPrefix([]byte(s), []byte("0x")) {
65		base = 16
66		s = strings.TrimPrefix(s, "0x")
67	}
68	n, ok := new(big.Int).SetString(s, base)
69	if !ok {
70		panic(fmt.Errorf("Can not parse string to *big.Int: %s", s))
71	}
72	return n
73}