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 825B

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