1{-# LANGUAGE EmptyDataDecls #-} 2-- | 3-- Module : Network.TLS.Types 4-- License : BSD-style 5-- Maintainer : Vincent Hanquez <vincent@snarc.org> 6-- Stability : experimental 7-- Portability : unknown 8-- 9module Network.TLS.Types 10 ( Version(..) 11 , SessionID 12 , SessionData(..) 13 , SessionFlag(..) 14 , CertReqContext 15 , TLS13TicketInfo(..) 16 , CipherID 17 , CompressionID 18 , Role(..) 19 , invertRole 20 , Direction(..) 21 , HostName 22 , Second 23 , Millisecond 24 , EarlySecret 25 , HandshakeSecret 26 , ApplicationSecret 27 , ResumptionSecret 28 , BaseSecret(..) 29 , ClientTrafficSecret(..) 30 , ServerTrafficSecret(..) 31 , SecretTriple(..) 32 , SecretPair(..) 33 , MasterSecret(..) 34 ) where 35 36import Network.TLS.Imports 37import Network.TLS.Crypto.Types (Group) 38 39type HostName = String 40type Second = Word32 41type Millisecond = Word64 42 43-- | Versions known to TLS 44-- 45-- SSL2 is just defined, but this version is and will not be supported. 46data Version = SSL2 | SSL3 | TLS10 | TLS11 | TLS12 | TLS13 deriving (Show, Eq, Ord, Bounded) 47 48-- | A session ID 49type SessionID = ByteString 50 51-- | Session data to resume 52data SessionData = SessionData 53 { sessionVersion :: Version 54 , sessionCipher :: CipherID 55 , sessionCompression :: CompressionID 56 , sessionClientSNI :: Maybe HostName 57 , sessionSecret :: ByteString 58 , sessionGroup :: Maybe Group 59 , sessionTicketInfo :: Maybe TLS13TicketInfo 60 , sessionALPN :: Maybe ByteString 61 , sessionMaxEarlyDataSize :: Int 62 , sessionFlags :: [SessionFlag] 63 } deriving (Show,Eq) 64 65-- | Some session flags 66data SessionFlag 67 = SessionEMS -- ^ Session created with Extended Master Secret 68 deriving (Show,Eq,Enum) 69 70-- | Certificate request context for TLS 1.3. 71type CertReqContext = ByteString 72 73data TLS13TicketInfo = TLS13TicketInfo 74 { lifetime :: Second -- NewSessionTicket.ticket_lifetime in seconds 75 , ageAdd :: Second -- NewSessionTicket.ticket_age_add 76 , txrxTime :: Millisecond -- serverSendTime or clientReceiveTime 77 , estimatedRTT :: Maybe Millisecond 78 } deriving (Show, Eq) 79 80-- | Cipher identification 81type CipherID = Word16 82 83-- | Compression identification 84type CompressionID = Word8 85 86-- | Role 87data Role = ClientRole | ServerRole 88 deriving (Show,Eq) 89 90-- | Direction 91data Direction = Tx | Rx 92 deriving (Show,Eq) 93 94invertRole :: Role -> Role 95invertRole ClientRole = ServerRole 96invertRole ServerRole = ClientRole 97 98data EarlySecret 99data HandshakeSecret 100data ApplicationSecret 101data ResumptionSecret 102 103newtype BaseSecret a = BaseSecret ByteString deriving Show 104newtype ClientTrafficSecret a = ClientTrafficSecret ByteString deriving Show 105newtype ServerTrafficSecret a = ServerTrafficSecret ByteString deriving Show 106 107data SecretTriple a = SecretTriple 108 { triBase :: BaseSecret a 109 , triClient :: ClientTrafficSecret a 110 , triServer :: ServerTrafficSecret a 111 } 112 113data SecretPair a = SecretPair 114 { pairBase :: BaseSecret a 115 , pairClient :: ClientTrafficSecret a 116 } 117 118-- Master secret for TLS 1.2 or earlier. 119newtype MasterSecret = MasterSecret ByteString deriving Show 120