module Crypto.Hash.BLAKE2.BLAKE2b
(
BLAKE2bState,
initialize,
initialize',
update,
finalize,
hash
) where
import Data.ByteString (ByteString)
import Foreign.C.Types (CInt(..))
import Foreign.ForeignPtr (ForeignPtr)
import Foreign.Storable (Storable(..))
import Crypto.Hash.BLAKE2.Internal
data BLAKE2bStruct
instance Storable BLAKE2bStruct where
sizeOf _ = (368)
alignment _ = 8
peek = error "peek not implemented"
poke = error "poke not implemented"
type BLAKE2bState = ForeignPtr BLAKE2bStruct
initialize :: Int
-> BLAKE2bState
initialize = initializer c_blake2b_init
initialize' :: Int
-> ByteString
-> BLAKE2bState
initialize' = initializer' c_blake2b_init_key
update :: ByteString
-> BLAKE2bState
-> BLAKE2bState
update = updater c_blake2b_update
finalize :: Int
-> BLAKE2bState
-> ByteString
finalize = finalizer c_blake2b_final
hash :: Int
-> ByteString
-> ByteString
-> ByteString
hash = hasher c_blake2b
foreign import ccall unsafe "blake2.h blake2b"
c_blake2b :: HashFunc
foreign import ccall unsafe "blake2.h blake2b_init"
c_blake2b_init :: InitFunc BLAKE2bStruct
foreign import ccall unsafe "blake2.h blake2b_init_key"
c_blake2b_init_key :: InitKeyFunc BLAKE2bStruct
foreign import ccall unsafe "blake2.h blake2b_update"
c_blake2b_update :: UpdateFunc BLAKE2bStruct
foreign import ccall unsafe "blake2.h blake2b_final"
c_blake2b_final :: FinalFunc BLAKE2bStruct