torrent-2007.6.24: src/Data/Torrent/SHA1.hs
-----------------------------------------------------------------------------
-- |
-- Module : Data.Torrent.SHA1
-- Copyright : (c) Lemmih 2005
-- License : BSD-like
--
-- Maintainer : lemmih@gmail.com
-- Stability : experimental
-- Portability : portable
--
-----------------------------------------------------------------------------
module Data.Torrent.SHA1 (sha1) where
import Foreign
import Foreign.C
import System.IO.Unsafe
import qualified Data.ByteString as BS
import qualified Data.ByteString.Base as BS
import Data.ByteString (ByteString)
--void SHA1(sha1_byte *data, unsigned int len, sha1_byte digest[SHA1_DIGEST_LENGTH]);
foreign import ccall safe "SHA1" c_sha1 :: CString -> Int -> CString -> IO ()
sha1 :: ByteString -> ByteString
sha1 fs = unsafePerformIO $
BS.unsafeUseAsCString fs $ \cstr ->
do ret <- mallocBytes 20
c_sha1 cstr (BS.length fs) ret
fp <- newForeignPtr finalizerFree (castPtr ret)
return (BS.fromForeignPtr fp 20)