From 251ea4f8fcfd0960f6a627501eb556e109a3e2b6 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Thu, 25 Sep 2025 17:54:29 -0700 Subject: Use AES-CTR-HMAC-SHA256 instead of AES-GCM --- internal/pwhash/pwhash.go | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'internal') diff --git a/internal/pwhash/pwhash.go b/internal/pwhash/pwhash.go index d886746..9ef5d2a 100644 --- a/internal/pwhash/pwhash.go +++ b/internal/pwhash/pwhash.go @@ -1,24 +1,33 @@ package pwhash import ( + "crypto/hkdf" "crypto/pbkdf2" - "crypto/sha512" + "crypto/sha256" ) -const SaltLen = sha512.Size +const SaltLen = 2 * sha256.Size -const defaultIterations = 1220340 // from cmd/finditers +const defaultIterations = 3749890 // from cmd/finditers func HashIter(password string, salt []byte, iter int) ([]byte, error) { - return pbkdf2.Key(sha512.New, password, salt, iter, sha512.Size) + return pbkdf2.Key(sha256.New, password, salt, iter, sha256.Size) } -func Hash(password string, salt []byte) (key, pwHash []byte, err error) { - const aesKeySize = 32 +func Hash(password string, salt []byte) (rawKey, pwHash []byte, err error) { + const hashLen = 32 - key, err = HashIter(password, salt, defaultIterations) + key, err := HashIter(password, salt[:sha256.Size], defaultIterations) if err != nil { return nil, nil, err } - return key[:aesKeySize], key[aesKeySize:], nil + key, err = hkdf.Extract(sha256.New, key, salt[sha256.Size:]) + if err != nil { + return nil, nil, err + } + pwHash, err = hkdf.Expand(sha256.New, key, "pwhash", hashLen) + if err != nil { + return nil, nil, err + } + return key, pwHash, nil } -- cgit v1.3.1