9e2d6932f6
This adds the "airshipctl document" tree of commands, as well as one of its leaf commands, "generate masterpassphrase". Change-Id: I2365ebe67b38ebbbe4873c6e1beb6407f0e000eb
34 lines
827 B
Go
34 lines
827 B
Go
package secret
|
|
|
|
import (
|
|
crypto "crypto/rand"
|
|
"encoding/binary"
|
|
"math/rand"
|
|
|
|
"opendev.org/airship/airshipctl/pkg/log"
|
|
)
|
|
|
|
// Source implements rand.Source
|
|
type Source struct{}
|
|
|
|
var _ rand.Source = &Source{}
|
|
|
|
// Uint64 returns a secure random uint64 in the range [0, 1<<64]. It will fail
|
|
// if an error is returned from the system's secure random numer generator
|
|
func (s *Source) Uint64() uint64 {
|
|
var value uint64
|
|
err := binary.Read(crypto.Reader, binary.BigEndian, &value)
|
|
if err != nil {
|
|
log.Fatalf("could not generate a random number: %s", err.Error())
|
|
}
|
|
return value
|
|
}
|
|
|
|
// Int63 returns a secure random int64 in the range [0, 1<<63]
|
|
func (s *Source) Int63() int64 {
|
|
return int64(s.Uint64() & ^(uint64(1 << 63)))
|
|
}
|
|
|
|
// Seed does nothing, since Source will use the crypto library
|
|
func (s *Source) Seed(_ int64) {}
|