48 lines
805 B
Go
48 lines
805 B
Go
// Copyright (C) 2023 Marius Schellenberger
|
|
|
|
package key
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"io"
|
|
"time"
|
|
|
|
"git.giftfish.de/ston1th/keyctl/pkg/core"
|
|
)
|
|
|
|
const idSize = 16
|
|
|
|
func generate(size int) (buf []byte, err error) {
|
|
buf = make([]byte, size)
|
|
_, err = io.ReadFull(rand.Reader, buf)
|
|
return
|
|
}
|
|
|
|
func GenerateID() (string, error) {
|
|
id, err := generate(idSize)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return hex.EncodeToString(id), nil
|
|
}
|
|
|
|
func Generate(name string, size int, enc core.Encoding) (k core.Key, err error) {
|
|
id, err := GenerateID()
|
|
if err != nil {
|
|
return
|
|
}
|
|
key, err := generate(size)
|
|
if err != nil {
|
|
return
|
|
}
|
|
k = core.Key{
|
|
Name: name,
|
|
ID: id,
|
|
Size: size,
|
|
Encoding: enc.String(),
|
|
Key: enc.Encode(key),
|
|
Created: time.Now().Unix(),
|
|
}
|
|
return
|
|
}
|