randomreader.go 688 B

123456789101112131415161718192021222324252627282930
  1. package sign
  2. import (
  3. "bytes"
  4. "encoding/binary"
  5. "math/rand"
  6. )
  7. // A randomReader wraps a math/rand.Rand within an reader so that it can used
  8. // as a predictable testing replacement for crypto/rand.Reader
  9. type randomReader struct {
  10. b *bytes.Buffer
  11. r *rand.Rand
  12. }
  13. // newRandomReader returns a new instance of the random reader
  14. func newRandomReader(r *rand.Rand) *randomReader {
  15. return &randomReader{b: &bytes.Buffer{}, r: r}
  16. }
  17. // Read will read random bytes from up to the length of b.
  18. func (m *randomReader) Read(b []byte) (int, error) {
  19. for i := 0; i < len(b); {
  20. binary.Write(m.b, binary.LittleEndian, m.r.Int63())
  21. n, _ := m.b.Read(b[i:])
  22. i += n
  23. }
  24. return len(b), nil
  25. }