arnaucube
arnaucube/go-circom-prover-verifierPublic Self-hosted repository
Add bn256.G1 parser
arnaucube root@arnaucube.com
Sun, 29 Mar 2020 00:42:52 +0100
commit

d0219b3a33a485350e71fec886488604e3a053ad

parent

1e1267092be40f904b873b371d579cb6c398c1cb

1 files changed, 68 insertions(+), 0 deletions(-)

jump to
A parsers.go

@@ -0,0 +1,68 @@

+package gocircomprover + +import ( + "encoding/hex" + "fmt" + "math/big" + "strings" + + bn256 "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare" +) + +func stringToG1(h []string) (*bn256.G1, error) { + if len(h) <= 2 { + return nil, fmt.Errorf("not enought data for stringToG1") + } + h = h[:2] + hexa := false + if len(h[0]) > 1 { + if "0x" == h[0][:2] { + hexa = true + } + } + in := "" + + var b []byte + var err error + if hexa { + for i := range h { + in += strings.TrimPrefix(h[i], "0x") + } + b, err = hex.DecodeString(in) + if err != nil { + return nil, err + } + } else { + // TODO TMP + // TODO use stringToBytes() + if h[0] == "1" { + h[0] = "0" + } + if h[1] == "1" { + h[1] = "0" + } + bi0, ok := new(big.Int).SetString(h[0], 10) + if !ok { + return nil, fmt.Errorf("error parsing stringToG1") + } + bi1, ok := new(big.Int).SetString(h[1], 10) + if !ok { + return nil, fmt.Errorf("error parsing stringToG1") + } + b0 := bi0.Bytes() + b1 := bi1.Bytes() + if len(b0) != 32 { + b0 = addZPadding(b0) + } + if len(b1) != 32 { + b1 = addZPadding(b1) + } + + b = append(b, b0...) + b = append(b, b1...) + } + p := new(bn256.G1) + _, err = p.Unmarshal(b) + + return p, err +}