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
|