woj-server/pkg/utils/string.go

39 lines
737 B
Go

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)
}