func (rng *Rand) Read(p []byte) (int, error) {
	rng.sha.Reset()
	rng.sha.Write(rng.seed)
	rng.sha.Read(rng.seed)
	return rng.sha.Read(p)
}
Read reads out len(p) random bytes
and update the underlying state seed
package rand
import (
	"crypto/rand"
	"io"
	"golang.org/x/crypto/sha3"
	"github.com/LoCCS/mss/config"
)
var Reader io.Reader
func init() {
	seed, _ := RandSeed()
	Reader = New(seed)
}
func RandSeed() ([]byte, error) {
	seed := make([]byte, config.Size)
	_, err := rand.Read(seed)
	return seed, err
}
type Rand struct {
	seed []byte  
	sha sha3.ShakeHash
}
func New(seed []byte) *Rand {
	rng := new(Rand)
	rng.Seed(seed)
	rng.sha = sha3.NewShake256()
	return rng
}