packages feed

haskell-tor-0.1.2: test/Test/CipherSuite.hs

module Test.CipherSuite(cipherSuiteTests) where

import Data.List
import Test.Framework
import Test.Framework.Providers.HUnit
import Test.Framework.Providers.QuickCheck2
import Test.QuickCheck
import Test.HUnit(assertEqual)
import Test.Standard
import TLS.CipherSuite

instance Arbitrary CipherSuite where
  arbitrary = elements rfc5246CipherSuites

prop_CipherSerial :: CipherSuite -> Bool
prop_CipherSerial = serialProp (getCipherSuite rfc5246CipherSuites)
                               putCipherSuite

-- these were copied and reworked by vim rather than manually copied, like
-- the lists above, and so should be a bit more reliable for cross-checking
-- that I typed things in correctly.
cipherSuiteTests :: Test
cipherSuiteTests =
  testGroup "CipherSuite tests" [
    testProperty "CipherSuite serializes" prop_CipherSerial
  , testGroup "CipherSuite ID checks" [
      checkIdentifier 0x00 0x00 "TLS_NULL_WITH_NULL_NULL"
    , checkIdentifier 0x00 0x01 "TLS_RSA_WITH_NULL_MD5"
    , checkIdentifier 0x00 0x02 "TLS_RSA_WITH_NULL_SHA"
    , checkIdentifier 0x00 0x3B "TLS_RSA_WITH_NULL_SHA256"
    , checkIdentifier 0x00 0x04 "TLS_RSA_WITH_RC4_128_MD5"
    , checkIdentifier 0x00 0x05 "TLS_RSA_WITH_RC4_128_SHA"
    , checkIdentifier 0x00 0x0A "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
    , checkIdentifier 0x00 0x2F "TLS_RSA_WITH_AES_128_CBC_SHA"
    , checkIdentifier 0x00 0x35 "TLS_RSA_WITH_AES_256_CBC_SHA"
    , checkIdentifier 0x00 0x3C "TLS_RSA_WITH_AES_128_CBC_SHA256"
    , checkIdentifier 0x00 0x3D "TLS_RSA_WITH_AES_256_CBC_SHA256"
    , checkIdentifier 0x00 0x0D "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"
    , checkIdentifier 0x00 0x10 "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"
    , checkIdentifier 0x00 0x13 "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"
    , checkIdentifier 0x00 0x16 "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"
    , checkIdentifier 0x00 0x30 "TLS_DH_DSS_WITH_AES_128_CBC_SHA"
    , checkIdentifier 0x00 0x31 "TLS_DH_RSA_WITH_AES_128_CBC_SHA"
    , checkIdentifier 0x00 0x32 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
    , checkIdentifier 0x00 0x33 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"
    , checkIdentifier 0x00 0x36 "TLS_DH_DSS_WITH_AES_256_CBC_SHA"
    , checkIdentifier 0x00 0x37 "TLS_DH_RSA_WITH_AES_256_CBC_SHA"
    , checkIdentifier 0x00 0x38 "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"
    , checkIdentifier 0x00 0x39 "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
    , checkIdentifier 0x00 0x3E "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"
    , checkIdentifier 0x00 0x3F "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"
    , checkIdentifier 0x00 0x40 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
    , checkIdentifier 0x00 0x67 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"
    , checkIdentifier 0x00 0x68 "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"
    , checkIdentifier 0x00 0x69 "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"
    , checkIdentifier 0x00 0x6A "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"
    , checkIdentifier 0x00 0x6B "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"
    , checkIdentifier 0x00 0x18 "TLS_DH_anon_WITH_RC4_128_MD5"
    , checkIdentifier 0x00 0x1B "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"
    , checkIdentifier 0x00 0x34 "TLS_DH_anon_WITH_AES_128_CBC_SHA"
    , checkIdentifier 0x00 0x3A "TLS_DH_anon_WITH_AES_256_CBC_SHA"
    , checkIdentifier 0x00 0x6C "TLS_DH_anon_WITH_AES_128_CBC_SHA256"
    , checkIdentifier 0x00 0x6D "TLS_DH_anon_WITH_AES_256_CBC_SHA256"
    ]
  ]
 where
  checkIdentifier a b str =
    let tname = str ++ " has right ident"
    in testCase tname (assertEqual tname str (getId a b))
  --
  getId a b =
    case find (matchId a b) rfc5246CipherSuites of
      Nothing -> "BAD BAD"
      Just x  -> cipherName x
  --
  matchId a b CipherSuite{ cipherIdentifier = (m, n) } = (a == m) && (n == b)