jwt-0.7.1: src/Data/ByteString/Extended.hs
module Data.ByteString.Extended (
module Data.ByteString
, constTimeCompare
) where
import Data.Bits
import Data.ByteString
import qualified Data.List as L
import Prelude hiding (length, zip, zipWith)
constTimeCompare :: ByteString -> ByteString -> Bool
constTimeCompare l r = length l == length r && comp' l r
where
comp' a b = 0 == L.foldl' (.|.) 0 (uncurry xor <$> zip a b)