mirror of
https://github.com/jsiebens/ionscale.git
synced 2026-03-31 15:07:49 +01:00
71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
package util
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"crypto/rand"
|
|
"crypto/rsa"
|
|
"encoding/binary"
|
|
"encoding/hex"
|
|
"encoding/json"
|
|
"math/big"
|
|
)
|
|
|
|
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
|
|
func RandStringBytes(n int) string {
|
|
b := make([]byte, n)
|
|
for i := range b {
|
|
idx, err := rand.Int(rand.Reader, big.NewInt(int64(len(letterBytes))))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
b[i] = letterBytes[idx.Int64()]
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func RandUint64(n uint64) uint64 {
|
|
val, err := rand.Int(rand.Reader, big.NewInt(int64(n)))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return val.Uint64()
|
|
}
|
|
|
|
func RandUint16() uint16 {
|
|
var randomBytes [2]byte
|
|
_, err := rand.Read(randomBytes[:])
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return binary.BigEndian.Uint16(randomBytes[:])
|
|
}
|
|
|
|
func RandomBytes(size int) ([]byte, error) {
|
|
buf := make([]byte, size)
|
|
if _, err := rand.Read(buf); err != nil {
|
|
return nil, err
|
|
}
|
|
return buf, nil
|
|
}
|
|
|
|
func NewPrivateKey() (*rsa.PrivateKey, string, error) {
|
|
id := RandStringBytes(22)
|
|
|
|
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
return privateKey, id, nil
|
|
}
|
|
|
|
func Checksum(v interface{}) string {
|
|
marshal, err := json.Marshal(v)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
sum := md5.Sum(marshal)
|
|
return hex.EncodeToString(sum[:])
|
|
}
|