package bcrypt

import "golang.org/x/crypto/bcrypt"

// Verifier verifys passwords using Bcrypt
type Verifier struct {
	cost int
}

// Verify verifys a Password
func (bv *Verifier) Verify(password string, hashOnDb string) error {
	return bcrypt.CompareHashAndPassword([]byte(hashOnDb), []byte(password))
}

// Hash calculates a hash to be stored on the database
func (bv *Verifier) Hash(password string) (string, error) {
	hash, err := bcrypt.GenerateFromPassword([]byte(password), bv.cost)
	if err != nil {
		return "", err
	}

	return string(hash[:]), nil
}
