arnaucube
arnaucube/go-bellman-verifierPublic Self-hosted repository
stringToBigInt return err instead of panic
arnaucube root@arnaucube.com
Tue, 10 Mar 2020 21:52:09 +0100
commit

cd1285876adf03bc0eaa284728c300006232fafe

parent

426d8c21f269df96fc2630d44155dbbc53e769d0

1 files changed, 19 insertions(+), 7 deletions(-)

jump to
M verifier.go → verifier.go

@@ -11,6 +11,16 @@

bn256 "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare" ) +var q *big.Int + +func init() { + var err error + q, err = stringToBigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617") + if err != nil { + panic(err) + } +} + // Vk is the Verification Key data structure type Vk struct { Alpha *bn256.G1

@@ -93,7 +103,7 @@ _, err = p.Unmarshal(b)

return p, err } -func stringToBigInt(s string) *big.Int { +func stringToBigInt(s string) (*big.Int, error) { base := 10 if bytes.HasPrefix([]byte(s), []byte("0x")) { base = 16

@@ -101,9 +111,9 @@ s = strings.TrimPrefix(s, "0x")

} n, ok := new(big.Int).SetString(s, base) if !ok { - panic(fmt.Errorf("Can not parse string to *big.Int: %s", s)) + return nil, fmt.Errorf("Can not parse string to *big.Int: %s", s) } - return n + return n, nil } // ParsePublicRaw takes a json []byte and outputs the []*big.Int struct

@@ -115,7 +125,11 @@ return nil, err

} var public []*big.Int for _, s := range pr { - public = append(public, stringToBigInt(s)) + sb, err := stringToBigInt(s) + if err != nil { + return nil, err + } + public = append(public, sb) } return public, nil }

@@ -197,15 +211,13 @@

return &p, nil } -var q = stringToBigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617") - // Verify performs the Groth16 zkSnark verification func Verify(vk *Vk, proof *Proof, inputs []*big.Int) bool { if len(inputs)+1 != len(vk.GammaABC) { fmt.Println("len(inputs)+1 != len(vk.GammaABC)") return false } - vkX := new(bn256.G1).ScalarBaseMult(stringToBigInt("0")) + vkX := new(bn256.G1).ScalarBaseMult(big.NewInt(0)) for i := 0; i < len(inputs); i++ { // check input inside field if inputs[0].Cmp(q) != -1 {