38 lines
1.2 KiB
Haskell
38 lines
1.2 KiB
Haskell
module Ciphers
|
|
( propertyBulkFunctional
|
|
) where
|
|
|
|
import Control.Applicative ((<$>), (<*>))
|
|
|
|
import Test.QuickCheck
|
|
|
|
import qualified Data.ByteString as B
|
|
import Network.TLS.Cipher
|
|
import Network.TLS.Extra.Cipher
|
|
|
|
arbitraryKey :: Bulk -> Gen B.ByteString
|
|
arbitraryKey bulk = B.pack `fmap` vector (fromIntegral $ bulkKeySize bulk)
|
|
|
|
arbitraryIV :: Bulk -> Gen B.ByteString
|
|
arbitraryIV bulk = B.pack `fmap` vector (fromIntegral $ bulkIVSize bulk)
|
|
|
|
arbitraryText :: Bulk -> Gen B.ByteString
|
|
arbitraryText bulk = B.pack `fmap` vector (fromIntegral $ bulkBlockSize bulk)
|
|
|
|
data BulkTest = BulkTest Bulk B.ByteString B.ByteString B.ByteString
|
|
deriving (Show,Eq)
|
|
|
|
instance Arbitrary BulkTest where
|
|
arbitrary = do
|
|
bulk <- cipherBulk `fmap` elements ciphersuite_all
|
|
BulkTest bulk <$> arbitraryKey bulk <*> arbitraryIV bulk <*> arbitraryText bulk
|
|
|
|
propertyBulkFunctional :: BulkTest -> Bool
|
|
propertyBulkFunctional (BulkTest bulk key iv t) =
|
|
case bulkF bulk of
|
|
BulkBlockF enc dec -> block enc dec
|
|
BulkStreamF ktoi enc dec -> stream ktoi enc dec
|
|
where
|
|
block e d = (d key iv . e key iv) t == t
|
|
stream ktoi e d = (fst . d siv . fst . e siv) t == t
|
|
where siv = ktoi key
|