{-# LANGUAGE CPP #-}
{-# LANGUAGE ForeignFunctionInterface #-}
module OpenSSL.EVP.Digest.Initialization ( initializeEVPDigests ) where
import Control.Concurrent.MVar
import Control.Monad
import System.IO.Unsafe as IO
#include "openssl/opensslv.h"
initializeEVPDigests :: IO ()
initializeEVPDigests =
#if OPENSSL_VERSION_NUMBER >= 0x1010000f
return ()
#else
modifyMVar_ isDigestEngineInitialized $ \isInitialized ->
unless isInitialized _addAllDigests >> return True
{-# NOINLINE isDigestEngineInitialized #-}
isDigestEngineInitialized :: MVar Bool
isDigestEngineInitialized = IO.unsafePerformIO $ newMVar False
foreign import ccall unsafe "openssl/evp.h OpenSSL_add_all_digests" _addAllDigests :: IO ()
#endif