License | BSD-style |
---|---|
Maintainer | Herbert Valerio Riedel <hvr@gnu.org> |
Stability | stable |
Portability | unknown |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
A module containing SHA-512/t bindings
Since: 0.11.102.0
Synopsis
- data Ctx = Ctx !Int !Ctx
- init :: Int -> Ctx
- update :: Ctx -> ByteString -> Ctx
- updates :: Ctx -> [ByteString] -> Ctx
- finalize :: Ctx -> ByteString
- finalizeAndLength :: Ctx -> (ByteString, Word64)
- start :: Int -> ByteString -> Ctx
- startlazy :: Int -> ByteString -> Ctx
- hash :: Int -> ByteString -> ByteString
- hashlazy :: Int -> ByteString -> ByteString
- hashlazyAndLength :: Int -> ByteString -> (ByteString, Word64)
- hmac :: Int -> ByteString -> ByteString -> ByteString
- hmaclazy :: Int -> ByteString -> ByteString -> ByteString
- hmaclazyAndLength :: Int -> ByteString -> ByteString -> (ByteString, Word64)
Incremental API
This API is based on 4 different functions, similar to the lowlevel operations of a typical hash:
init
: create a new hash contextupdate
: update non-destructively a new hash context with a strict bytestringupdates
: same as update, except that it takes a list of strict bytestringsfinalize
: 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.SHA512t as SHA512t main = print digest where digest = SHA512t.finalize ctx ctx = foldl SHA512t.update ctx0 (map Data.ByteString.pack [ [1,2,3], [4,5,6] ]) ctx0 = SHA512t.init 224
SHA-512/t Context
This extends the non-truncated SHA-512 Context (see Ctx
)
with the value of the t parameter which must be within the
range [1..511]
excluding the value 384
as per FIPS-180-4
section 5.3.6.
finalize :: Ctx -> ByteString Source #
finalize the context into a digest bytestring (t bits)
finalizeAndLength :: Ctx -> (ByteString, Word64) Source #
Variant of finalize
also returning length of hashed content
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 strictByteString
hashlazy
: create a digest (init
+update
+finalize
) from a lazyByteString
Example:
import qualified Data.ByteString import qualified Crypto.Hash.SHA512t as SHA512t main = print $ SHA512t.hash 224 (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 :: Int -> ByteString -> ByteString Source #
hash a strict bytestring into a digest bytestring (t bits)
hashlazy :: Int -> ByteString -> ByteString Source #
hash a lazy bytestring into a digest bytestring (t bits)
hashlazyAndLength :: Int -> ByteString -> (ByteString, Word64) Source #
Variant of hashlazy
which simultaneously computes the hash and length of a lazy bytestring.
HMAC-SHA-512/t
:: Int | digest length t in bits |
-> ByteString | secret |
-> ByteString | message |
-> ByteString |
Compute t-bit RFC2104-compatible HMAC-SHA-512/t digest for a strict bytestring message
:: Int | digest length t in bits |
-> ByteString | secret |
-> ByteString | message |
-> ByteString |
Compute4 t-bit RFC2104-compatible HMAC-SHA-512/t digest for a lazy bytestring message
:: Int | digest length t in bits |
-> ByteString | secret |
-> ByteString | message |
-> (ByteString, Word64) | digest (t bits) and length of message |
Variant of hmaclazy
which also returns length of message