packages feed

supernova-0.0.3: src/Pulsar/Protocol/CheckSum.hs

module Pulsar.Protocol.CheckSum where

import qualified Data.Binary                   as B
import           Data.Bool                      ( bool )
import qualified Data.ByteString.Lazy.Char8    as CL
import           Data.Digest.CRC32C             ( crc32c )

data CheckSumValidation = Valid | Invalid deriving Show

newtype CheckSum = CheckSum B.Word32 deriving (Eq, Show)

runCheckSum :: CL.ByteString -> CheckSum -> CheckSumValidation
runCheckSum t cs = bool Invalid Valid $ computeCheckSum t == cs

computeCheckSum :: CL.ByteString -> CheckSum
computeCheckSum t = CheckSum $ crc32c (CL.toStrict t)