module Language.Erlang.Digest ( genChallenge
, genDigest
)
where
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as CS
import Data.Word
import "cryptonite" Crypto.Hash (hashInitWith, hashUpdate, hashFinalize, MD5(MD5))
import System.Random (randomIO)
import Data.ByteArray (convert)
import Util.IOx
genChallenge :: IOx Word32
genChallenge = toIOx $ do
randomIO
genDigest :: Word32 -> BS.ByteString -> BS.ByteString
genDigest challenge cookie =
let
ctx0 = hashInitWith MD5
ctx1 = hashUpdate ctx0 cookie
ctx2 = hashUpdate ctx1 (CS.pack (show challenge))
digest = hashFinalize ctx2
in
convert digest