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


-- | Fast, pure and practical SHA-512 implementation
--   
--   A practical incremental and one-pass, pure API to the <a>SHA-512
--   cryptographic hash algorithm</a> according to <a>FIPS 180-4</a> with
--   performance close to the fastest implementations available in other
--   languages.
--   
--   The core SHA-512 algorithm is implemented in C and is thus expected to
--   be as fast as the standard <a>sha512sum(1) tool</a>. (If, instead, you
--   require a pure Haskell implementation and performance is secondary,
--   please refer to the <a>SHA package</a>.)
--   
--   Additionally, this package provides support for
--   
--   <ul>
--   <li>HMAC-SHA-512: SHA-512-based <a>Hashed Message Authentication
--   Codes</a> (HMAC)</li>
--   </ul>
--   
--   conforming to <a>RFC6234</a>, <a>RFC4231</a>, <a>RFC5869</a>, et al..
--   
--   <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 SHA-512 hash algorithm without any dependencies on
--   packages other than <tt>base</tt> and <tt>bytestring</tt>. The API
--   exposed by <tt>cryptohash-sha512-0.11.*</tt>'s
--   <a>Crypto.Hash.SHA512</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.SHA512</a>
--   module, though with a <a>clearly smaller footprint by almost 3 orders
--   of magnitude</a>.
@package cryptohash-sha512
@version 0.11.100.1


-- | A module containing <a>SHA-512</a> bindings
module Crypto.Hash.SHA512

-- | SHA-512 Context
--   
--   The context data is exactly 208 bytes long, however the data in the
--   context is stored in host-endianness.
--   
--   The context data is made up of
--   
--   <ul>
--   <li>Two <a>Word64</a>s representing the number of bytes already feed
--   to hash algorithm so far (lower word first),</li>
--   <li>a 128-element <a>Word8</a> buffer holding partial input-chunks,
--   and finally</li>
--   <li>a 8-element <a>Word64</a> array holding the current
--   work-in-progress digest-value.</li>
--   </ul>
--   
--   Consequently, a SHA-512 digest as produced by <a>hash</a>,
--   <a>hashlazy</a>, or <a>finalize</a> is 64 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 (64 bytes)
finalize :: Ctx -> ByteString

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

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

-- | Compute 64-byte <a>RFC2104</a>-compatible HMAC-SHA-512 digest for a
--   strict bytestring message
hmac :: ByteString -> ByteString -> ByteString

-- | Compute 64-byte <a>RFC2104</a>-compatible HMAC-SHA-512 digest for a
--   lazy bytestring message
hmaclazy :: ByteString -> ByteString -> ByteString
