Maintainer | simons@cryp.to |
---|---|

Stability | provisional |

Portability | portable |

Safe Haskell | None |

Language | Haskell2010 |

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

## Synopsis

- newtype Algorithm = Algorithm (Ptr ())
- digestByName :: String -> Algorithm
- digestByName' :: String -> Maybe Algorithm
- digestSize :: Algorithm -> Int
- maxDigestSize :: Int
- digestBlockSize :: Algorithm -> Int
- _digestByName :: CString -> Algorithm
- _digestSize :: Algorithm -> CInt
- _digestBlockSize :: Algorithm -> CInt

# Documentation

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.

`>>>`

True`fromString "sha256" == digestByName "sha256"`

digestByName :: String -> Algorithm Source #

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.

digestByName' :: String -> Maybe Algorithm Source #

Variant of `digestByName`

that signals failure by evaluating to `Nothing`

rather than failing.

`>>>`

True`digestByName' "sha256" == Just (digestByName "sha256")`

`>>>`

Nothing`digestByName' "Guess what?" :: Maybe Algorithm`

digestSize :: Algorithm -> Int Source #

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

`>>>`

32`digestSize (digestByName "sha256")`

maxDigestSize :: Int Source #

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.

digestBlockSize :: Algorithm -> Int Source #

Return the block size the the given algorithm operates with.

`>>>`

64`digestBlockSize (digestByName "sha256")`

_digestByName :: CString -> Algorithm Source #

_digestSize :: Algorithm -> CInt Source #

_digestBlockSize :: Algorithm -> CInt Source #