-- 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.
--   
--   If, instead, you require a pure Haskell implementation and performance
--   is secondary, please refer to the <a>pureMD5 package</a>.
--   
--   <h3>Packages in the <tt>cryptohash-*</tt> family</h3>
--   
--   <ul>
--   <li><a>cryptohash-md5</a></li>
--   <li><a>cryptohash-sha1</a></li>
--   <li><a>cryptohash-sha256</a></li>
--   <li><a>cryptohash-sha512</a></li>
--   </ul>
--   
--   <h3>Relationship to the <tt>cryptohash</tt> package and its API</h3>
--   
--   This package has been originally a fork of <tt>cryptohash-0.11.7</tt>
--   because the <tt>cryptohash</tt> package had 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>. The API exposed by
--   <tt>cryptohash-md5-0.11.*</tt>'s <a>Crypto.Hash.MD5</a> module is
--   guaranteed to remain a compatible superset of the API provided by the
--   <tt>cryptohash-0.11.7</tt>'s module of the same name.
--   
--   Consequently, this package is designed to be used as a drop-in
--   replacement for <tt>cryptohash-0.11.7</tt>'s <a>Crypto.Hash.MD5</a>
--   module, though with a <a>clearly smaller footprint by almost 3 orders
--   of magnitude</a>.
@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
