matebeamter/src/Hash.hs
2019-09-17 21:29:56 +02:00

28 lines
693 B
Haskell

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 (ask)
import Control.Monad.IO.Class (liftIO)
-- internal imports
import Types
hashPassword
:: T.Text
-> UserHandler T.Text
hashPassword passwd = do
(HashParams iter saltl outputl) <- rsHashParams <$> ask
salt <- liftIO $ random (fromIntegral saltl)
let hash = generate (prfHMAC SHA3_512) (Parameters iter outputl) (encodeUtf8 passwd) salt :: ByteString
return $ decodeUtf8 $ B64.encode hash