Upgrading server dependancies (#6431)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
cd23b8139a
Коммит
d103ed6ca9
24
vendor/github.com/sean-/seed/.gitignore
сгенерированный
поставляемый
Обычный файл
24
vendor/github.com/sean-/seed/.gitignore
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,24 @@
|
||||
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
||||
*.o
|
||||
*.a
|
||||
*.so
|
||||
|
||||
# Folders
|
||||
_obj
|
||||
_test
|
||||
|
||||
# Architecture specific extensions/prefixes
|
||||
*.[568vq]
|
||||
[568vq].out
|
||||
|
||||
*.cgo1.go
|
||||
*.cgo2.c
|
||||
_cgo_defun.c
|
||||
_cgo_gotypes.go
|
||||
_cgo_export.*
|
||||
|
||||
_testmain.go
|
||||
|
||||
*.exe
|
||||
*.test
|
||||
*.prof
|
||||
54
vendor/github.com/sean-/seed/LICENSE
сгенерированный
поставляемый
Обычный файл
54
vendor/github.com/sean-/seed/LICENSE
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,54 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 Sean Chittenden
|
||||
Copyright (c) 2016 Alex Dadgar
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
=====
|
||||
|
||||
Bits of Go-lang's `once.Do()` were cribbed and reused here, too.
|
||||
|
||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
44
vendor/github.com/sean-/seed/README.md
сгенерированный
поставляемый
Обычный файл
44
vendor/github.com/sean-/seed/README.md
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,44 @@
|
||||
# `seed` - Quickly Seed Go's Random Number Generator
|
||||
|
||||
Boiler-plate to securely [seed](https://en.wikipedia.org/wiki/Random_seed) Go's
|
||||
random number generator (if possible). This library isn't anything fancy, it's
|
||||
just a canonical way of seeding Go's random number generator. Cribbed from
|
||||
[`Nomad`](https://github.com/hashicorp/nomad/commit/f89a993ec6b91636a3384dd568898245fbc273a1)
|
||||
before it was moved into
|
||||
[`Consul`](https://github.com/hashicorp/consul/commit/d695bcaae6e31ee307c11fdf55bb0bf46ea9fcf4)
|
||||
and made into a helper function, and now further modularized to be a super
|
||||
lightweight and reusable library.
|
||||
|
||||
Time is better than
|
||||
[Go's default seed of `1`](https://golang.org/pkg/math/rand/#Seed), but friends
|
||||
don't let friends use time as a seed to a random number generator. Use
|
||||
`seed.MustInit()` instead.
|
||||
|
||||
`seed.Init()` is an idempotent and reentrant call that will return an error if
|
||||
it can't seed the value the first time it is called. `Init()` is reentrant.
|
||||
|
||||
`seed.MustInit()` is idempotent and reentrant call that will `panic()` if it
|
||||
can't seed the value the first time it is called. `MustInit()` is reentrant.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
package mypackage
|
||||
|
||||
import (
|
||||
"github.com/sean-/seed"
|
||||
)
|
||||
|
||||
// MustInit will panic() if it is unable to set a high-entropy random seed:
|
||||
func init() {
|
||||
seed.MustInit()
|
||||
}
|
||||
|
||||
// Or if you want to not panic() and can actually handle this error:
|
||||
func init() {
|
||||
if secure, err := !seed.Init(); !secure {
|
||||
// Handle the error
|
||||
//panic(fmt.Sprintf("Unable to securely seed Go's RNG: %v", err))
|
||||
}
|
||||
}
|
||||
```
|
||||
84
vendor/github.com/sean-/seed/init.go
сгенерированный
поставляемый
Обычный файл
84
vendor/github.com/sean-/seed/init.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,84 @@
|
||||
package seed
|
||||
|
||||
import (
|
||||
crand "crypto/rand"
|
||||
"fmt"
|
||||
"math"
|
||||
"math/big"
|
||||
"math/rand"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
m sync.Mutex
|
||||
secure int32
|
||||
seeded int32
|
||||
)
|
||||
|
||||
func cryptoSeed() error {
|
||||
defer atomic.StoreInt32(&seeded, 1)
|
||||
|
||||
var err error
|
||||
var n *big.Int
|
||||
n, err = crand.Int(crand.Reader, big.NewInt(math.MaxInt64))
|
||||
if err != nil {
|
||||
rand.Seed(time.Now().UTC().UnixNano())
|
||||
return err
|
||||
}
|
||||
rand.Seed(n.Int64())
|
||||
atomic.StoreInt32(&secure, 1)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Init provides best-effort seeding (which is better than running with Go's
|
||||
// default seed of 1). If `/dev/urandom` is available, Init() will seed Go's
|
||||
// runtime with entropy from `/dev/urandom` and return true because the runtime
|
||||
// was securely seeded. If Init() has already initialized the random number or
|
||||
// it had failed to securely initialize the random number generation, Init()
|
||||
// will return false. See MustInit().
|
||||
func Init() (seededSecurely bool, err error) {
|
||||
if atomic.LoadInt32(&seeded) == 1 {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// Slow-path
|
||||
m.Lock()
|
||||
defer m.Unlock()
|
||||
|
||||
if err := cryptoSeed(); err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// MustInit provides guaranteed secure seeding. If `/dev/urandom` is not
|
||||
// available, MustInit will panic() with an error indicating why reading from
|
||||
// `/dev/urandom` failed. MustInit() will upgrade the seed if for some reason a
|
||||
// call to Init() failed in the past.
|
||||
func MustInit() {
|
||||
if atomic.LoadInt32(&secure) == 1 {
|
||||
return
|
||||
}
|
||||
|
||||
// Slow-path
|
||||
m.Lock()
|
||||
defer m.Unlock()
|
||||
|
||||
if err := cryptoSeed(); err != nil {
|
||||
panic(fmt.Sprintf("Unable to seed the random number generator: %v", err))
|
||||
}
|
||||
}
|
||||
|
||||
// Secure returns true if a cryptographically secure seed was used to
|
||||
// initialize rand.
|
||||
func Secure() bool {
|
||||
return atomic.LoadInt32(&secure) == 1
|
||||
}
|
||||
|
||||
// Seeded returns true if Init has seeded the random number generator.
|
||||
func Seeded() bool {
|
||||
return atomic.LoadInt32(&seeded) == 1
|
||||
}
|
||||
26
vendor/github.com/sean-/seed/init_test.go
сгенерированный
поставляемый
Обычный файл
26
vendor/github.com/sean-/seed/init_test.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,26 @@
|
||||
package seed_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/sean-/seed"
|
||||
)
|
||||
|
||||
func TestInit(t *testing.T) {
|
||||
secure, err := seed.Init()
|
||||
if !secure {
|
||||
t.Fatalf("Failed to securely seed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMustInit(t *testing.T) {
|
||||
seed.MustInit()
|
||||
|
||||
if !seed.Seeded() {
|
||||
t.Fatalf("MustInit() failed to seed")
|
||||
}
|
||||
|
||||
if !seed.Secure() {
|
||||
t.Fatalf("MustInit() failed to securely seed")
|
||||
}
|
||||
}
|
||||
Ссылка в новой задаче
Block a user