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

-- | A Haskell-only implementation of the MD5 digest (hash) algorithm.
--   
--   A Haskell-only implementation of the MD5 digest (hash) algorithm. This
--   now supports the crypto-api class interface.
@package pureMD5
@version 2.1.2.1

-- | It is suggested you use the 'crypto-api' class-based interface to
--   access the MD5 algorithm. Either rely on type inference or provide an
--   explicit type:
--   
--   
--   hashFileStrict = liftM hash' B.readFile
--   hashFileLazyBS = liftM hash B.readFile
--   
module Data.Digest.Pure.MD5

-- | The type for final results.
data MD5Context

-- | After finalizing a context, using md5Finalize, a new type is returned
--   to prevent 're-finalizing' the structure.
data MD5Digest

-- | The initial context to use when calling md5Update for the first time
md5InitialContext :: MD5Context

-- | Processes a lazy ByteString and returns the md5 digest. This is
--   probably what you want.
md5 :: ByteString -> MD5Digest

-- | Alters the MD5Context with a partial digest of the data.
--   
--   The input bytestring MUST be a multiple of the blockSize or bad things
--   can happen (incorrect digest results)!
md5Update :: MD5Context -> ByteString -> MD5Context

-- | Closes an MD5 context, thus producing the digest.
md5Finalize :: MD5Context -> ByteString -> MD5Digest

-- | The Hash class is intended as the generic interface targeted by
--   maintainers of Haskell digest implementations. Using this generic
--   interface, higher level functions such as hash and hash'
--   provide a useful API for comsumers of hash implementations.
--   
--   Any instantiated implementation must handle unaligned data.
--   
--   Minimum complete definition: outputLength, blockLength,
--   initialCtx, updateCtx, and finalize.
class (Serialize d, Eq d, Ord d) => Hash ctx d | d -> ctx, ctx -> d
outputLength :: Hash ctx d => Tagged * d BitLength
blockLength :: Hash ctx d => Tagged * d BitLength
initialCtx :: Hash ctx d => ctx
updateCtx :: Hash ctx d => ctx -> ByteString -> ctx
finalize :: Hash ctx d => ctx -> ByteString -> d
hash :: Hash ctx d => ByteString -> d
hash' :: Hash ctx d => ByteString -> d
instance Ord MD5Partial
instance Eq MD5Partial
instance Eq MD5Digest
instance Ord MD5Digest
instance Hash MD5Context MD5Digest
instance Serialize MD5Partial
instance Serialize MD5Context
instance Serialize MD5Digest
instance Binary MD5Partial
instance Binary MD5Context
instance Binary MD5Digest
instance Show MD5Partial
instance Show MD5Digest
