func CommitG1(x, r *big.Int, h *p256) (*p256, error) {
	var (
		C *p256
	)
	C = new(p256).ScalarBaseMult(x)
	Hr := new(p256).ScalarMult(h, r)
	C.Add(C, Hr)
	return C, nil
}
/*
CommitG1 method corresponds to the Pedersen commitment scheme. Namely, given input
message x, and randomness r, it outputs g^x.h^r.
package zkproofs
import (
	"crypto/sha256"
	"encoding/json"
	"math/big"
	"../byteconversion"
	bn256 "github.com/ethereum/go-ethereum/crypto/bn256/google"
)
var (
	G1 = new(bn256.G1).ScalarBaseMult(new(big.Int).SetInt64(1))
	G2 = new(bn256.G2).ScalarBaseMult(new(big.Int).SetInt64(1))
	E  = bn256.Pair(G1, G2)
)
func Decompose(x *big.Int, u int64, l int64) ([]int64, error) {
	var (
		result []int64
		i      int64
	)
	result = make([]int64, l, l)
	i = 0
	for i < l {
		result[i] = Mod(x, new(big.Int).SetInt64(u)).Int64()
		x = new(big.Int).Div(x, new(big.Int).SetInt64(u))
		i = i + 1
	}
	return result, nil
}
func Commit(x, r *big.Int, h *bn256.G2) (*bn256.G2, error) {
	var (
		C *bn256.G2
	)
	C = new(bn256.G2).ScalarBaseMult(x)
	C.Add(C, new(bn256.G2).ScalarMult(h, r))
	return C, nil
}