diff --git a/Network/TLS/Cap.hs b/Network/TLS/Cap.hs new file mode 100644 index 0000000..dbbd43f --- /dev/null +++ b/Network/TLS/Cap.hs @@ -0,0 +1,19 @@ +-- | +-- Module : Network.TLS.Cap +-- License : BSD-style +-- Maintainer : Vincent Hanquez +-- Stability : experimental +-- Portability : unknown +-- + +module Network.TLS.Cap + ( hasHelloExtensions + , hasExplicitBlockIV + ) where + +import Network.TLS.Struct + +hasHelloExtensions, hasExplicitBlockIV :: Version -> Bool + +hasHelloExtensions ver = ver >= TLS12 +hasExplicitBlockIV ver = ver >= TLS11 diff --git a/Network/TLS/Packet.hs b/Network/TLS/Packet.hs index 6aba31b..804d403 100644 --- a/Network/TLS/Packet.hs +++ b/Network/TLS/Packet.hs @@ -37,13 +37,14 @@ module Network.TLS.Packet ) where import Data.Word +import Network.TLS.Struct +import Network.TLS.Cap import Network.TLS.Wire import Data.Either (partitionEithers) import Data.Maybe (fromJust, isNothing) import Control.Applicative ((<$>)) import Control.Monad import Control.Monad.Error -import Network.TLS.Struct import Data.Certificate.X509 import Network.TLS.Crypto import Network.TLS.MAC @@ -125,7 +126,7 @@ decodeClientHello = do ciphers <- getWords16 compressions <- getWords8 r <- remaining - exts <- if ver >= TLS12 && r > 0 + exts <- if hasHelloExtensions ver && r > 0 then fmap fromIntegral getWord16 >>= getExtensions >>= return . Just else return Nothing return $ ClientHello ver random session ciphers compressions exts @@ -138,7 +139,7 @@ decodeServerHello = do cipherid <- getWord16 compressionid <- getWord8 r <- remaining - exts <- if ver >= TLS12 && r > 0 + exts <- if hasHelloExtensions ver && r > 0 then fmap fromIntegral getWord16 >>= getExtensions >>= return . Just else return Nothing return $ ServerHello ver random session cipherid compressionid exts diff --git a/tls.cabal b/tls.cabal index f1701d8..baf94be 100644 --- a/tls.cabal +++ b/tls.cabal @@ -43,7 +43,8 @@ Library Network.TLS.Cipher Network.TLS.SRandom Network.TLS.MAC - other-modules: Network.TLS.Compression + other-modules: Network.TLS.Cap + Network.TLS.Compression Network.TLS.Crypto Network.TLS.Packet Network.TLS.State