libgocryptfs/cryptfs/kdf.go

39 lines
658 B
Go

package cryptfs
import (
"fmt"
"golang.org/x/crypto/scrypt"
)
const (
// 1 << 16 uses 64MB of memory,
// takes 4 seconds on my Atom Z3735F netbook
SCRYPT_DEFAULT_N = 1 << 16
)
type scryptKdf struct {
Salt []byte
N int
R int
P int
KeyLen int
}
func NewScryptKdf() scryptKdf {
var s scryptKdf
s.Salt = RandBytes(KEY_LEN)
s.N = SCRYPT_DEFAULT_N
s.R = 8 // Always 8
s.P = 1 // Always 1
s.KeyLen = KEY_LEN
return s
}
func (s *scryptKdf) DeriveKey(pw string) []byte {
k, err := scrypt.Key([]byte(pw), s.Salt, s.N, s.R, s.P, s.KeyLen)
if err != nil {
panic(fmt.Sprintf("DeriveKey failed: %s", err.Error()))
}
return k
}