aboutsummaryrefslogtreecommitdiff
path: root/bhash/bhash.go
diff options
context:
space:
mode:
Diffstat (limited to 'bhash/bhash.go')
-rw-r--r--bhash/bhash.go20
1 files changed, 13 insertions, 7 deletions
diff --git a/bhash/bhash.go b/bhash/bhash.go
index 0c1d659..614a30c 100644
--- a/bhash/bhash.go
+++ b/bhash/bhash.go
@@ -20,10 +20,10 @@ const (
)
// Hash computes bcrypt hash
-func Hash(pass, salt []byte) []byte {
+func Hash(pass, salt []byte) ([]byte, error) {
c, err := blowfish.NewSaltedCipher(pass, salt)
if err != nil {
- panic(err)
+ return nil, err
}
// key expansion
for i := 0; i < rounds; i++ {
@@ -42,11 +42,11 @@ func Hash(pass, salt []byte) []byte {
binary.Read(bytes.NewReader(v), binary.LittleEndian, &u)
binary.Write(buf, binary.BigEndian, u)
}
- return buf.Bytes()
+ return buf.Bytes(), nil
}
// Pbkdf returns derivated key
-func Pbkdf(pass, salt []byte, iter, keyLen int) []byte {
+func Pbkdf(pass, salt []byte, iter, keyLen int) ([]byte, error) {
// collapse password
h := sha512.New()
h.Write(pass)
@@ -61,13 +61,19 @@ func Pbkdf(pass, salt []byte, iter, keyLen int) []byte {
h.Reset()
h.Write(salt)
binary.Write(h, binary.BigEndian, uint32(n))
- tmp := Hash(sha2pass, h.Sum(nil))
+ tmp, err := Hash(sha2pass, h.Sum(nil))
+ if err != nil {
+ return nil, err
+ }
copy(out, tmp)
for i := 1; i < iter; i++ {
h.Reset()
h.Write(tmp)
- tmp = Hash(sha2pass, h.Sum(nil))
+ tmp, err = Hash(sha2pass, h.Sum(nil))
+ if err != nil {
+ return nil, err
+ }
for x := range tmp {
out[x] ^= tmp[x]
}
@@ -78,5 +84,5 @@ func Pbkdf(pass, salt []byte, iter, keyLen int) []byte {
key[dst] = out[x]
}
}
- return key[:keyLen]
+ return key[:keyLen], nil
}