Files
chorus/internal/platform/password/password.go
T

31 lines
689 B
Go

package password
import (
"errors"
"strings"
"golang.org/x/crypto/bcrypt"
)
const prefix = "bcrypt:v1:"
var ErrInvalidEncoding = errors.New("password hash encoding is invalid")
func Encode(value string) (string, error) {
if len(value) < 12 || len(value) > 1024 {
return "", ErrInvalidEncoding
}
hash, err := bcrypt.GenerateFromPassword([]byte(value), bcrypt.DefaultCost)
if err != nil {
return "", err
}
return prefix + string(hash), nil
}
func Verify(encoded, value string) bool {
if !strings.HasPrefix(encoded, prefix) || len(value) > 1024 {
return false
}
return bcrypt.CompareHashAndPassword([]byte(strings.TrimPrefix(encoded, prefix)), []byte(value)) == nil
}