31 lines
688 B
Go
31 lines
688 B
Go
|
package sign
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/binary"
|
||
|
"math/rand"
|
||
|
)
|
||
|
|
||
|
// A randomReader wraps a math/rand.Rand within an reader so that it can used
|
||
|
// as a predictable testing replacement for crypto/rand.Reader
|
||
|
type randomReader struct {
|
||
|
b *bytes.Buffer
|
||
|
r *rand.Rand
|
||
|
}
|
||
|
|
||
|
// newRandomReader returns a new instance of the random reader
|
||
|
func newRandomReader(r *rand.Rand) *randomReader {
|
||
|
return &randomReader{b: &bytes.Buffer{}, r: r}
|
||
|
}
|
||
|
|
||
|
// Read will read random bytes from up to the length of b.
|
||
|
func (m *randomReader) Read(b []byte) (int, error) {
|
||
|
for i := 0; i < len(b); {
|
||
|
binary.Write(m.b, binary.LittleEndian, m.r.Int63())
|
||
|
n, _ := m.b.Read(b[i:])
|
||
|
i += n
|
||
|
}
|
||
|
|
||
|
return len(b), nil
|
||
|
}
|