packages feed

nettle-0.4: src/Tests/KAT/Utils.hs

module KAT.Utils
	( KATs(..)
	, KAT_ECB(..)
	, KAT_Stream(..)
	, defaultKATs
	, defaultStreamKATs
	, concatKATs
	) where

import qualified Data.ByteString as B

-- source: crypto-cipher-tests
-- | all the KATs. use defaultKATs to prevent compilation error
-- from future expansion of this data structure
data KATs = KATs
    { kat_ECB  :: [KAT_ECB]
    } deriving (Show,Eq)

-- | ECB KAT
data KAT_ECB = KAT_ECB
    { ecbKey        :: B.ByteString -- ^ Key
    , ecbPlaintext  :: B.ByteString -- ^ Plaintext
    , ecbCiphertext :: B.ByteString -- ^ Ciphertext
    } deriving (Show,Eq)

-- | KAT for Stream cipher
data KAT_Stream = KAT_Stream
    { streamKey        :: B.ByteString
    , streamPlaintext  :: B.ByteString
    , streamCiphertext :: B.ByteString
    } deriving (Show,Eq)

-- | the empty KATs
defaultKATs :: KATs
defaultKATs = KATs
    { kat_ECB  = []
    }

-- | the empty KATs for stream
defaultStreamKATs :: [KAT_Stream]
defaultStreamKATs = []

concatKATs :: [KATs] -> KATs
concatKATs l = KATs (m kat_ECB)
	where
	m :: (KATs -> [x]) -> [x]
	m sel = concat $ map sel l