HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Modulehopenssl-2.2.5Haskell2010

OpenSSL.EVP.Digest

Low-level bindings to OpenSSL's EVP interface. Most users do not need this code. Check out OpenSSL.Digest for a more comfortable interface.

  • 3 types
  • 11 values
  • Packagehopenssl-2.2.5
  • Exports14
  • LanguageHaskell2010
  • LicenceBSD-3-Clause
  • SourceDigest.hs

Digest Algorithms

7 declarations
newtypenewtype Algorithm
#

An opaque handle into OpenSSL's collection of message digest algorithms. Use digestByName to look up any of the available algorithms by name. For the sake of convenience, Algorithm is an instance of IsString so that the compiler can transparently map String literals to algorithms via fromString if the XOverloadedStrings extension is enabled.

Example1 expression
fromString "sha256" == digestByName "sha256"True
Instances3Eq, Show, IsString
  • Eq AlgorithmDefined in hopenssl-2.2.5 · OpenSSL.EVP.Digest.Algorithm
  • Show AlgorithmDefined in hopenssl-2.2.5 · OpenSSL.EVP.Digest.Algorithm
  • IsString AlgorithmDefined in hopenssl-2.2.5 · OpenSSL.EVP.Digest.Algorithm

Look up a digest algorithm engine by name. Algorithms usually offered by OpenSSL are "md2", "md5", "sha1", "mdc2", "ripemd160", "blake2b512", "blake2s256", "sha224", "sha256", "sha384", and "sha512", but the exact set may vary between platforms. Throws UnknownAlgorithm if the requested algorithm is not known.

Variant of digestByName that signals failure by evaluating to Nothing rather than failing.

Example2 expressions
digestByName' "sha256" == Just (digestByName "sha256")TruedigestByName' "Guess what?" :: Maybe AlgorithmNothing
valuedigestSize :: Algorithm -> Int
#

Return the size of the digest in bytes that the given algorithm will produce.

Example1 expression
digestSize (digestByName "sha256")32
valuemaxDigestSize :: Int
#

The largest possible digest size of any of the algorithms supported by this library will generate. So if you want to store a digest without bothering to retrieve the appropriate size with digestSize first, allocate a buffer of that size.

Return the block size the the given algorithm operates with.

Example1 expression
digestBlockSize (digestByName "sha256")64
newtypenewtype UnknownAlgorithm
#

A custom exception type which is thrown by digestByName in case the requested digest algorithm is not available in the OpenSSL system library.

Instances2Show, Exception

Digest Contexts

4 declarations
newtypenewtype Context
#

A context for digest computations. Use newContext and freeContext to allocate/deallocate this type.

Instances2Eq, Show
  • Eq ContextDefined in hopenssl-2.2.5 · OpenSSL.EVP.Digest.Context
  • Show ContextDefined in hopenssl-2.2.5 · OpenSSL.EVP.Digest.Context
valueresetDigest :: Context -> IO ()
#

Free all resources associated with this Context, but don't destroy the context itself so that it can be re-used for a new digest computation.

Digest Computations

3 declarations
valueinitDigest :: Algorithm -> Context -> IO ()
#

Configure the given digest context to use the given message digest algorithm. Throws an exception to signal failure, i.e. because the system is out of memory.

valueupdateDigest :: Context -> Ptr a -> CSize -> IO ()
#

Hash the given block of memory and update the digest state accordingly. This function can be called many times. Then use finalizeDigest to retrieve the actual hash value.

valuefinalizeDigest :: Context -> Ptr Word8 -> IO ()
#

Finalize the digest calculation and return the result in the Word8 array passed as an argument. Naturally, that array is expected to be large enough to contain the digest. digestSize or maxDigestSize are your friends. This function does not clean up the digest context; this has to be done with an explicit call to freeContext (or resetContext, if you want to re-use it). However, it does invalidate the digest state so that no further calls of digestUpdate can be made without re-initializing the context first.