{-# LANGUAGE BangPatterns #-}
module Data.ByteArray.Hash
(
SipKey(..)
, SipHash(..)
, sipHash
, sipHashWith
, FnvHash32(..)
, FnvHash64(..)
, fnv1Hash
, fnv1aHash
, fnv1_64Hash
, fnv1a_64Hash
) where
import Data.Memory.Internal.Compat
import Data.Memory.Hash.SipHash
import Data.Memory.Hash.FNV
import qualified Data.ByteArray.Types as B
sipHash :: B.ByteArrayAccess ba
=> SipKey
-> ba
-> SipHash
sipHash :: forall ba. ByteArrayAccess ba => SipKey -> ba -> SipHash
sipHash SipKey
key ba
ba = forall a. IO a -> a
unsafeDoIO forall a b. (a -> b) -> a -> b
$ forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
B.withByteArray ba
ba forall a b. (a -> b) -> a -> b
$ \Ptr Word8
p -> SipKey -> Ptr Word8 -> Int -> IO SipHash
hash SipKey
key Ptr Word8
p (forall ba. ByteArrayAccess ba => ba -> Int
B.length ba
ba)
sipHashWith :: B.ByteArrayAccess ba
=> Int
-> Int
-> SipKey
-> ba
-> SipHash
sipHashWith :: forall ba.
ByteArrayAccess ba =>
Int -> Int -> SipKey -> ba -> SipHash
sipHashWith Int
c Int
d SipKey
key ba
ba = forall a. IO a -> a
unsafeDoIO forall a b. (a -> b) -> a -> b
$ forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
B.withByteArray ba
ba forall a b. (a -> b) -> a -> b
$ \Ptr Word8
p -> Int -> Int -> SipKey -> Ptr Word8 -> Int -> IO SipHash
hashWith Int
c Int
d SipKey
key Ptr Word8
p (forall ba. ByteArrayAccess ba => ba -> Int
B.length ba
ba)
fnv1Hash :: B.ByteArrayAccess ba
=> ba
-> FnvHash32
fnv1Hash :: forall ba. ByteArrayAccess ba => ba -> FnvHash32
fnv1Hash ba
ba = forall a. IO a -> a
unsafeDoIO forall a b. (a -> b) -> a -> b
$ forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
B.withByteArray ba
ba forall a b. (a -> b) -> a -> b
$ \Ptr Word8
p -> Ptr Word8 -> Int -> IO FnvHash32
fnv1 Ptr Word8
p (forall ba. ByteArrayAccess ba => ba -> Int
B.length ba
ba)
fnv1aHash :: B.ByteArrayAccess ba
=> ba
-> FnvHash32
fnv1aHash :: forall ba. ByteArrayAccess ba => ba -> FnvHash32
fnv1aHash ba
ba = forall a. IO a -> a
unsafeDoIO forall a b. (a -> b) -> a -> b
$ forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
B.withByteArray ba
ba forall a b. (a -> b) -> a -> b
$ \Ptr Word8
p -> Ptr Word8 -> Int -> IO FnvHash32
fnv1a Ptr Word8
p (forall ba. ByteArrayAccess ba => ba -> Int
B.length ba
ba)
fnv1_64Hash :: B.ByteArrayAccess ba
=> ba
-> FnvHash64
fnv1_64Hash :: forall ba. ByteArrayAccess ba => ba -> FnvHash64
fnv1_64Hash ba
ba = forall a. IO a -> a
unsafeDoIO forall a b. (a -> b) -> a -> b
$ forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
B.withByteArray ba
ba forall a b. (a -> b) -> a -> b
$ \Ptr Word8
p -> Ptr Word8 -> Int -> IO FnvHash64
fnv1_64 Ptr Word8
p (forall ba. ByteArrayAccess ba => ba -> Int
B.length ba
ba)
fnv1a_64Hash :: B.ByteArrayAccess ba
=> ba
-> FnvHash64
fnv1a_64Hash :: forall ba. ByteArrayAccess ba => ba -> FnvHash64
fnv1a_64Hash ba
ba = forall a. IO a -> a
unsafeDoIO forall a b. (a -> b) -> a -> b
$ forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
B.withByteArray ba
ba forall a b. (a -> b) -> a -> b
$ \Ptr Word8
p -> Ptr Word8 -> Int -> IO FnvHash64
fnv1a_64 Ptr Word8
p (forall ba. ByteArrayAccess ba => ba -> Int
B.length ba
ba)