module Hash where import Crypto.KDF.PBKDF2 import Crypto.Hash.Algorithms (SHA3_512(..)) import qualified Data.Text as T import Data.Text.Encoding import Data.ByteString import Data.ByteString.Random (random) import qualified Data.ByteString.Base64 as B64 import Control.Monad.Reader (asks) import Control.Monad.IO.Class (liftIO) -- internal imports import Types hashPassword :: T.Text -> UserHandler T.Text hashPassword passwd = do (HashParams iter _ outputl) <- asks rsHashParams let saltl = 0 :: Int salt <- liftIO $ random (fromIntegral saltl) let hash = generate (prfHMAC SHA3_512) (Parameters iter outputl) (encodeUtf8 passwd) salt :: ByteString return $ decodeUtf8 $ B64.encode hash