func NewUniform(max *big.Int) *UniformRange {
	return NewUniformRange(big.NewInt(0), max)
}
NewUniform returns an instance of the Uniform sampler.
It accepts an upper bound on the sampled values.
package sample
import (
	"crypto/rand"
	"math/big"
)
type UniformRange struct {
	min *big.Int
	max *big.Int
}
func NewUniformRange(min, max *big.Int) *UniformRange {
	return &UniformRange{
		min: min,
		max: max,
	}
}
func (u *UniformRange) Sample() (*big.Int, error) {
	maxMinusMin := new(big.Int).Sub(u.max, u.min)
	res, err := rand.Int(rand.Reader, maxMinusMin)
	if err != nil {
		return nil, err
	}
	res.Add(res, u.min)
	return res, err
}
type Uniform struct {
	UniformRange
}