You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

password.go 750B

12345678910111213141516171819202122232425262728293031323334353637
  1. package irc
  2. import (
  3. "golang.org/x/crypto/bcrypt"
  4. "encoding/base64"
  5. "errors"
  6. )
  7. var (
  8. EmptyPasswordError = errors.New("empty password")
  9. )
  10. func GenerateEncodedPassword(passwd string) (encoded string, err error) {
  11. if passwd == "" {
  12. err = EmptyPasswordError
  13. return
  14. }
  15. bcrypted, err := bcrypt.GenerateFromPassword([]byte(passwd), bcrypt.MinCost)
  16. if err != nil {
  17. return
  18. }
  19. encoded = base64.StdEncoding.EncodeToString(bcrypted)
  20. return
  21. }
  22. func DecodePassword(encoded string) (decoded []byte, err error) {
  23. if encoded == "" {
  24. err = EmptyPasswordError
  25. return
  26. }
  27. decoded, err = base64.StdEncoding.DecodeString(encoded)
  28. return
  29. }
  30. func ComparePassword(hash, password []byte) error {
  31. return bcrypt.CompareHashAndPassword(hash, password)
  32. }