package utils import ( "crypto/hmac" "crypto/sha512" "encoding/base64" "math/rand" ) var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") func RandomString(n int) string { s := make([]rune, n) for i := range s { s[i] = letters[rand.Intn(len(letters))] } return string(s) } func SignString(s string, key []byte) string { mac := hmac.New(sha512.New, key) mac.Write([]byte(s)) return base64.StdEncoding.EncodeToString(mac.Sum(nil)) } func SignAndCompare(s string, exp string, key []byte) bool { mac := hmac.New(sha512.New, key) mac.Write([]byte(s)) decoded, err := base64.StdEncoding.DecodeString(exp) if err != nil { return false } return hmac.Equal(mac.Sum(nil), decoded) }