1-- | 2-- Module : Network.TLS.Struct13 3-- License : BSD-style 4-- Maintainer : Vincent Hanquez <vincent@snarc.org> 5-- Stability : experimental 6-- Portability : unknown 7-- 8module Network.TLS.Struct13 9 ( Packet13(..) 10 , Handshake13(..) 11 , HandshakeType13(..) 12 , typeOfHandshake13 13 , contentType 14 , KeyUpdate(..) 15 ) where 16 17import Data.X509 (CertificateChain) 18import Network.TLS.Struct 19import Network.TLS.Types 20import Network.TLS.Imports 21 22data Packet13 = 23 Handshake13 [Handshake13] 24 | Alert13 [(AlertLevel, AlertDescription)] 25 | ChangeCipherSpec13 26 | AppData13 ByteString 27 deriving (Show,Eq) 28 29data KeyUpdate = UpdateNotRequested 30 | UpdateRequested 31 deriving (Show,Eq) 32 33type TicketNonce = ByteString 34 35-- fixme: convert Word32 to proper data type 36data Handshake13 = 37 ClientHello13 !Version !ClientRandom !Session ![CipherID] [ExtensionRaw] 38 | ServerHello13 !ServerRandom !Session !CipherID [ExtensionRaw] 39 | NewSessionTicket13 Second Word32 TicketNonce SessionID [ExtensionRaw] 40 | EndOfEarlyData13 41 | EncryptedExtensions13 [ExtensionRaw] 42 | CertRequest13 CertReqContext [ExtensionRaw] 43 | Certificate13 CertReqContext CertificateChain [[ExtensionRaw]] 44 | CertVerify13 HashAndSignatureAlgorithm Signature 45 | Finished13 FinishedData 46 | KeyUpdate13 KeyUpdate 47 deriving (Show,Eq) 48 49data HandshakeType13 = 50 HandshakeType_ClientHello13 51 | HandshakeType_ServerHello13 52 | HandshakeType_EndOfEarlyData13 53 | HandshakeType_NewSessionTicket13 54 | HandshakeType_EncryptedExtensions13 55 | HandshakeType_CertRequest13 56 | HandshakeType_Certificate13 57 | HandshakeType_CertVerify13 58 | HandshakeType_Finished13 59 | HandshakeType_KeyUpdate13 60 deriving (Show,Eq) 61 62typeOfHandshake13 :: Handshake13 -> HandshakeType13 63typeOfHandshake13 ClientHello13{} = HandshakeType_ClientHello13 64typeOfHandshake13 ServerHello13{} = HandshakeType_ServerHello13 65typeOfHandshake13 EndOfEarlyData13{} = HandshakeType_EndOfEarlyData13 66typeOfHandshake13 NewSessionTicket13{} = HandshakeType_NewSessionTicket13 67typeOfHandshake13 EncryptedExtensions13{} = HandshakeType_EncryptedExtensions13 68typeOfHandshake13 CertRequest13{} = HandshakeType_CertRequest13 69typeOfHandshake13 Certificate13{} = HandshakeType_Certificate13 70typeOfHandshake13 CertVerify13{} = HandshakeType_CertVerify13 71typeOfHandshake13 Finished13{} = HandshakeType_Finished13 72typeOfHandshake13 KeyUpdate13{} = HandshakeType_KeyUpdate13 73 74instance TypeValuable HandshakeType13 where 75 valOfType HandshakeType_ClientHello13 = 1 76 valOfType HandshakeType_ServerHello13 = 2 77 valOfType HandshakeType_NewSessionTicket13 = 4 78 valOfType HandshakeType_EndOfEarlyData13 = 5 79 valOfType HandshakeType_EncryptedExtensions13 = 8 80 valOfType HandshakeType_CertRequest13 = 13 81 valOfType HandshakeType_Certificate13 = 11 82 valOfType HandshakeType_CertVerify13 = 15 83 valOfType HandshakeType_Finished13 = 20 84 valOfType HandshakeType_KeyUpdate13 = 24 85 86 valToType 1 = Just HandshakeType_ClientHello13 87 valToType 2 = Just HandshakeType_ServerHello13 88 valToType 4 = Just HandshakeType_NewSessionTicket13 89 valToType 5 = Just HandshakeType_EndOfEarlyData13 90 valToType 8 = Just HandshakeType_EncryptedExtensions13 91 valToType 13 = Just HandshakeType_CertRequest13 92 valToType 11 = Just HandshakeType_Certificate13 93 valToType 15 = Just HandshakeType_CertVerify13 94 valToType 20 = Just HandshakeType_Finished13 95 valToType 24 = Just HandshakeType_KeyUpdate13 96 valToType _ = Nothing 97 98contentType :: Packet13 -> ProtocolType 99contentType ChangeCipherSpec13 = ProtocolType_ChangeCipherSpec 100contentType (Handshake13 _) = ProtocolType_Handshake 101contentType (Alert13 _) = ProtocolType_Alert 102contentType (AppData13 _) = ProtocolType_AppData 103