func (q *SGP) GenerateMasterKey() (*SGPSecKey, error) {
	sampler := sample.NewUniform(q.Mod)
	s, err := data.NewRandomVector(q.N, sampler)
	if err != nil {
		return nil, err
	}
	t, err := data.NewRandomVector(q.N, sampler)
	if err != nil {
		return nil, err
	}
	return NewSGPSecKey(s, t), nil
}
GenerateMasterKey generates a master secret key for the
SGP scheme. It returns an error if the secret key could
not be generated.
package quadratic
import (
	"math/big"
	"github.com/fentec-project/bn256"
	"github.com/fentec-project/gofe/data"
	"github.com/fentec-project/gofe/internal/dlog"
	"github.com/fentec-project/gofe/sample"
)
type SGP struct {
	N int
	Mod *big.Int
	Bound *big.Int
	GCalc    *dlog.CalcBN256
	GInvCalc *dlog.CalcBN256
}
func NewSGP(n int, b *big.Int) *SGP {
	return &SGP{
		N:        n,
		Mod:      bn256.Order,
		Bound:    b,
		GCalc:    dlog.NewCalc().InBN256(),  
		GInvCalc: dlog.NewCalc().InBN256(),  
	}
}
type SGPSecKey struct {
	S data.Vector
	T data.Vector
}
func NewSGPSecKey(s, t data.Vector) *SGPSecKey {
	return &SGPSecKey{
		S: s,
		T: t,
	}
}