cryptonite-0.29: Cryptography Primitives sink
LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilityexperimental
Portabilityunknown
Safe HaskellNone
LanguageHaskell2010

Crypto.Hash.IO

Description

Generalized impure cryptographic hash interface

Synopsis

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.

Associated Types

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

Methods

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

Instances details
HashAlgorithm Whirlpool # 
Instance details

Defined in Crypto.Hash.Whirlpool

HashAlgorithm Tiger # 
Instance details

Defined in Crypto.Hash.Tiger

HashAlgorithm Skein512_512 # 
Instance details

Defined in Crypto.Hash.Skein512

HashAlgorithm Skein512_384 # 
Instance details

Defined in Crypto.Hash.Skein512

HashAlgorithm Skein512_256 # 
Instance details

Defined in Crypto.Hash.Skein512

HashAlgorithm Skein512_224 # 
Instance details

Defined in Crypto.Hash.Skein512

HashAlgorithm Skein256_256 # 
Instance details

Defined in Crypto.Hash.Skein256

HashAlgorithm Skein256_224 # 
Instance details

Defined in Crypto.Hash.Skein256

HashAlgorithm SHA512t_256 # 
Instance details

Defined in Crypto.Hash.SHA512t

HashAlgorithm SHA512t_224 # 
Instance details

Defined in Crypto.Hash.SHA512t

HashAlgorithm SHA512 # 
Instance details

Defined in Crypto.Hash.SHA512

HashAlgorithm SHA384 # 
Instance details

Defined in Crypto.Hash.SHA384

HashAlgorithm SHA3_512 # 
Instance details

Defined in Crypto.Hash.SHA3

HashAlgorithm SHA3_384 # 
Instance details

Defined in Crypto.Hash.SHA3

HashAlgorithm SHA3_256 # 
Instance details

Defined in Crypto.Hash.SHA3

HashAlgorithm SHA3_224 # 
Instance details

Defined in Crypto.Hash.SHA3

HashAlgorithm SHA256 # 
Instance details

Defined in Crypto.Hash.SHA256

HashAlgorithm SHA224 # 
Instance details

Defined in Crypto.Hash.SHA224

HashAlgorithm SHA1 # 
Instance details

Defined in Crypto.Hash.SHA1

HashAlgorithm RIPEMD160 # 
Instance details

Defined in Crypto.Hash.RIPEMD160

HashAlgorithm MD5 # 
Instance details

Defined in Crypto.Hash.MD5

Associated Types

type HashBlockSize MD5 :: Nat #

type HashDigestSize MD5 :: Nat #

type HashInternalContextSize MD5 :: Nat #

HashAlgorithm MD4 # 
Instance details

Defined in Crypto.Hash.MD4

Associated Types

type HashBlockSize MD4 :: Nat #

type HashDigestSize MD4 :: Nat #

type HashInternalContextSize MD4 :: Nat #

HashAlgorithm MD2 # 
Instance details

Defined in Crypto.Hash.MD2

Associated Types

type HashBlockSize MD2 :: Nat #

type HashDigestSize MD2 :: Nat #

type HashInternalContextSize MD2 :: Nat #

HashAlgorithm Keccak_512 # 
Instance details

Defined in Crypto.Hash.Keccak

HashAlgorithm Keccak_384 # 
Instance details

Defined in Crypto.Hash.Keccak

HashAlgorithm Keccak_256 # 
Instance details

Defined in Crypto.Hash.Keccak

HashAlgorithm Keccak_224 # 
Instance details

Defined in Crypto.Hash.Keccak

HashAlgorithm Blake2sp_256 # 
Instance details

Defined in Crypto.Hash.Blake2sp

HashAlgorithm Blake2sp_224 # 
Instance details

Defined in Crypto.Hash.Blake2sp

HashAlgorithm Blake2s_256 # 
Instance details

Defined in Crypto.Hash.Blake2s

HashAlgorithm Blake2s_224 # 
Instance details

Defined in Crypto.Hash.Blake2s

HashAlgorithm Blake2s_160 # 
Instance details

Defined in Crypto.Hash.Blake2s

HashAlgorithm Blake2bp_512 # 
Instance details

Defined in Crypto.Hash.Blake2bp

HashAlgorithm Blake2b_512 # 
Instance details

Defined in Crypto.Hash.Blake2b

HashAlgorithm Blake2b_384 # 
Instance details

Defined in Crypto.Hash.Blake2b

HashAlgorithm Blake2b_256 # 
Instance details

Defined in Crypto.Hash.Blake2b

HashAlgorithm Blake2b_224 # 
Instance details

Defined in Crypto.Hash.Blake2b

HashAlgorithm Blake2b_160 # 
Instance details

Defined in Crypto.Hash.Blake2b

KnownNat bitlen => HashAlgorithm (SHAKE256 bitlen) # 
Instance details

Defined in Crypto.Hash.SHAKE

Associated Types

type HashBlockSize (SHAKE256 bitlen) :: Nat #

type HashDigestSize (SHAKE256 bitlen) :: Nat #

type HashInternalContextSize (SHAKE256 bitlen) :: Nat #

Methods

hashBlockSize :: SHAKE256 bitlen -> Int #

hashDigestSize :: SHAKE256 bitlen -> Int #

hashInternalContextSize :: SHAKE256 bitlen -> Int #

hashInternalInit :: Ptr (Context (SHAKE256 bitlen)) -> IO () #

hashInternalUpdate :: Ptr (Context (SHAKE256 bitlen)) -> Ptr Word8 -> Word32 -> IO () #

