summaryrefslogtreecommitdiff
path: root/kauth/crypto.go
diff options
context:
space:
mode:
Diffstat (limited to 'kauth/crypto.go')
-rw-r--r--kauth/crypto.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/kauth/crypto.go b/kauth/crypto.go
index 117076d..0ab9407 100644
--- a/kauth/crypto.go
+++ b/kauth/crypto.go
@@ -5,15 +5,42 @@ import (
"crypto/cipher"
"crypto/rand"
"encoding/base64"
+ "encoding/hex"
"errors"
+ "os"
"github.com/martinlehoux/kagamigo/kcore"
+ "golang.org/x/exp/slog"
)
var (
ErrEncryptedTooShort = errors.New("encrypted text is too short")
+ ErrCookieBadLength = errors.New("cookie secret must be 32 bytes")
)
+// Generate a random 32-byte secret for cookies
+func GenerateCookieSecret() []byte {
+ secret := make([]byte, 32)
+ _, err := rand.Read(secret)
+ kcore.Expect(err, "failed to generate random bytes")
+ return secret
+}
+
+func LoadCookieSecret(cookieSecretString string) []byte {
+ cookiesSecret, err := hex.DecodeString(cookieSecretString)
+ if err != nil {
+ err = kcore.Wrap(err, "error decoding cookie secret")
+ slog.Error(err.Error())
+ os.Exit(1)
+ }
+ if len(cookiesSecret) != 32 {
+ slog.Error(ErrCookieBadLength.Error())
+ os.Exit(1)
+ }
+ slog.Info("cookie secret loaded")
+ return cookiesSecret
+}
+
func encrypt(secret []byte, plainText string) string {
block, err := aes.NewCipher(secret)
kcore.Expect(err, "error creating AES cipher")