1-- | 2-- Module : Crypto.Hash.MD5 3-- License : BSD-style 4-- Maintainer : Vincent Hanquez <vincent@snarc.org> 5-- Stability : experimental 6-- Portability : unknown 7-- 8-- Module containing the binding functions to work with the 9-- MD5 cryptographic hash. 10-- 11{-# LANGUAGE ForeignFunctionInterface #-} 12{-# LANGUAGE DeriveDataTypeable #-} 13{-# LANGUAGE DataKinds #-} 14{-# LANGUAGE TypeFamilies #-} 15module Crypto.Hash.MD5 ( MD5 (..) ) where 16 17import Crypto.Hash.Types 18import Foreign.Ptr (Ptr) 19import Data.Data 20import Data.Word (Word8, Word32) 21 22-- | MD5 cryptographic hash algorithm 23data MD5 = MD5 24 deriving (Show,Data) 25 26instance HashAlgorithm MD5 where 27 type HashBlockSize MD5 = 64 28 type HashDigestSize MD5 = 16 29 type HashInternalContextSize MD5 = 96 30 hashBlockSize _ = 64 31 hashDigestSize _ = 16 32 hashInternalContextSize _ = 96 33 hashInternalInit = c_md5_init 34 hashInternalUpdate = c_md5_update 35 hashInternalFinalize = c_md5_finalize 36 37instance HashAlgorithmPrefix MD5 where 38 hashInternalFinalizePrefix = c_md5_finalize_prefix 39 40foreign import ccall unsafe "cryptonite_md5_init" 41 c_md5_init :: Ptr (Context a)-> IO () 42 43foreign import ccall "cryptonite_md5_update" 44 c_md5_update :: Ptr (Context a) -> Ptr Word8 -> Word32 -> IO () 45 46foreign import ccall unsafe "cryptonite_md5_finalize" 47 c_md5_finalize :: Ptr (Context a) -> Ptr (Digest a) -> IO () 48 49foreign import ccall "cryptonite_md5_finalize_prefix" 50 c_md5_finalize_prefix :: Ptr (Context a) -> Ptr Word8 -> Word32 -> Word32 -> Ptr (Digest a) -> IO () 51