{-# LANGUAGE ViewPatterns #-} {-# LANGUAGE OverloadedStrings #-} module KAT_RC4 where import Test.Tasty import Test.Tasty.HUnit import Data.ByteString (ByteString) import Data.ByteString.Char8 () import qualified Crypto.Cipher.RC4 as RC4 -- taken from wikipedia pages vectors :: [(ByteString, ByteString, ByteString)] vectors = [ ("Key" ,"Plaintext" ,"\xBB\xF3\x16\xE8\xD9\x40\xAF\x0A\xD3" ) , ("Wiki" ,"pedia" ,"\x10\x21\xBF\x04\x20" ) , ("Secret" ,"Attack at dawn" ,"\x45\xA0\x1F\x64\x5F\xC3\x5B\x38\x35\x52\x54\x4B\x9B\xF5" ) ] tests = testGroup "RC4" $ map toKatTest $ zip is vectors where toKatTest (i, (key, plainText, cipherText)) = testCase (show i) (cipherText @=? snd (RC4.combine (RC4.initialize key) plainText)) is :: [Int] is = [1..]