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

-- | Fast, pure and practical SHA-256 implementation
--   
--   A practical incremental and one-pass, pure API to the SHA-256
--   cryptographic hash algorithm according to FIPS 180-4 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 sha256sum(1) tool; for instance, on
--   an Intel Core i7-3770 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 SHA package.)
--   
--   Additionally, this package provides support for
--   
--   
--   
- HMAC-SHA-256: SHA-256-based Hashed Message Authentication
--   Codes (HMAC)
--   
- HKDF-SHA-256: HMAC-SHA-256-based Key Derivation Function
--   (HKDF)
--   
--   
--   conforming to RFC6234, RFC4231, RFC5869, et al..
--   
--   
Relationship to the cryptohash package and its API
--   
--   This package has been originally a fork of cryptohash-0.11.7
--   because the cryptohash 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 base and bytestring. The API
--   exposed by cryptohash-sha256-0.11.*'s
--   Crypto.Hash.SHA256 module is guaranteed to remain a compatible
--   superset of the API provided by the cryptohash-0.11.7's
--   module of the same name.
--   
--   Consequently, this package is designed to be used as a drop-in
--   replacement for cryptohash-0.11.7's Crypto.Hash.SHA256
--   module, though with a clearly smaller footprint by almost 3 orders
--   of magnitude.
@package cryptohash-sha256
@version 0.11.102.1

-- | A module containing SHA-256 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
--   
--   
--   
- a Word64 representing the number of bytes already feed to
--   hash algorithm so far,
--   
- a 64-element Word8 buffer holding partial input-chunks, and
--   finally
--   
- a 8-element Word32 array holding the current
--   work-in-progress digest-value.
--   
--   
--   Consequently, a SHA-256 digest as produced by hash,
--   hashlazy, or finalize 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 finalize 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 hashlazy which simultaneously computes the hash and
--   length of a lazy bytestring.
hashlazyAndLength :: ByteString -> (ByteString, Word64)

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

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

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

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