1package libkb 2 3import ( 4 cryptorand "crypto/rand" 5 "math/big" 6 "time" 7) 8 9// RandomJitter takes a duration of d, and output a duration uniformly 10// and randomly distributed in [.5d, 1.5d]. 11func RandomJitter(d time.Duration) time.Duration { 12 r := int64(100000) 13 nBig, err := cryptorand.Int(cryptorand.Reader, big.NewInt(r)) 14 if err != nil { 15 return d 16 } 17 x := int64(d) 18 n := nBig.Int64() 19 20 return time.Duration(3*x/2 - x*n/r) 21} 22