keyctl/pkg/key/key.go
2023-03-14 01:43:04 +01:00

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
}