raaz-0.2.0: Raaz/Hash/Blake2/Implementation/CPortable.hs
{-# LANGUAGE ForeignFunctionInterface #-}
-- | The portable C-implementation of SHA1
module Raaz.Hash.Blake2.Implementation.CPortable
( implementation2b
, implementation2s
) where
import Foreign.Ptr ( Ptr )
import Data.Word
import Raaz.Core
import Raaz.Hash.Internal
import Raaz.Hash.Blake2.Internal
-- | The portable C implementation of BLAKE2b.
implementation2b :: Implementation BLAKE2b
implementation2b = SomeHashI cPortable2b
-- | The portable C implementation of BLAKE2s.
implementation2s :: Implementation BLAKE2s
implementation2s = SomeHashI cPortable2s
cPortable2b :: HashI BLAKE2b Blake2bMem
cPortable2b = blake2bImplementation
"blake2b-cportable"
"BLAKE2b Implementation using portable C and Haskell FFI"
compressIt
c_blake2b_last
where compressIt ptr = c_blake2b_compress ptr . fromEnum
cPortable2s :: HashI BLAKE2s Blake2sMem
cPortable2s = blake2sImplementation
"blake2s-cportable"
"BLAKE2s Implementation using portable C and Haskell FFI"
compressIt
c_blake2s_last
where compressIt ptr = c_blake2s_compress ptr . fromEnum
------------------------- FFI For Blake2b -------------------------------------
foreign import ccall unsafe
"raaz/hash/blake2/common.h raazHashBlake2bPortableBlockCompress"
c_blake2b_compress :: Pointer
-> Int
-> Ptr (BYTES Word64)
-> Ptr (BYTES Word64)
-> Ptr BLAKE2b
-> IO ()
foreign import ccall unsafe
"raaz/hash/blake2/common.h raazHashBlake2bPortableLastBlock"
c_blake2b_last :: Pointer
-> BYTES Int
-> BYTES Word64
-> BYTES Word64
-> Word64
-> Word64
-> Ptr BLAKE2b
-> IO ()
------------------------- FFI For Blake2s -------------------------------------
foreign import ccall unsafe
"raaz/hash/blake2/common.h raazHashBlake2sPortableBlockCompress"
c_blake2s_compress :: Pointer
-> Int
-> BYTES Word64
-> Ptr BLAKE2s
-> IO ()
foreign import ccall unsafe
"raaz/hash/blake2/common.h raazHashBlake2sPortableLastBlock"
c_blake2s_last :: Pointer
-> BYTES Int
-> BYTES Word64
-> Word32
-> Word32
-> Ptr BLAKE2s
-> IO ()
{-
void raazHashBlake2bPortableBlockCompress( Block2b *mesg, int nblocks,
Word2b *Upper, Word2b *Lower,
Blake2b h)
void raazHashBlake2bPortableLastBlock( Block2b mesg, int nbytes,
Word2b upper, Word2b lower,
Word2b f0 , Word2b f1,
Blake2b h)
-}