packages feed

HaskellTorrent-0.0: src/Digest.hs

-- | Simple abstraction for message digests
module Digest
  ( Digest
  , digest
  )
where

import Control.Concurrent
import Control.Monad

import Data.Maybe

import qualified Data.ByteString.Lazy as L
import OpenSSL
import qualified OpenSSL.EVP.Digest as D

-- Consider newtyping this
type Digest = String

sha1Digest :: IO D.Digest
sha1Digest = do dig <- D.getDigestByName "SHA1"
		case dig of
		    Nothing -> fail "No such digest, SHA1"
		    Just d -> return d

digest :: L.ByteString -> IO Digest
digest bs =
  runInBoundThread $ -- I don't think this is needed strictly
    withOpenSSL $
	do sha1 <- sha1Digest
	   return $ D.digestLBS sha1 bs