| License | BSD-style | 
|---|---|
| Maintainer | Herbert Valerio Riedel <hvr@gnu.org> | 
| Stability | stable | 
| Portability | unknown | 
| Safe Haskell | None | 
| Language | Haskell2010 | 
Crypto.Hash.SHA256
Description
A module containing SHA-256 bindings
- newtype Ctx = Ctx ByteString
- init :: Ctx
- update :: Ctx -> ByteString -> Ctx
- updates :: Ctx -> [ByteString] -> Ctx
- finalize :: Ctx -> ByteString
- hash :: ByteString -> ByteString
- hashlazy :: ByteString -> ByteString
- hmac :: ByteString -> ByteString -> ByteString
- hmaclazy :: ByteString -> ByteString -> ByteString
Incremental API
This API is based on 4 different functions, similar to the lowlevel operations of a typical hash:
- init: create a new hash context
- update: update non-destructively a new hash context with a strict bytestring
- updates: same as update, except that it takes a list of strict bytestrings
- finalize: finalize the context and returns a digest bytestring.
all those operations are completely pure, and instead of changing the context as usual in others language, it re-allocates a new context each time.
Example:
import qualified Data.ByteString
import qualified Crypto.Hash.SHA256 as SHA256
main = print digest
  where
    digest = SHA256.finalize ctx
    ctx    = foldl SHA256.update ctx0 (map Data.ByteString.pack [ [1,2,3], [4,5,6] ])
    ctx0   = SHA256.initSHA-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 Word64representing the number of bytes already feed to hash algorithm so far,
- a 64-element Word8buffer holding partial input-chunks, and finally
- a 8-element Word32array holding the current work-in-progress digest-value.
Consequently, a SHA-256 digest as produced by hash, hashlazy, or finalize is 32 bytes long.
Constructors
| Ctx ByteString | 
update :: Ctx -> ByteString -> Ctx #
update a context with a bytestring
updates :: Ctx -> [ByteString] -> Ctx #
updates a context with multiple bytestrings
finalize :: Ctx -> ByteString #
finalize the context into a digest bytestring (32 bytes)
Single Pass API
This API use the incremental API under the hood to provide
 the common all-in-one operations to create digests out of a
 ByteString and lazy ByteString.
- hash: create a digest (- init+- update+- finalize) from a strict- ByteString
- hashlazy: create a digest (- init+- update+- finalize) from a lazy- ByteString
Example:
import qualified Data.ByteString import qualified Crypto.Hash.SHA256 as SHA256 main = print $ SHA256.hash (Data.ByteString.pack [0..255])
NOTE: The returned digest is a binary ByteString. For
 converting to a base16/hex encoded digest the
 base16-bytestring
 package is recommended.
hash :: ByteString -> ByteString #
hash a strict bytestring into a digest bytestring (32 bytes)
hashlazy :: ByteString -> ByteString #
hash a lazy bytestring into a digest bytestring (32 bytes)
HMAC-SHA-256
Arguments
| :: ByteString | secret | 
| -> ByteString | message | 
| -> ByteString | 
Compute 32-byte RFC2104-compatible HMAC-SHA1 digest for a strict bytestring message
Since: 0.11.100.0
Arguments
| :: ByteString | secret | 
| -> ByteString | message | 
| -> ByteString | 
Compute 32-byte RFC2104-compatible HMAC-SHA1 digest for a lazy bytestring message
Since: 0.11.100.0