package auth import ( "crypto/rand" "crypto/sha256" "encoding/hex" "errors" "golang.org/x/crypto/bcrypt" ) var ErrInvalidCredentials = errors.New("invalid credentials") func CheckPassword(hash, password string) error { if err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)); err != nil { return ErrInvalidCredentials } return nil } func NewSessionToken() (raw string, hash string, err error) { b := make([]byte, 32) if _, err = rand.Read(b); err != nil { return "", "", err } raw = hex.EncodeToString(b) hash = HashToken(raw) return raw, hash, nil } func HashToken(raw string) string { sum := sha256.Sum256([]byte(raw)) return hex.EncodeToString(sum[:]) }