-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Fast, pure and practical MD5 implementation
--   
--   A practical incremental and one-pass, pure API to the <a>MD5 hash
--   algorithm</a> (including <a>HMAC</a> support) with performance close
--   to the fastest implementations available in other languages.
--   
--   The implementation is made in C with a haskell FFI wrapper that hides
--   the C implementation.
--   
--   NOTE: This package has been forked off <tt>cryptohash-0.11.7</tt>
--   because the <tt>cryptohash</tt> package has been deprecated and so
--   this package continues to satisfy the need for a lightweight package
--   providing the MD5 hash algorithm without any dependencies on packages
--   other than <tt>base</tt> and <tt>bytestring</tt>.
--   
--   Consequently, this package can be used as a drop-in replacement for
--   <tt>cryptohash</tt>'s <a>Crypto.Hash.MD5</a> module, though with a
--   clearly smaller footprint.
@package cryptohash-md5
@version 0.11.100.1


-- | A module containing <a>MD5</a> bindings
module Crypto.Hash.MD5

-- | MD5 Context
--   
--   The context data is exactly 88 bytes long, however the data in the
--   context is stored in host-endianness.
--   
--   The context data is made up of
--   
--   <ul>
--   <li>a <a>Word64</a> representing the number of bytes already feed to
--   hash algorithm so far,</li>
--   <li>a 64-element <a>Word8</a> buffer holding partial input-chunks, and
--   finally</li>
--   <li>a 4-element <a>Word32</a> array holding the current
--   work-in-progress digest-value.</li>
--   </ul>
--   
--   Consequently, a MD5 digest as produced by <a>hash</a>,
--   <a>hashlazy</a>, or <a>finalize</a> is 16 bytes long.
newtype Ctx
Ctx :: ByteString -> Ctx

-- | create a new hash context
init :: Ctx

-- | update a context with a bytestring
update :: Ctx -> ByteString -> Ctx

-- | updates a context with multiple bytestrings
updates :: Ctx -> [ByteString] -> Ctx

-- | finalize the context into a digest bytestring (16 bytes)
finalize :: Ctx -> ByteString

-- | hash a strict bytestring into a digest bytestring (16 bytes)
hash :: ByteString -> ByteString

-- | hash a lazy bytestring into a digest bytestring (16 bytes)
hashlazy :: ByteString -> ByteString

-- | Compute 16-byte <a>RFC2104</a>-compatible HMAC-Md5 digest for a strict
--   bytestring message
hmac :: ByteString -> ByteString -> ByteString

-- | Compute 16-byte <a>RFC2104</a>-compatible HMAC-MD5 digest for a lazy
--   bytestring message
hmaclazy :: ByteString -> ByteString -> ByteString
