cryptonite-0.29: Cryptography Primitives sink
LicenseBSD-style
MaintainerOlivier Chéron <olivier.cheron@gmail.com>
Stabilityexperimental
Portabilityunknown
Safe HaskellNone
LanguageHaskell2010

Crypto.MAC.KMAC

Contents

Description

Provide the KMAC (Keccak Message Authentication Code) algorithm, derived from the SHA-3 base algorithm Keccak and defined in NIST SP800-185.

Synopsis

Documentation

class HashAlgorithm a => HashSHAKE a #

Type class of SHAKE algorithms.

Minimal complete definition

cshakeInternalFinalize, cshakeOutputLength

Instances

Instances details
KnownNat bitlen => HashSHAKE (SHAKE256 bitlen) # 
Instance details

Defined in Crypto.Hash.SHAKE

Methods

cshakeInternalFinalize :: Ptr (Context (SHAKE256 bitlen)) -> Ptr (Digest (SHAKE256 bitlen)) -> IO ()

cshakeOutputLength :: SHAKE256 bitlen -> Int

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

Defined in Crypto.Hash.SHAKE

Methods

cshakeInternalFinalize :: Ptr (Context (SHAKE128 bitlen)) -> Ptr (Digest (SHAKE128 bitlen)) -> IO ()

cshakeOutputLength :: SHAKE128 bitlen -> Int

kmac :: (HashSHAKE a, ByteArrayAccess string, ByteArrayAccess key, ByteArrayAccess ba) => string -> key -> ba -> KMAC a #

Compute a KMAC using the supplied customization string and key.

newtype KMAC a #

Represent a KMAC that is a phantom type with the hash used to produce the mac.

The Eq instance is constant time. No Show instance is provided, to avoid printing by mistake.

Constructors

KMAC 

Fields

Instances

Instances details
Eq (KMAC a) # 
Instance details

Defined in Crypto.MAC.KMAC

Methods

(==) :: KMAC a -> KMAC a -> Bool #

(/=) :: KMAC a -> KMAC a -> Bool #

NFData (KMAC a) # 
Instance details

Defined in Crypto.MAC.KMAC

Methods

rnf :: KMAC a -> () #

ByteArrayAccess (KMAC a) # 
Instance details

Defined in Crypto.MAC.KMAC

Methods

length :: KMAC a -> Int #

withByteArray :: KMAC a -> (Ptr p -> IO a0) -> IO a0 #

copyByteArrayToPtr :: KMAC a -> Ptr p -> IO () #

Incremental

data Context a #

Represent an ongoing KMAC state, that can be appended with update and finalized to a KMAC with finalize.

initialize :: forall a string key. (HashSHAKE a, ByteArrayAccess string, ByteArrayAccess key) => string -> key -> Context a #

Initialize a new incremental KMAC context with the supplied customization string and key.

update :: (HashSHAKE a, ByteArrayAccess ba) => Context a -> ba -> Context a #

Incrementally update a KMAC context.

updates :: (HashSHAKE a, ByteArrayAccess ba) => Context a -> [ba] -> Context a #

Incrementally update a KMAC context with multiple inputs.

finalize :: forall a. HashSHAKE a => Context a -> KMAC a #

Finalize a KMAC context and return the KMAC.