    {-# LINE 1 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    {-# OPTIONS_HADDOCK hide #-}
    {-# LANGUAGE ForeignFunctionInterface #-}

    module Crypto.Nettle.Hash.ForeignImports
            ( NettleHashInit
            , NettleHashUpdate
            , NettleHashDigest

            , c_sha256_ctx_size
            , c_sha256_digest_size
            , c_sha256_block_size
            , c_sha256_init
            , c_sha256_update
            , c_sha256_digest

            , c_sha224_ctx_size
            , c_sha224_digest_size
            , c_sha224_block_size
            , c_sha224_init
            , c_sha224_update
            , c_sha224_digest

            , c_sha512_ctx_size
            , c_sha512_digest_size
            , c_sha512_block_size
            , c_sha512_init
            , c_sha512_update
            , c_sha512_digest

            , c_sha384_ctx_size
            , c_sha384_digest_size
            , c_sha384_block_size
            , c_sha384_init
            , c_sha384_update
            , c_sha384_digest

            , c_sha3_224_ctx_size
            , c_sha3_224_digest_size
            , c_sha3_224_block_size
            , c_sha3_224_init
            , c_sha3_224_update
            , c_sha3_224_digest

            , c_sha3_256_ctx_size
            , c_sha3_256_digest_size
            , c_sha3_256_block_size
            , c_sha3_256_init
            , c_sha3_256_update
            , c_sha3_256_digest

            , c_sha3_384_ctx_size
            , c_sha3_384_digest_size
            , c_sha3_384_block_size
            , c_sha3_384_init
            , c_sha3_384_update
            , c_sha3_384_digest

            , c_sha3_512_ctx_size
            , c_sha3_512_digest_size
            , c_sha3_512_block_size
            , c_sha3_512_init
            , c_sha3_512_update
            , c_sha3_512_digest

            , c_md5_ctx_size
            , c_md5_digest_size
            , c_md5_block_size
            , c_md5_init
            , c_md5_update
            , c_md5_digest

            , c_md2_ctx_size
            , c_md2_digest_size
            , c_md2_block_size
            , c_md2_init
            , c_md2_update
            , c_md2_digest

            , c_md4_ctx_size
            , c_md4_digest_size
            , c_md4_block_size
            , c_md4_init
            , c_md4_update
            , c_md4_digest

            , c_ripemd160_ctx_size
            , c_ripemd160_digest_size
            , c_ripemd160_block_size
            , c_ripemd160_init
            , c_ripemd160_update
            , c_ripemd160_digest

            , c_sha1_ctx_size
            , c_sha1_digest_size
            , c_sha1_block_size
            , c_sha1_init
            , c_sha1_update
            , c_sha1_digest

            , c_gosthash94_ctx_size
            , c_gosthash94_digest_size
            , c_gosthash94_block_size
            , c_gosthash94_init
            , c_gosthash94_update
            , c_gosthash94_digest

            , c_umac32_ctx_size
            , c_umac32_digest_size
            , c_umac32_set_key
            , c_umac32_set_nonce
            , c_umac32_update
            , c_umac32_digest

            , c_umac64_ctx_size
            , c_umac64_digest_size
            , c_umac64_set_key
            , c_umac64_set_nonce
            , c_umac64_update
            , c_umac64_digest

            , c_umac96_ctx_size
            , c_umac96_digest_size
            , c_umac96_set_key
            , c_umac96_set_nonce
            , c_umac96_update
            , c_umac96_digest

            , c_umac128_ctx_size
            , c_umac128_digest_size
            , c_umac128_set_key
            , c_umac128_set_nonce
            , c_umac128_update
            , c_umac128_digest
            ) where

    import Nettle.Utils

    -- internal functions are not camelCase on purpose
    {-# ANN module "HLint: ignore Use camelCase" #-}

    type NettleHashInit = Ptr Word8 -> IO ()
    type NettleHashUpdate = Ptr Word8 -> Word -> Ptr Word8 -> IO ()
    type NettleHashDigest = Ptr Word8 -> Word -> Ptr Word8 -> IO ()

    c_sha256_ctx_size :: Int
    c_sha256_ctx_size = (112)
    {-# LINE 149 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha256_digest_size :: Int
    c_sha256_digest_size = 32
    {-# LINE 151 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha256_block_size :: Int
    c_sha256_block_size = 64
    {-# LINE 153 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_sha256_init"
            c_sha256_init :: NettleHashInit
    foreign import ccall unsafe "nettle_sha256_update"
            c_sha256_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_sha256_digest"
            c_sha256_digest :: NettleHashDigest

    c_sha224_ctx_size :: Int
    c_sha224_ctx_size = (112)
    {-# LINE 162 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha224_digest_size :: Int
    c_sha224_digest_size = 28
    {-# LINE 164 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha224_block_size :: Int
    c_sha224_block_size = 64
    {-# LINE 166 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_sha224_init"
            c_sha224_init :: NettleHashInit
    foreign import ccall unsafe "nettle_sha256_update"
            c_sha224_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_sha224_digest"
            c_sha224_digest :: NettleHashDigest

    c_sha512_ctx_size :: Int
    c_sha512_ctx_size = (216)
    {-# LINE 175 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha512_digest_size :: Int
    c_sha512_digest_size = 64
    {-# LINE 177 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha512_block_size :: Int
    c_sha512_block_size = 128
    {-# LINE 179 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_sha512_init"
            c_sha512_init :: NettleHashInit
    foreign import ccall unsafe "nettle_sha512_update"
            c_sha512_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_sha512_digest"
            c_sha512_digest :: NettleHashDigest

    c_sha384_ctx_size :: Int
    c_sha384_ctx_size = (216)
    {-# LINE 188 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha384_digest_size :: Int
    c_sha384_digest_size = 48
    {-# LINE 190 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha384_block_size :: Int
    c_sha384_block_size = 128
    {-# LINE 192 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_sha384_init"
            c_sha384_init :: NettleHashInit
    foreign import ccall unsafe "nettle_sha512_update"
            c_sha384_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_sha384_digest"
            c_sha384_digest :: NettleHashDigest

    c_sha3_224_ctx_size :: Int
    c_sha3_224_ctx_size = (352)
    {-# LINE 201 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha3_224_digest_size :: Int
    c_sha3_224_digest_size = 28
    {-# LINE 203 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha3_224_block_size :: Int
    c_sha3_224_block_size = 144
    {-# LINE 205 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_sha3_224_init"
            c_sha3_224_init :: NettleHashInit
    foreign import ccall unsafe "nettle_sha3_224_update"
            c_sha3_224_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_sha3_224_digest"
            c_sha3_224_digest :: NettleHashDigest

    c_sha3_256_ctx_size :: Int
    c_sha3_256_ctx_size = (344)
    {-# LINE 214 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha3_256_digest_size :: Int
    c_sha3_256_digest_size = 32
    {-# LINE 216 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha3_256_block_size :: Int
    c_sha3_256_block_size = 136
    {-# LINE 218 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_sha3_256_init"
            c_sha3_256_init :: NettleHashInit
    foreign import ccall unsafe "nettle_sha3_256_update"
            c_sha3_256_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_sha3_256_digest"
            c_sha3_256_digest :: NettleHashDigest

    c_sha3_384_ctx_size :: Int
    c_sha3_384_ctx_size = (312)
    {-# LINE 227 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha3_384_digest_size :: Int
    c_sha3_384_digest_size = 48
    {-# LINE 229 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha3_384_block_size :: Int
    c_sha3_384_block_size = 104
    {-# LINE 231 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_sha3_384_init"
            c_sha3_384_init :: NettleHashInit
    foreign import ccall unsafe "nettle_sha3_384_update"
            c_sha3_384_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_sha3_384_digest"
            c_sha3_384_digest :: NettleHashDigest

    c_sha3_512_ctx_size :: Int
    c_sha3_512_ctx_size = (280)
    {-# LINE 240 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha3_512_digest_size :: Int
    c_sha3_512_digest_size = 64
    {-# LINE 242 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha3_512_block_size :: Int
    c_sha3_512_block_size = 72
    {-# LINE 244 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_sha3_512_init"
            c_sha3_512_init :: NettleHashInit
    foreign import ccall unsafe "nettle_sha3_512_update"
            c_sha3_512_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_sha3_512_digest"
            c_sha3_512_digest :: NettleHashDigest

    c_md5_ctx_size :: Int
    c_md5_ctx_size = (96)
    {-# LINE 253 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_md5_digest_size :: Int
    c_md5_digest_size = 16
    {-# LINE 255 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_md5_block_size :: Int
    c_md5_block_size = 64
    {-# LINE 257 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_md5_init"
            c_md5_init :: NettleHashInit
    foreign import ccall unsafe "nettle_md5_update"
            c_md5_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_md5_digest"
            c_md5_digest :: NettleHashDigest

    c_md2_ctx_size :: Int
    c_md2_ctx_size = (84)
    {-# LINE 266 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_md2_digest_size :: Int
    c_md2_digest_size = 16
    {-# LINE 268 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_md2_block_size :: Int
    c_md2_block_size = 16
    {-# LINE 270 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_md2_init"
            c_md2_init :: NettleHashInit
    foreign import ccall unsafe "nettle_md2_update"
            c_md2_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_md2_digest"
            c_md2_digest :: NettleHashDigest

    c_md4_ctx_size :: Int
    c_md4_ctx_size = (96)
    {-# LINE 279 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_md4_digest_size :: Int
    c_md4_digest_size = 16
    {-# LINE 281 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_md4_block_size :: Int
    c_md4_block_size = 64
    {-# LINE 283 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_md4_init"
            c_md4_init :: NettleHashInit
    foreign import ccall unsafe "nettle_md4_update"
            c_md4_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_md4_digest"
            c_md4_digest :: NettleHashDigest

    c_ripemd160_ctx_size :: Int
    c_ripemd160_ctx_size = (104)
    {-# LINE 292 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_ripemd160_digest_size :: Int
    c_ripemd160_digest_size = 20
    {-# LINE 294 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_ripemd160_block_size :: Int
    c_ripemd160_block_size = 64
    {-# LINE 296 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_ripemd160_init"
            c_ripemd160_init :: NettleHashInit
    foreign import ccall unsafe "nettle_ripemd160_update"
            c_ripemd160_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_ripemd160_digest"
            c_ripemd160_digest :: NettleHashDigest

    c_sha1_ctx_size :: Int
    c_sha1_ctx_size = (104)
    {-# LINE 305 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha1_digest_size :: Int
    c_sha1_digest_size = 20
    {-# LINE 307 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_sha1_block_size :: Int
    c_sha1_block_size = 64
    {-# LINE 309 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_sha1_init"
            c_sha1_init :: NettleHashInit
    foreign import ccall unsafe "nettle_sha1_update"
            c_sha1_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_sha1_digest"
            c_sha1_digest :: NettleHashDigest

    c_gosthash94_ctx_size :: Int
    c_gosthash94_ctx_size = (104)
    {-# LINE 318 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_gosthash94_digest_size :: Int
    c_gosthash94_digest_size = 32
    {-# LINE 320 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_gosthash94_block_size :: Int
    c_gosthash94_block_size = 32
    {-# LINE 322 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_gosthash94_init"
            c_gosthash94_init :: NettleHashInit
    foreign import ccall unsafe "nettle_gosthash94_update"
            c_gosthash94_update :: NettleHashUpdate
    foreign import ccall unsafe "nettle_gosthash94_digest"
            c_gosthash94_digest :: NettleHashDigest

    c_umac32_ctx_size :: Int
    c_umac32_ctx_size = (2392)
    {-# LINE 332 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_umac32_digest_size :: Int
    c_umac32_digest_size = 4
    {-# LINE 334 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_umac32_set_key"
            c_umac32_set_key :: Ptr Word8 -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac32_set_nonce"
            c_umac32_set_nonce :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac32_update"
            c_umac32_update :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac32_digest"
            c_umac32_digest :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()

    c_umac64_ctx_size :: Int
    c_umac64_ctx_size = (2520)
    {-# LINE 345 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_umac64_digest_size :: Int
    c_umac64_digest_size = 8
    {-# LINE 347 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_umac64_set_key"
            c_umac64_set_key :: Ptr Word8 -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac64_set_nonce"
            c_umac64_set_nonce :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac64_update"
            c_umac64_update :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac64_digest"
            c_umac64_digest :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()

    c_umac96_ctx_size :: Int
    c_umac96_ctx_size = (2640)
    {-# LINE 358 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_umac96_digest_size :: Int
    c_umac96_digest_size = 12
    {-# LINE 360 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_umac96_set_key"
            c_umac96_set_key :: Ptr Word8 -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac96_set_nonce"
            c_umac96_set_nonce :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac96_update"
            c_umac96_update :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac96_digest"
            c_umac96_digest :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()

    c_umac128_ctx_size :: Int
    c_umac128_ctx_size = (2768)
    {-# LINE 371 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    c_umac128_digest_size :: Int
    c_umac128_digest_size = 16
    {-# LINE 373 "src/Crypto/Nettle/Hash/ForeignImports.hsc" #-}
    foreign import ccall unsafe "nettle_umac128_set_key"
            c_umac128_set_key :: Ptr Word8 -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac128_set_nonce"
            c_umac128_set_nonce :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac128_update"
            c_umac128_update :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()
    foreign import ccall unsafe "nettle_umac128_digest"
            c_umac128_digest :: Ptr Word8 -> Word -> Ptr Word8 -> IO ()