36 lines
659 B
Go
36 lines
659 B
Go
package main
|
|
|
|
import (
|
|
"crypto/rand"
|
|
|
|
"golang.org/x/crypto/sha3"
|
|
)
|
|
|
|
func randomBytes(size int) ([]byte, error) {
|
|
randBytes := make([]byte, size)
|
|
_, err := rand.Read(randBytes)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return randBytes, nil
|
|
}
|
|
|
|
func hashPasswordWihSalt(password string, salt []byte) ([]byte, []byte, error) {
|
|
if salt == nil {
|
|
var err error
|
|
if salt, err = randomBytes(64); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
}
|
|
|
|
hasher := sha3.New512()
|
|
if _, err := hasher.Write(salt); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
if _, err := hasher.Write([]byte(password)); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
return salt, hasher.Sum(nil), nil
|
|
}
|