matebeamter/src/Hash.hs

29 lines
710 B
Haskell
Raw Normal View History

2019-09-17 19:29:56 +00:00
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
2019-10-16 16:07:12 +00:00
import Control.Monad.Reader (asks)
2019-09-17 19:29:56 +00:00
import Control.Monad.IO.Class (liftIO)
-- internal imports
import Types
hashPassword
:: T.Text
-> UserHandler T.Text
hashPassword passwd = do
2019-10-16 16:07:12 +00:00
(HashParams iter _ outputl) <- asks rsHashParams
let saltl = 0 :: Int
2019-09-17 19:29:56 +00:00
salt <- liftIO $ random (fromIntegral saltl)
let hash = generate (prfHMAC SHA3_512) (Parameters iter outputl) (encodeUtf8 passwd) salt :: ByteString
return $ decodeUtf8 $ B64.encode hash