blob: c71e3728e336fa58ec33e2be6e453f32157f8a49 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
module Model.HashedPassword
( hash
, check
, HashedPassword(..)
) where
import qualified Crypto.BCrypt as BCrypt
import Data.Text (Text)
import qualified Data.Text.Encoding as TE
import Common.Model.Password (Password (..))
newtype HashedPassword = HashedPassword Text deriving (Show)
hash :: Password -> IO (Maybe HashedPassword)
hash (Password p) = do
hashed <- BCrypt.hashPasswordUsingPolicy BCrypt.slowerBcryptHashingPolicy (TE.encodeUtf8 p)
case hashed of
Nothing ->
return Nothing
Just h ->
return . Just . HashedPassword . TE.decodeUtf8 $ h
check :: Password -> HashedPassword -> Bool
check (Password p) (HashedPassword h) =
BCrypt.validatePassword (TE.encodeUtf8 h) (TE.encodeUtf8 p)
|