func (g *G1) ScalarBaseMult(k *big.Int) *G1 {
	if g.p == nil {
		g.p = newCurvePoint(nil)
	}
	g.p.Mul(curveGen, k, new(bnPool))
	return g
}
ScalarBaseMult sets e to g*k where g is the generator of the group and
then returns e.
package bn256
import (
	"crypto/rand"
	"io"
	"math/big"
)
type G1 struct {
	p *curvePoint
}
func RandomG1(r io.Reader) (*big.Int, *G1, error) {
	var k *big.Int
	var err error
	for {
		k, err = rand.Int(r, Order)
		if err != nil {
			return nil, nil, err
		}
		if k.Sign() > 0 {
			break
		}
	}
	return k, new(G1).ScalarBaseMult(k), nil
}
func (g *G1) String() string {
	return "bn256.G1" + g.p.String()
}
func (g *G1) CurvePoints() (*big.Int, *big.Int, *big.Int, *big.Int) {
	return g.p.x, g.p.y, g.p.z, g.p.t
}