{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE EmptyDataDecls #-}
module OpenSSL.EVP.Digest.Digest where
import OpenSSL.EVP.Digest.Algorithm
import OpenSSL.EVP.Digest.Context
import OpenSSL.EVP.Digest.Error ( throwIfZero )
import Foreign
import Foreign.C
initDigest :: Algorithm -> Context -> IO ()
initDigest :: Algorithm -> Context -> IO ()
initDigest Algorithm
algo Context
ctx =
String -> IO CInt -> IO ()
throwIfZero String
"OpenSSL.EVP.Digest.initDigest" (Context -> Algorithm -> Ptr OpaqueEngine -> IO CInt
_initDigest Context
ctx Algorithm
algo forall a. Ptr a
nullPtr)
updateDigest :: Context -> Ptr a -> CSize -> IO ()
updateDigest :: forall a. Context -> Ptr a -> CSize -> IO ()
updateDigest Context
ctx Ptr a
ptr CSize
len =
String -> IO CInt -> IO ()
throwIfZero String
"OpenSSL.EVP.Digest.updateDigest" (forall a. Context -> Ptr a -> CSize -> IO CInt
_updateDigest Context
ctx Ptr a
ptr CSize
len)
finalizeDigest :: Context -> Ptr Word8 -> IO ()
finalizeDigest :: Context -> Ptr Word8 -> IO ()
finalizeDigest Context
ctx Ptr Word8
ptr =
String -> IO CInt -> IO ()
throwIfZero String
"OpenSSL.EVP.Digest.finalizeDigest" (Context -> Ptr Word8 -> Ptr CUInt -> IO CInt
_finalizeDigest Context
ctx Ptr Word8
ptr forall a. Ptr a
nullPtr)
data OpaqueEngine
foreign import ccall unsafe "openssl/evp.h EVP_DigestInit_ex"
_initDigest :: Context -> Algorithm -> Ptr OpaqueEngine -> IO CInt
foreign import ccall unsafe "openssl/evp.h EVP_DigestUpdate"
_updateDigest :: Context -> Ptr a -> CSize -> IO CInt
foreign import ccall unsafe "openssl/evp.h EVP_DigestFinal_ex"
_finalizeDigest :: Context -> Ptr Word8 -> Ptr CUInt -> IO CInt