package crypto

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

var _ HashAlgorithm = (*BCrypt)(nil)

type BCrypt struct {
	cost int
}

func NewBCrypt(cost int) *BCrypt {
	return &BCrypt{cost: cost}
}

func (b *BCrypt) Algorithm() string {
	return "bcrypt"
}

func (b *BCrypt) Hash(value []byte) ([]byte, error) {
	return bcrypt.GenerateFromPassword(value, b.cost)
}

func (b *BCrypt) CompareHash(hashed, value []byte) error {
	return bcrypt.CompareHashAndPassword(hashed, value)
}