hashInternalFinalize :: Ptr (Context (SHAKE256 bitlen)) -> Ptr (Digest (SHAKE256 bitlen)) -> IO () #

KnownNat bitlen => HashAlgorithm (SHAKE128 bitlen) # 
Instance details

Defined in Crypto.Hash.SHAKE

Associated Types

type HashBlockSize (SHAKE128 bitlen) :: Nat #

type HashDigestSize (SHAKE128 bitlen) :: Nat #

type HashInternalContextSize (SHAKE128 bitlen) :: Nat #

Methods

hashBlockSize :: SHAKE128 bitlen -> Int #

hashDigestSize :: SHAKE128 bitlen -> Int #

hashInternalContextSize :: SHAKE128 bitlen -> Int #

hashInternalInit :: Ptr (Context (SHAKE128 bitlen)) -> IO () #

hashInternalUpdate :: Ptr (Context (SHAKE128 bitlen)) -> Ptr Word8 -> Word32 -> IO () #

hashInternalFinalize :: Ptr (Context (SHAKE128 bitlen)) -> Ptr (Digest (SHAKE128 bitlen)) -> IO () #

(IsDivisibleBy8 bitlen, KnownNat bitlen, IsAtLeast bitlen 8, IsAtMost bitlen 512) => HashAlgorithm (Blake2bp bitlen) # 
Instance details

Defined in Crypto.Hash.Blake2

Associated Types

type HashBlockSize (Blake2bp bitlen) :: Nat #

type HashDigestSize (Blake2bp bitlen) :: Nat #

type HashInternalContextSize (Blake2bp bitlen) :: Nat #

Methods

hashBlockSize :: Blake2bp bitlen -> Int #

hashDigestSize :: Blake2bp bitlen -> Int #

hashInternalContextSize :: Blake2bp bitlen -> Int #

hashInternalInit :: Ptr (Context (Blake2bp bitlen)) -> IO () #

hashInternalUpdate :: Ptr (Context (Blake2bp bitlen)) -> Ptr Word8 -> Word32 -> IO () #

hashInternalFinalize :: Ptr (Context (Blake2bp bitlen)) -> Ptr (Digest (Blake2bp bitlen)) -> IO () #

(IsDivisibleBy8 bitlen, KnownNat bitlen, IsAtLeast bitlen 8, IsAtMost bitlen 256) => HashAlgorithm (Blake2sp bitlen) # 
Instance details

Defined in Crypto.Hash.Blake2

Associated Types

type HashBlockSize (Blake2sp bitlen) :: Nat #

type HashDigestSize (Blake2sp bitlen) :: Nat #

type HashInternalContextSize (Blake2sp bitlen) :: Nat #

Methods

hashBlockSize :: Blake2sp bitlen -> Int #

hashDigestSize :: Blake2sp bitlen -> Int #

hashInternalContextSize :: Blake2sp bitlen -> Int #

hashInternalInit :: Ptr (Context (Blake2sp bitlen)) -> IO () #

hashInternalUpdate :: Ptr (Context (Blake2sp bitlen)) -> Ptr Word8 -> Word32 -> IO () #

hashInternalFinalize :: Ptr (Context (Blake2sp bitlen)) -> Ptr (Digest (Blake2sp bitlen)) -> IO () #

(IsDivisibleBy8 bitlen, KnownNat bitlen, IsAtLeast bitlen 8, IsAtMost bitlen 512) => HashAlgorithm (Blake2b bitlen) # 
Instance details

Defined in Crypto.Hash.Blake2

Associated Types

type HashBlockSize (Blake2b bitlen) :: Nat #

type HashDigestSize (Blake2b bitlen) :: Nat #

type HashInternalContextSize (Blake2b bitlen) :: Nat #

Methods

hashBlockSize :: Blake2b bitlen -> Int #

hashDigestSize :: Blake2b bitlen -> Int #

hashInternalContextSize :: Blake2b bitlen -> Int #

hashInternalInit :: Ptr (Context (Blake2b bitlen)) -> IO () #

hashInternalUpdate :: Ptr (Context (Blake2b bitlen)) -> Ptr Word8 -> Word32 -> IO () #

hashInternalFinalize :: Ptr (Context (Blake2b bitlen)) -> Ptr (Digest (Blake2b bitlen)) -> IO () #

(IsDivisibleBy8 bitlen, KnownNat bitlen, IsAtLeast bitlen 8, IsAtMost bitlen 256) => HashAlgorithm (Blake2s bitlen) # 
Instance details

Defined in Crypto.Hash.Blake2

Associated Types

type HashBlockSize (Blake2s bitlen) :: Nat #

type HashDigestSize (Blake2s bitlen) :: Nat #

type HashInternalContextSize (Blake2s bitlen) :: Nat #

Methods

hashBlockSize :: Blake2s bitlen -> Int #

hashDigestSize :: Blake2s bitlen -> Int #

hashInternalContextSize :: Blake2s bitlen -> Int #

hashInternalInit :: Ptr (Context (Blake2s bitlen)) -> IO () #

hashInternalUpdate :: Ptr (Context (Blake2s bitlen)) -> Ptr Word8 -> Word32 -> IO () #

hashInternalFinalize :: Ptr (Context (Blake2s bitlen)) -> Ptr (Digest (Blake2s bitlen)) -> IO () #

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

Instances details
ByteArrayAccess (MutableContext a) # 
Instance details

Defined in Crypto.Hash.IO

Methods

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