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


-- | A practical incremental and one-pass, pure API to the <a>SHA-256
--   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-256 algorithm is implemented in C and is thus expected to
--   be as fast as the standard <a>sha256sum(1) tool</a>; for instance, on
--   an <i>Intel Core i7-3770</i> at 3.40GHz this implementation can
--   compute a SHA-256 hash over 230 MiB of data in under one second. (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-256: SHA-256-based <a>Hashed Message Authentication
--   Codes</a> (HMAC)</li>
--   <li>HKDF-SHA-256: <a>HMAC-SHA-256-based Key Derivation Function</a>
--   (HKDF)</li>
--   </ul>
--   
--   conforming to <a>RFC6234</a>, <a>RFC4231</a>, <a>RFC5869</a>, et al..
--   
--   <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-256 hash algorithm without any dependencies on
--   packages other than <tt>base</tt> and <tt>bytestring</tt>. The API
--   exposed by <tt>cryptohash-sha256-0.11.*</tt>'s
--   <a>Crypto.Hash.SHA256</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.SHA256</a>
--   module, though with a <a>clearly smaller footprint by almost 3 orders
--   of magnitude</a>.
@package cryptohash-sha256
@version 0.11.102.1


-- | A module containing <a>SHA-256</a> bindings
module Crypto.Hash.SHA256

-- | SHA-256 Context
--   
--   The context data is exactly 104 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 8-element <a>Word32</a> array holding the current
--   work-in-progress digest-value.</li>
--   </ul>
--   
--   Consequently, a SHA-256 digest as produced by <tt>hash</tt>,
--   <tt>hashlazy</tt>, or <tt>finalize</tt> is 32 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 (32 bytes)
finalize :: Ctx -> ByteString

-- | Variant of <a>finalize</a> also returning length of hashed content
finalizeAndLength :: Ctx -> (ByteString, Word64)

-- | hash a strict bytestring into a Ctx
start :: ByteString -> Ctx

-- | hash a lazy bytestring into a Ctx
startlazy :: ByteString -> Ctx

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

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

-- | Variant of <a>hashlazy</a> which simultaneously computes the hash and
--   length of a lazy bytestring.
hashlazyAndLength :: ByteString -> (ByteString, Word64)

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

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

-- | Variant of <a>hmaclazy</a> which also returns length of message
hmaclazyAndLength :: ByteString -> ByteString -> (ByteString, Word64)

-- | <a>RFC6234</a>-compatible HKDF-SHA-256 key derivation function.
hkdf :: ByteString -> ByteString -> ByteString -> Int -> ByteString
