sum7/warehost
sum7
/
warehost
Archived
1
0
Fork 0
This repository has been archived on 2020-09-27. You can view files and clone it, but cannot push or open issues or pull requests.
warehost/lib/password/password.go

57 lines
1.5 KiB
Go
Raw Normal View History

2016-05-12 19:16:39 +02:00
package libPassword
import "golang.org/x/crypto/pbkdf2"
import "hash"
import "strconv"
import "encoding/base64"
import "crypto/sha1"
import "crypto/sha256"
import "crypto/sha512"
import "crypto/rand"
import "fmt"
import "strings"
const (
2016-08-24 23:02:25 +02:00
salt_length = 8
hash_length = 20
interations = 10000
hashfunc string = "sha256"
2016-05-12 19:16:39 +02:00
)
2016-08-24 23:02:25 +02:00
var hashlib = map[string]func() hash.Hash{
"sha1": sha1.New,
"sha256": sha256.New,
"sha512": sha512.New,
}
func Validate(hash, password string) (output, replace bool) {
parts := strings.Split(hash, "$")
2016-05-12 19:16:39 +02:00
if len(parts) == 3 {
2016-08-24 23:02:25 +02:00
return false, false
2016-05-12 19:16:39 +02:00
}
2016-08-24 23:02:25 +02:00
cur_iter, err := strconv.Atoi(parts[1])
2016-05-12 19:16:39 +02:00
if err != nil {
2016-08-24 23:02:25 +02:00
return false, false
2016-05-12 19:16:39 +02:00
}
2016-08-24 23:02:25 +02:00
hashfunc_c := strings.Split(parts[0], "_")[1]
replace = (hashfunc_c != hashfunc)
2016-05-12 19:16:39 +02:00
dk := pbkdf2.Key([]byte(password), []byte(parts[2]), cur_iter, len(parts[3])-8, hashlib[hashfunc_c])
2016-08-24 23:02:25 +02:00
x := fmt.Sprintf("pbkdf2_%s$%s$%s$%s", hashfunc_c, parts[1], parts[2], base64.StdEncoding.EncodeToString(dk))
output = (x == hash)
2016-05-12 19:16:39 +02:00
return
}
func GenerateRandomString(n int) (string, error) {
b := make([]byte, n)
_, err := rand.Read(b)
if err != nil {
return "", err
}
return base64.URLEncoding.EncodeToString(b), nil
}
2016-08-24 23:02:25 +02:00
func NewHash(password string) string {
salt, _ := GenerateRandomString(salt_length)
dk := pbkdf2.Key([]byte(password), []byte(salt), interations, hash_length, hashlib[hashfunc])
return fmt.Sprintf("pbkdf2_%s$%d$%s$%s", hashfunc, interations, salt, base64.StdEncoding.EncodeToString(dk))
2016-05-12 19:16:39 +02:00
}