Skip to content
This repository was archived by the owner on Feb 27, 2023. It is now read-only.

Commit e94fb17

Browse files
authored
Merge pull request #212 from stripe/v2
Export RandReader for deterministic testing
2 parents 7241509 + dfb400d commit e94fb17

File tree

7 files changed

+17
-17
lines changed

7 files changed

+17
-17
lines changed

asymmetric.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,11 @@ func (ctx rsaEncrypterVerifier) encryptKey(cek []byte, alg KeyAlgorithm) (recipi
195195
func (ctx rsaEncrypterVerifier) encrypt(cek []byte, alg KeyAlgorithm) ([]byte, error) {
196196
switch alg {
197197
case RSA1_5:
198-
return rsa.EncryptPKCS1v15(randReader, ctx.publicKey, cek)
198+
return rsa.EncryptPKCS1v15(RandReader, ctx.publicKey, cek)
199199
case RSA_OAEP:
200-
return rsa.EncryptOAEP(sha1.New(), randReader, ctx.publicKey, cek, []byte{})
200+
return rsa.EncryptOAEP(sha1.New(), RandReader, ctx.publicKey, cek, []byte{})
201201
case RSA_OAEP_256:
202-
return rsa.EncryptOAEP(sha256.New(), randReader, ctx.publicKey, cek, []byte{})
202+
return rsa.EncryptOAEP(sha256.New(), RandReader, ctx.publicKey, cek, []byte{})
203203
}
204204

205205
return nil, ErrUnsupportedAlgorithm
@@ -285,9 +285,9 @@ func (ctx rsaDecrypterSigner) signPayload(payload []byte, alg SignatureAlgorithm
285285

286286
switch alg {
287287
case RS256, RS384, RS512:
288-
out, err = rsa.SignPKCS1v15(randReader, ctx.privateKey, hash, hashed)
288+
out, err = rsa.SignPKCS1v15(RandReader, ctx.privateKey, hash, hashed)
289289
case PS256, PS384, PS512:
290-
out, err = rsa.SignPSS(randReader, ctx.privateKey, hash, hashed, &rsa.PSSOptions{
290+
out, err = rsa.SignPSS(RandReader, ctx.privateKey, hash, hashed, &rsa.PSSOptions{
291291
SaltLength: rsa.PSSSaltLengthAuto,
292292
})
293293
}
@@ -388,7 +388,7 @@ func (ctx ecKeyGenerator) keySize() int {
388388

389389
// Get a content encryption key for ECDH-ES
390390
func (ctx ecKeyGenerator) genKey() ([]byte, rawHeader, error) {
391-
priv, err := ecdsa.GenerateKey(ctx.publicKey.Curve, randReader)
391+
priv, err := ecdsa.GenerateKey(ctx.publicKey.Curve, RandReader)
392392
if err != nil {
393393
return nil, rawHeader{}, err
394394
}
@@ -472,7 +472,7 @@ func (ctx edDecrypterSigner) signPayload(payload []byte, alg SignatureAlgorithm)
472472
return Signature{}, ErrUnsupportedAlgorithm
473473
}
474474

475-
sig, err := ctx.privateKey.Sign(randReader, payload, crypto.Hash(0))
475+
sig, err := ctx.privateKey.Sign(RandReader, payload, crypto.Hash(0))
476476
if err != nil {
477477
return Signature{}, err
478478
}
@@ -522,7 +522,7 @@ func (ctx ecDecrypterSigner) signPayload(payload []byte, alg SignatureAlgorithm)
522522
_, _ = hasher.Write(payload)
523523
hashed := hasher.Sum(nil)
524524

525-
r, s, err := ecdsa.Sign(randReader, ctx.privateKey, hashed)
525+
r, s, err := ecdsa.Sign(RandReader, ctx.privateKey, hashed)
526526
if err != nil {
527527
return Signature{}, err
528528
}

crypter_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ func TestEncrypterWithBrokenRand(t *testing.T) {
252252
for _, enc := range encAlgs {
253253
for _, key := range generateTestKeys(alg, enc) {
254254
for i, getReader := range readers {
255-
randReader = getReader()
255+
RandReader = getReader()
256256
err := RoundtripJWE(alg, enc, NONE, serializer, corrupter, nil, key.enc, key.dec)
257257
if err == nil {
258258
t.Error("encrypter should fail if rand is broken", i)

jwe_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ func TestVectorsJWE(t *testing.T) {
270270
"tag":"XFBoMYUZodetZdvTiFvSkQ" }`)
271271

272272
// Mock random reader
273-
randReader = bytes.NewReader([]byte{
273+
RandReader = bytes.NewReader([]byte{
274274
// Encryption key
275275
177, 161, 244, 128, 84, 143, 225, 115, 63, 180, 3, 255, 107, 154,
276276
212, 246, 138, 7, 110, 91, 112, 46, 34, 105, 47, 130, 203, 46, 122,

signing_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func TestSignerWithBrokenRand(t *testing.T) {
169169
for _, alg := range sigAlgs {
170170
signingKey, verificationKey := GenerateSigningTestKey(alg)
171171
for i, getReader := range readers {
172-
randReader = getReader()
172+
RandReader = getReader()
173173
err := RoundtripJWS(alg, serializer, corrupter, signingKey, verificationKey, "test_nonce")
174174
if err == nil {
175175
t.Error("signer should fail if rand is broken", alg, i)

symmetric.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import (
3535
)
3636

3737
// Random reader (stubbed out in tests)
38-
var randReader = rand.Reader
38+
var RandReader = rand.Reader
3939

4040
const (
4141
// RFC7518 recommends a minimum of 1,000 iterations:
@@ -148,7 +148,7 @@ func getPbkdf2Params(alg KeyAlgorithm) (int, func() hash.Hash) {
148148
// getRandomSalt generates a new salt of the given size.
149149
func getRandomSalt(size int) ([]byte, error) {
150150
salt := make([]byte, size)
151-
_, err := io.ReadFull(randReader, salt)
151+
_, err := io.ReadFull(RandReader, salt)
152152
if err != nil {
153153
return nil, err
154154
}
@@ -193,7 +193,7 @@ func newSymmetricSigner(sigAlg SignatureAlgorithm, key []byte) (recipientSigInfo
193193
// Generate a random key for the given content cipher
194194
func (ctx randomKeyGenerator) genKey() ([]byte, rawHeader, error) {
195195
key := make([]byte, ctx.size)
196-
_, err := io.ReadFull(randReader, key)
196+
_, err := io.ReadFull(RandReader, key)
197197
if err != nil {
198198
return nil, rawHeader{}, err
199199
}
@@ -233,7 +233,7 @@ func (ctx aeadContentCipher) encrypt(key, aad, pt []byte) (*aeadParts, error) {
233233

234234
// Initialize a new nonce
235235
iv := make([]byte, aead.NonceSize())
236-
_, err = io.ReadFull(randReader, iv)
236+
_, err = io.ReadFull(RandReader, iv)
237237
if err != nil {
238238
return nil, err
239239
}

symmetric_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func TestVectorsAESGCM(t *testing.T) {
126126
92, 80, 104, 49, 133, 25, 161, 215, 173, 101, 219, 211, 136, 91, 210, 145}
127127

128128
// Mock random reader
129-
randReader = bytes.NewReader([]byte{
129+
RandReader = bytes.NewReader([]byte{
130130
177, 161, 244, 128, 84, 143, 225, 115, 63, 180, 3, 255, 107, 154,
131131
212, 246, 138, 7, 110, 91, 112, 46, 34, 105, 47, 130, 203, 46, 122,
132132
234, 64, 252, 227, 197, 117, 252, 2, 219, 233, 68, 180, 225, 77, 219})

utils_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626

2727
// Reset random reader to original value
2828
func resetRandReader() {
29-
randReader = rand.Reader
29+
RandReader = rand.Reader
3030
}
3131

3232
// Build big int from hex-encoded string. Strips whitespace (for testing).

0 commit comments

Comments
 (0)