From d0219b3a33a485350e71fec886488604e3a053ad Mon Sep 17 00:00:00 2001 From: arnaucube Date: Sun, 29 Mar 2020 00:42:52 +0100 Subject: [PATCH] Add bn256.G1 parser --- parsers.go | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 parsers.go diff --git a/parsers.go b/parsers.go new file mode 100644 index 0000000..8b37cee --- /dev/null +++ b/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 +}