Files
backrest/internal/cryptoutil/idutil.go

53 lines
767 B
Go

package cryptoutil
import (
"crypto/rand"
"encoding/binary"
"encoding/hex"
)
var (
DefaultIDBits = 256
)
func RandomUint64() (uint64, error) {
b := make([]byte, 8)
_, err := rand.Read(b)
if err != nil {
return 0, err
}
return binary.BigEndian.Uint64(b), nil
}
func MustRandomUint64() uint64 {
id, err := RandomUint64()
if err != nil {
panic(err)
}
return id
}
func RandomID(bits int) (string, error) {
b := make([]byte, bits/8)
_, err := rand.Read(b)
if err != nil {
return "", err
}
return hex.EncodeToString(b), nil
}
func MustRandomID(bits int) string {
id, err := RandomID(bits)
if err != nil {
panic(err)
}
return id
}
func TruncateID(id string, bits int) string {
if len(id)*4 < bits {
return id
}
return id[:bits/4]
}