backblaze-b2-hs-0.1.0.0: src/Network/BackblazeB2/Crypto.hs
module Network.BackblazeB2.Crypto where
import qualified Crypto.Hash as Hash
import qualified Data.Conduit as C
import LocalPrelude
sha1Hasher :: Monad m => C.ConduitT ByteString ByteString m ()
sha1Hasher = loop Hash.hashInit
where
loop :: Monad m => Hash.Context Hash.SHA1
-> C.ConduitT ByteString ByteString m ()
loop !context = do
bytesM <- C.await
case bytesM of
Just bytes -> do C.yield bytes
loop $ Hash.hashUpdate context bytes
_ -> do let digest = Hash.hashFinalize context
C.yield $ show digest