jwt-0.7.0: src/Data/Text/Extended.hs
{-# LANGUAGE OverloadedStrings #-}
module Data.Text.Extended (
module Data.Text
, constTimeCompare
) where
import Data.Bits
import Data.Char
import Data.Function (on)
import qualified Data.List as L
import Data.Text
import Prelude hiding (length, zip)
constTimeCompare :: Text -> Text -> Bool
constTimeCompare l r = length l == length r && comp' l r
where
comp' a b = 0 == L.foldl' (.|.) 0 (uncurry (on xor ord) <$> zip a b)