mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-11 06:29:29 +01:00
38 lines
758 B
Go
38 lines
758 B
Go
|
package irc
|
||
|
|
||
|
import (
|
||
|
"code.google.com/p/go.crypto/bcrypt"
|
||
|
"encoding/base64"
|
||
|
"errors"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
EmptyPasswordError = errors.New("empty password")
|
||
|
)
|
||
|
|
||
|
func GenerateEncodedPassword(passwd string) (encoded string, err error) {
|
||
|
if passwd == "" {
|
||
|
err = EmptyPasswordError
|
||
|
return
|
||
|
}
|
||
|
bcrypted, err := bcrypt.GenerateFromPassword([]byte(passwd), bcrypt.MinCost)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
encoded = base64.StdEncoding.EncodeToString(bcrypted)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func DecodePassword(encoded string) (decoded []byte, err error) {
|
||
|
if encoded == "" {
|
||
|
err = EmptyPasswordError
|
||
|
return
|
||
|
}
|
||
|
decoded, err = base64.StdEncoding.DecodeString(encoded)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func ComparePassword(hash, password []byte) error {
|
||
|
return bcrypt.CompareHashAndPassword(hash, password)
|
||
|
}
|