abstract final Feature
abstract final FeatureModel
TLSFeatures : FeatureModel
annonymousMode : Feature ?
clientAuthentication : Feature ?
abstract final Domain
enum ProtocolVersion = SSL2_0 | SSL3_0 | TLS1_0 | TLS1_1 | TLS1_2
enum HandshakeStatus = initiated | completed | failed
abstract Port
abstract final Message
serverHelloRequestMessage : Message
serverHelloMessage : Message
serverCertificateMessage : Message
serverKeyExchangeMessage : Message
serverCertificateRequestMessage : Message
serverHelloDoneMessage : Message
serverChangeCipherSpecMessage : Message
serverFinishedMessage : Message
protocolMismatch : Message
clientHelloMessage : Message
clientCertificateMessage : Message
clientKeyExchangeMessage : Message
certificateVerifyMessage : Message
clientChangeCipherSpecMessage : Message
clientFinishedMessage : Message
applicationDataMessage : Message
abstract final Node : Domain
send : Port -> Message
receive : Port -> Message
protocolversion -> ProtocolVersion +
certificate ?
signing ?
abstract final Server : Node
abstract final Client : Node
[ Server.send = Client.receive ]
[ Server.receive = Client.send ]
OurServer : Server
[ protocolversion = SSL2_0, SSL3_0, TLS1_2 ]
aClient : Client
[ certificate ]
[ protocolversion = TLS1_2 ]
Protocol : Domain
final client -> aClient
final server -> OurServer
handshakeStatus -> HandshakeStatus
xor channel
initial clientHello --> serverResponse
[ handshakeStatus = initiated ]
serverHelloDone --> clientResponse
xor serverFinish --> serverFinished
[ handshakeStatus = initiated ]
initial serverChangeCipherSpec
serverFinished --> dataTransfer
[ handshakeStatus = completed ]
dataTransfer -->> handshakeStatus = initiated
[ handshakeStatus = completed ]
fatalError
[ handshakeStatus = failed ]