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