mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-25 19:15:34 +00:00
71029cea2d
This updates all source files to use a new standard header for copyright and license declaration. Notably, copyright no longer includes a date, and we now use the standard SPDX-License-Identifier header. This commit was done almost entirely mechanically with perl, and then some minimal manual fixes. Updates #6865 Signed-off-by: Will Norris <will@tailscale.com>
44 lines
941 B
Go
44 lines
941 B
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package tstime
|
|
|
|
import (
|
|
crand "crypto/rand"
|
|
"encoding/binary"
|
|
"math/rand"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
// crandSource is a rand.Source64 that gets its numbers from
|
|
// crypto/rand.Reader.
|
|
type crandSource struct{ sync.Mutex }
|
|
|
|
var _ rand.Source64 = (*crandSource)(nil)
|
|
|
|
func (s *crandSource) Int63() int64 { return int64(s.Uint64() >> 1) }
|
|
|
|
func (s *crandSource) Uint64() uint64 {
|
|
s.Lock()
|
|
defer s.Unlock()
|
|
var buf [8]byte
|
|
crand.Read(buf[:])
|
|
return binary.BigEndian.Uint64(buf[:])
|
|
}
|
|
|
|
func (*crandSource) Seed(seed int64) {} // nope
|
|
|
|
var durRand = rand.New(new(crandSource))
|
|
|
|
// RandomDurationBetween returns a random duration in range [min,max).
|
|
// If panics if max < min.
|
|
func RandomDurationBetween(min, max time.Duration) time.Duration {
|
|
diff := max - min
|
|
if diff == 0 {
|
|
return min
|
|
}
|
|
ns := durRand.Int63n(int64(diff))
|
|
return min + time.Duration(ns)
|
|
}
|