License | BSD-style |
---|---|
Maintainer | Vincent Hanquez <vincent@snarc.org> |
Stability | experimental |
Portability | unknown |
Safe Haskell | None |
Language | Haskell2010 |
Generalized impure cryptographic hash interface
Synopsis
- class HashAlgorithm a where
- type HashBlockSize a :: Nat
- type HashDigestSize a :: Nat
- type HashInternalContextSize a :: Nat
- hashBlockSize :: a -> Int
- hashDigestSize :: a -> Int
- hashInternalContextSize :: a -> Int
- hashInternalInit :: Ptr (Context a) -> IO ()
- hashInternalUpdate :: Ptr (Context a) -> Ptr Word8 -> Word32 -> IO ()
- hashInternalFinalize :: Ptr (Context a) -> Ptr (Digest a) -> IO ()
- data MutableContext a
- hashMutableInit :: HashAlgorithm alg => IO (MutableContext alg)
- hashMutableInitWith :: HashAlgorithm alg => alg -> IO (MutableContext alg)
- hashMutableUpdate :: (ByteArrayAccess ba, HashAlgorithm a) => MutableContext a -> ba -> IO ()
- hashMutableFinalize :: forall a. HashAlgorithm a => MutableContext a -> IO (Digest a)
- hashMutableReset :: HashAlgorithm a => MutableContext a -> IO ()
Documentation
class HashAlgorithm a where #
Class representing hashing algorithms.
The interface presented here is update in place and lowlevel. the Hash module takes care of hidding the mutable interface properly.
type HashBlockSize a :: Nat #
Associated type for the block size of the hash algorithm
type HashDigestSize a :: Nat #
Associated type for the digest size of the hash algorithm
type HashInternalContextSize a :: Nat #
Associated type for the internal context size of the hash algorithm
hashBlockSize :: a -> Int #
Get the block size of a hash algorithm
hashDigestSize :: a -> Int #
Get the digest size of a hash algorithm
hashInternalContextSize :: a -> Int #
Get the size of the context used for a hash algorithm
hashInternalInit :: Ptr (Context a) -> IO () #
Initialize a context pointer to the initial state of a hash algorithm
hashInternalUpdate :: Ptr (Context a) -> Ptr Word8 -> Word32 -> IO () #
Update the context with some raw data
hashInternalFinalize :: Ptr (Context a) -> Ptr (Digest a) -> IO () #
Finalize the context and set the digest raw memory to the right value
Instances
data MutableContext a #
A Mutable hash context
This type is an instance of ByteArrayAccess
for debugging purpose.
Internal layout is architecture dependent, may contain uninitialized data
fragments, and change in future versions. The bytearray should not be used
as input to cryptographic algorithms.
Instances
ByteArrayAccess (MutableContext a) # | |
Defined in Crypto.Hash.IO length :: MutableContext a -> Int # withByteArray :: MutableContext a -> (Ptr p -> IO a0) -> IO a0 # copyByteArrayToPtr :: MutableContext a -> Ptr p -> IO () # |
hashMutableInit :: HashAlgorithm alg => IO (MutableContext alg) #
Create a new mutable hash context.
the algorithm used is automatically determined from the return constraint.
hashMutableInitWith :: HashAlgorithm alg => alg -> IO (MutableContext alg) #
Create a new mutable hash context.
The algorithm is explicitely passed as parameter
hashMutableUpdate :: (ByteArrayAccess ba, HashAlgorithm a) => MutableContext a -> ba -> IO () #
Update a mutable hash context in place
hashMutableFinalize :: forall a. HashAlgorithm a => MutableContext a -> IO (Digest a) #
Finalize a mutable hash context and compute a digest
hashMutableReset :: HashAlgorithm a => MutableContext a -> IO () #
Reset the mutable context to the initial state of the hash