hashing-0.1.0.0: src/Crypto/Hash/ADT.hs
module Crypto.Hash.ADT (
Context(..)
, HashAlgorithm(..)
, Digest (..)
) where
import Data.ByteString (ByteString)
import Data.Int
data Context a = Context {
ctxTotalBytesRead :: {-# UNPACK #-} !Int64
, ctxBufferRead :: {-# UNPACK #-} !Int
, ctxBuffer :: {-# UNPACK #-} !ByteString
, ctxHashValueAcc :: !a
} deriving Show
instance Functor Context where
fmap f (Context t r b v) = Context t r b (f v)
newtype Digest a = Digest String deriving Show
-- | Hash algorithm interface
--
-- provides classic init\/update\/final API. however,
-- user should call higher level API such as hash or hashLazy.
class HashAlgorithm a where
hashBlockSize :: a -> Int
hashDigestSize :: a -> Int
hashInit :: Context a
hashUpdate :: Context a -> ByteString -> Context a
hashFinal :: Context a -> a