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 Source #

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 Source #

Associated type for the block size of the hash algorithm

type HashDigestSize a :: Nat Source #

Associated type for the digest size of the hash algorithm

type HashInternalContextSize a :: Nat Source #

Associated type for the internal context size of the hash algorithm

Methods

hashBlockSize :: a -> Int Source #

Get the block size of a hash algorithm

hashDigestSize :: a -> Int Source #

Get the digest size of a hash algorithm

hashInternalContextSize :: a -> Int Source #

Get the size of the context used for a hash algorithm

hashInternalInit :: Ptr (Context a) -> IO () Source #

Initialize a context pointer to the initial state of a hash algorithm

hashInternalUpdate :: Ptr (Context a) -> Ptr Word8 -> Word32 -> IO () Source #

Update the context with some raw data

hashInternalFinalize :: Ptr (Context a) -> Ptr (Digest a) -> IO () Source #

Finalize the context and set the digest raw memory to the right value

Instances

Instances details
HashAlgorithm Whirlpool Source # 
Instance details

Defined in Crypto.Hash.Whirlpool

HashAlgorithm Tiger Source # 
Instance details

Defined in Crypto.Hash.Tiger

HashAlgorithm Skein512_512 Source # 
Instance details

Defined in Crypto.Hash.Skein512

HashAlgorithm Skein512_384 Source # 
Instance details

Defined in Crypto.Hash.Skein512

HashAlgorithm Skein512_256 Source # 
Instance details

Defined in Crypto.Hash.Skein512

HashAlgorithm Skein512_224 Source # 
Instance details

Defined in Crypto.Hash.Skein512

HashAlgorithm Skein256_256 Source # 
Instance details

Defined in Crypto.Hash.Skein256

HashAlgorithm Skein256_224 Source # 
Instance details

Defined in Crypto.Hash.Skein256

HashAlgorithm SHA512t_256 Source # 
Instance details

Defined in Crypto.Hash.SHA512t

HashAlgorithm SHA512t_224 Source # 
Instance details

Defined in Crypto.Hash.SHA512t

HashAlgorithm SHA512 Source # 
Instance details

Defined in Crypto.Hash.SHA512

HashAlgorithm SHA384 Source # 
Instance details

Defined in Crypto.Hash.SHA384

HashAlgorithm SHA3_512 Source # 
Instance details

Defined in Crypto.Hash.SHA3

HashAlgorithm SHA3_384 Source # 
Instance details

Defined in Crypto.Hash.SHA3

HashAlgorithm SHA3_256 Source # 
Instance details

Defined in Crypto.Hash.SHA3

HashAlgorithm SHA3_224 Source # 
Instance details

Defined in Crypto.Hash.SHA3

HashAlgorithm SHA256 Source # 
Instance details

Defined in Crypto.Hash.SHA256

HashAlgorithm SHA224 Source # 
Instance details

Defined in Crypto.Hash.SHA224

HashAlgorithm SHA1 Source # 
Instance details

Defined in Crypto.Hash.SHA1

HashAlgorithm RIPEMD160 Source # 
Instance details

Defined in Crypto.Hash.RIPEMD160

HashAlgorithm MD5 Source # 
Instance details

Defined in Crypto.Hash.MD5

HashAlgorithm MD4 Source # 
Instance details

Defined in Crypto.Hash.MD4

HashAlgorithm MD2 Source # 
Instance details

Defined in Crypto.Hash.MD2

HashAlgorithm Keccak_512 Source # 
Instance details

Defined in Crypto.Hash.Keccak

HashAlgorithm Keccak_384 Source # 
Instance details

Defined in Crypto.Hash.Keccak

HashAlgorithm Keccak_256 Source # 
Instance details

Defined in Crypto.Hash.Keccak

HashAlgorithm Keccak_224 Source # 
Instance details

Defined in Crypto.Hash.Keccak

HashAlgorithm Blake2sp_256 Source # 
Instance details

Defined in Crypto.Hash.Blake2sp

HashAlgorithm Blake2sp_224 Source # 
Instance details

Defined in Crypto.Hash.Blake2sp

HashAlgorithm Blake2s_256 Source # 
Instance details

Defined in Crypto.Hash.Blake2s

HashAlgorithm Blake2s_224 Source # 
Instance details

Defined in Crypto.Hash.Blake2s

HashAlgorithm Blake2s_160 Source # 
Instance details

Defined in Crypto.Hash.Blake2s

HashAlgorithm Blake2bp_512 Source # 
Instance details

Defined in Crypto.Hash.Blake2bp

HashAlgorithm Blake2b_512 Source # 
Instance details

Defined in Crypto.Hash.Blake2b

HashAlgorithm Blake2b_384 Source # 
Instance details

Defined in Crypto.Hash.Blake2b

HashAlgorithm Blake2b_256 Source # 
Instance details

Defined in Crypto.Hash.Blake2b

HashAlgorithm Blake2b_224 Source # 
Instance details

Defined in Crypto.Hash.Blake2b

HashAlgorithm Blake2b_160 Source # 
Instance details

Defined in Crypto.Hash.Blake2b

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

Defined in Crypto.Hash.SHAKE

Associated Types

type HashBlockSize (SHAKE256 bitlen) :: Nat Source #

type HashDigestSize (SHAKE256 bitlen) :: Nat Source #

type HashInternalContextSize (SHAKE256 bitlen) :: Nat Source #

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

Defined in Crypto.Hash.SHAKE

Associated Types

type HashBlockSize (SHAKE128 bitlen) :: Nat Source #

type HashDigestSize (SHAKE128 bitlen) :: Nat Source #

type HashInternalContextSize (SHAKE128 bitlen) :: Nat Source #

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

Defined in Crypto.Hash.Blake2

Associated Types

type HashBlockSize (Blake2bp bitlen) :: Nat Source #

type HashDigestSize (Blake2bp bitlen) :: Nat Source #

type HashInternalContextSize (Blake2bp bitlen) :: Nat Source #

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

Defined in Crypto.Hash.Blake2

Associated Types

type HashBlockSize (Blake2sp bitlen) :: Nat Source #

type HashDigestSize (Blake2sp bitlen) :: Nat Source #

type HashInternalContextSize (Blake2sp bitlen) :: Nat Source #

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

Defined in Crypto.Hash.Blake2

Associated Types

type HashBlockSize (Blake2b bitlen) :: Nat Source #

type HashDigestSize (Blake2b bitlen) :: Nat Source #

type HashInternalContextSize (Blake2b bitlen) :: Nat Source #

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

Defined in Crypto.Hash.Blake2

Associated Types

type HashBlockSize (Blake2s bitlen) :: Nat Source #

type HashDigestSize (Blake2s bitlen) :: Nat Source #

type HashInternalContextSize (Blake2s bitlen) :: Nat Source #

data MutableContext a Source #

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) Source # 
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) Source #

Create a new mutable hash context.

the algorithm used is automatically determined from the return constraint.

hashMutableInitWith :: HashAlgorithm alg => alg -> IO (MutableContext alg) Source #

Create a new mutable hash context.

The algorithm is explicitely passed as parameter

hashMutableUpdate :: (ByteArrayAccess ba, HashAlgorithm a) => MutableContext a -> ba -> IO () Source #

Update a mutable hash context in place

hashMutableFinalize :: forall a. HashAlgorithm a => MutableContext a -> IO (Digest a) Source #

Finalize a mutable hash context and compute a digest

hashMutableReset :: HashAlgorithm a => MutableContext a -> IO () Source #

Reset the mutable context to the initial state of the hash