Skip to content

Commit f050101

Browse files
committed
removed further references to /dev/urandom
Signed-off-by: Tim Henderson <[email protected]>
1 parent 30b44a1 commit f050101

File tree

9 files changed

+115
-182
lines changed

9 files changed

+115
-182
lines changed

hashtable/hashtable_test.go

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,31 @@
11
package hashtable
22

3-
import "testing"
4-
53
import (
4+
"testing"
5+
6+
crand "crypto/rand"
67
"encoding/binary"
7-
"math/rand"
8-
"os"
9-
)
8+
mrand "math/rand"
109

11-
import (
10+
trand "github.com/timtadh/data-structures/rand"
11+
"github.com/timtadh/data-structures/test"
1212
"github.com/timtadh/data-structures/tree/avl"
1313
. "github.com/timtadh/data-structures/types"
1414
)
1515

16+
var rand *mrand.Rand
17+
1618
func init() {
17-
if urandom, err := os.Open("/dev/urandom"); err != nil {
18-
panic(err)
19+
seed := make([]byte, 8)
20+
if _, err := crand.Read(seed); err == nil {
21+
rand = trand.ThreadSafeRand(int64(binary.BigEndian.Uint64(seed)))
1922
} else {
20-
seed := make([]byte, 8)
21-
if _, err := urandom.Read(seed); err == nil {
22-
rand.Seed(int64(binary.BigEndian.Uint64(seed)))
23-
}
24-
urandom.Close()
23+
panic(err)
2524
}
2625
}
2726

2827
func randstr(length int) String {
29-
if urandom, err := os.Open("/dev/urandom"); err != nil {
30-
panic(err)
31-
} else {
32-
slice := make([]byte, length)
33-
if _, err := urandom.Read(slice); err != nil {
34-
panic(err)
35-
}
36-
urandom.Close()
37-
return String(slice)
38-
}
39-
panic("unreachable")
28+
return String(test.RandStr(length))
4029
}
4130

4231
func TestMake(t *testing.T) {
@@ -300,11 +289,16 @@ func BenchmarkMLHashBetter(b *testing.B) {
300289
for _, r := range records {
301290
t.Put(r.key, r.value)
302291
}
303-
for _, _, next := t.Iterate()(); next != nil; _, _, next = next() {}
304-
for _, next := t.Keys()(); next != nil; _, next = next() {}
305-
for _, next := t.Values()(); next != nil; _, next = next() {}
306-
for _, next := t.Values()(); next != nil; _, next = next() {}
307-
for _, next := t.Values()(); next != nil; _, next = next() {}
292+
for _, _, next := t.Iterate()(); next != nil; _, _, next = next() {
293+
}
294+
for _, next := t.Keys()(); next != nil; _, next = next() {
295+
}
296+
for _, next := t.Values()(); next != nil; _, next = next() {
297+
}
298+
for _, next := t.Values()(); next != nil; _, next = next() {
299+
}
300+
for _, next := t.Values()(); next != nil; _, next = next() {
301+
}
308302
for _, r := range records {
309303
t.Remove(r.key)
310304
}

linked/linked_test.go

Lines changed: 17 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,43 @@
11
package linked
22

3-
import "testing"
4-
53
import (
4+
"testing"
5+
6+
crand "crypto/rand"
67
"encoding/binary"
78
"encoding/hex"
8-
"math/rand"
9-
"os"
10-
)
9+
mrand "math/rand"
1110

12-
import (
1311
"github.com/timtadh/data-structures/list"
12+
trand "github.com/timtadh/data-structures/rand"
1413
"github.com/timtadh/data-structures/types"
1514
)
1615

16+
var rand *mrand.Rand
17+
1718
func init() {
18-
if urandom, err := os.Open("/dev/urandom"); err != nil {
19-
panic(err)
19+
seed := make([]byte, 8)
20+
if _, err := crand.Read(seed); err == nil {
21+
rand = trand.ThreadSafeRand(int64(binary.BigEndian.Uint64(seed)))
2022
} else {
21-
seed := make([]byte, 8)
22-
if _, err := urandom.Read(seed); err == nil {
23-
rand.Seed(int64(binary.BigEndian.Uint64(seed)))
24-
}
25-
urandom.Close()
23+
panic(err)
2624
}
2725
}
2826

2927
func randstr(length int) types.String {
30-
if urandom, err := os.Open("/dev/urandom"); err != nil {
28+
slice := make([]byte, length)
29+
if _, err := crand.Read(slice); err != nil {
3130
panic(err)
32-
} else {
33-
slice := make([]byte, length)
34-
if _, err := urandom.Read(slice); err != nil {
35-
panic(err)
36-
}
37-
urandom.Close()
38-
return types.String(slice)
3931
}
40-
panic("unreachable")
32+
return types.String(slice)
4133
}
4234

4335
func randhex(length int) types.String {
44-
if urandom, err := os.Open("/dev/urandom"); err != nil {
36+
slice := make([]byte, length/2)
37+
if _, err := crand.Read(slice); err != nil {
4538
panic(err)
46-
} else {
47-
slice := make([]byte, length/2)
48-
if _, err := urandom.Read(slice); err != nil {
49-
panic(err)
50-
}
51-
urandom.Close()
52-
return types.String(hex.EncodeToString(slice))
5339
}
54-
panic("unreachable")
40+
return types.String(hex.EncodeToString(slice))
5541
}
5642

5743
func TestEquals(t *testing.T) {

list/array_list_test.go

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,26 @@ package list
33
import "testing"
44

55
import (
6+
crand "crypto/rand"
67
"encoding/binary"
78
"fmt"
8-
"math/rand"
9-
"os"
9+
mrand "math/rand"
1010
"runtime/debug"
1111
)
1212

1313
import (
14+
trand "github.com/timtadh/data-structures/rand"
1415
"github.com/timtadh/data-structures/types"
1516
)
1617

18+
var rand *mrand.Rand
19+
1720
func init() {
18-
if urandom, err := os.Open("/dev/urandom"); err != nil {
19-
panic(err)
21+
seed := make([]byte, 8)
22+
if _, err := crand.Read(seed); err == nil {
23+
rand = trand.ThreadSafeRand(int64(binary.BigEndian.Uint64(seed)))
2024
} else {
21-
seed := make([]byte, 8)
22-
if _, err := urandom.Read(seed); err == nil {
23-
rand.Seed(int64(binary.BigEndian.Uint64(seed)))
24-
}
25-
urandom.Close()
25+
panic(err)
2626
}
2727
}
2828

@@ -48,17 +48,11 @@ func (t *T) assert_nil(errors ...error) {
4848
}
4949

5050
func (t *T) randslice(length int) types.ByteSlice {
51-
if urandom, err := os.Open("/dev/urandom"); err != nil {
52-
panic(err)
53-
} else {
54-
slice := make([]byte, length)
55-
if _, err := urandom.Read(slice); err != nil {
56-
t.Fatal(err)
57-
}
58-
urandom.Close()
59-
return types.ByteSlice(slice)
51+
slice := make([]byte, length)
52+
if _, err := crand.Read(slice); err != nil {
53+
t.Fatal(err)
6054
}
61-
panic("unreachable")
55+
return types.ByteSlice(slice)
6256
}
6357

6458
func TestAppendGet(x *testing.T) {

list/fixed_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import "testing"
44

55
import (
66
"fmt"
7-
"math/rand"
87
)
98

109
import (

list/sorted_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import "testing"
44

55
import (
66
"fmt"
7-
"math/rand"
87
)
98

109
import (

test/support.go

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
11
package test
22

3-
import "testing"
4-
53
import (
4+
"runtime/debug"
5+
"testing"
6+
7+
crand "crypto/rand"
68
"encoding/binary"
79
"encoding/hex"
8-
"math/rand"
9-
"os"
10-
"runtime/debug"
10+
mrand "math/rand"
11+
12+
trand "github.com/timtadh/data-structures/rand"
1113
)
1214

15+
var rand *mrand.Rand
16+
1317
func init() {
14-
if urandom, err := os.Open("/dev/urandom"); err != nil {
15-
panic(err)
18+
seed := make([]byte, 8)
19+
if _, err := crand.Read(seed); err == nil {
20+
rand = trand.ThreadSafeRand(int64(binary.BigEndian.Uint64(seed)))
1621
} else {
17-
seed := make([]byte, 8)
18-
if _, err := urandom.Read(seed); err == nil {
19-
rand.Seed(int64(binary.BigEndian.Uint64(seed)))
20-
}
21-
urandom.Close()
22+
panic(err)
2223
}
2324
}
2425

@@ -46,17 +47,11 @@ func (t *T) AssertNil(errors ...error) {
4647
}
4748

4849
func RandSlice(length int) []byte {
49-
if urandom, err := os.Open("/dev/urandom"); err != nil {
50+
slice := make([]byte, length)
51+
if _, err := crand.Read(slice); err != nil {
5052
panic(err)
51-
} else {
52-
slice := make([]byte, length)
53-
if _, err := urandom.Read(slice); err != nil {
54-
panic(err)
55-
}
56-
urandom.Close()
57-
return slice
5853
}
59-
panic("unreachable")
54+
return slice
6055
}
6156

6257
func RandHex(length int) string {

tree/avl/avltree_test.go

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,30 @@
11
package avl
22

3-
import "testing"
4-
53
import (
6-
"bytes"
4+
"testing"
5+
6+
crand "crypto/rand"
77
"encoding/binary"
8-
"math/rand"
9-
"os"
10-
)
8+
mrand "math/rand"
119

12-
import (
10+
trand "github.com/timtadh/data-structures/rand"
11+
"github.com/timtadh/data-structures/test"
1312
"github.com/timtadh/data-structures/types"
1413
)
1514

15+
var rand *mrand.Rand
16+
1617
func init() {
17-
if urandom, err := os.Open("/dev/urandom"); err != nil {
18-
return
18+
seed := make([]byte, 8)
19+
if _, err := crand.Read(seed); err == nil {
20+
rand = trand.ThreadSafeRand(int64(binary.BigEndian.Uint64(seed)))
1921
} else {
20-
buf := make([]byte, 8)
21-
if _, err := urandom.Read(buf); err == nil {
22-
buf_reader := bytes.NewReader(buf)
23-
if seed, err := binary.ReadVarint(buf_reader); err == nil {
24-
rand.Seed(seed)
25-
}
26-
}
27-
urandom.Close()
22+
panic(err)
2823
}
2924
}
3025

3126
func randstr(length int) types.String {
32-
if urandom, err := os.Open("/dev/urandom"); err != nil {
33-
panic(err)
34-
} else {
35-
slice := make([]byte, length)
36-
if _, err := urandom.Read(slice); err != nil {
37-
panic(err)
38-
}
39-
urandom.Close()
40-
return types.String(slice)
41-
}
42-
panic("unreachable")
27+
return types.String(test.RandStr(length))
4328
}
4429

4530
func TestAvlPutHasGetRemove(t *testing.T) {

0 commit comments

Comments
 (0)