Description: Avoid consul dependency
 Embed the SeedMathRand function, to avoid creating a circular dependency with
 consul. Taken from https://github.com/hashicorp/consul/blob/master/lib/rand.go
 Same author and copyright as the rest of the code.
--- a/sockaddrs_test.go
+++ b/sockaddrs_test.go
@@ -1,16 +1,44 @@
 package sockaddr_test
 
 import (
+	crand "crypto/rand"
 	"fmt"
+	"math"
+	"math/big"
 	"math/rand"
+	"sync"
+	"time"
 	"testing"
 
-	"github.com/hashicorp/consul/lib"
 	"github.com/hashicorp/go-sockaddr"
 )
 
 func init() {
-	lib.SeedMathRand()
+	SeedMathRand()
+}
+
+var (
+	once sync.Once
+
+	// SeededSecurely is set to true if a cryptographically secure seed
+	// was used to initialize rand.  When false, the start time is used
+	// as a seed.
+	SeededSecurely bool
+)
+
+// SeedMathRand provides weak, but guaranteed seeding, which is better than
+// running with Go's default seed of 1.  A call to SeedMathRand() is expected
+// to be called via init(), but never a second time.
+func SeedMathRand() {
+	once.Do(func() {
+		n, err := crand.Int(crand.Reader, big.NewInt(math.MaxInt64))
+		if err != nil {
+			rand.Seed(time.Now().UTC().UnixNano())
+			return
+		}
+		rand.Seed(n.Int64())
+		SeededSecurely = true
+	})
 }
 
 // NOTE: A number of these code paths are exercised in template/ and
