MCPcopy
hub / github.com/XTLS/REALITY / handshake

Method handshake

handshake_server.go:68–133  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

66}
67
68func (hs *serverHandshakeState) handshake() error {
69 c := hs.c
70
71 if err := hs.processClientHello(); err != nil {
72 return err
73 }
74
75 // For an overview of TLS handshaking, see RFC 5246, Section 7.3.
76 c.buffering = true
77 if err := hs.checkForResumption(); err != nil {
78 return err
79 }
80 if hs.sessionState != nil {
81 // The client has included a session ticket and so we do an abbreviated handshake.
82 if err := hs.doResumeHandshake(); err != nil {
83 return err
84 }
85 if err := hs.establishKeys(); err != nil {
86 return err
87 }
88 if err := hs.sendSessionTicket(); err != nil {
89 return err
90 }
91 if err := hs.sendFinished(c.serverFinished[:]); err != nil {
92 return err
93 }
94 if _, err := c.flush(); err != nil {
95 return err
96 }
97 c.clientFinishedIsFirst = false
98 if err := hs.readFinished(nil); err != nil {
99 return err
100 }
101 } else {
102 // The client didn't include a session ticket, or it wasn't
103 // valid so we do a full handshake.
104 if err := hs.pickCipherSuite(); err != nil {
105 return err
106 }
107 if err := hs.doFullHandshake(); err != nil {
108 return err
109 }
110 if err := hs.establishKeys(); err != nil {
111 return err
112 }
113 if err := hs.readFinished(c.clientFinished[:]); err != nil {
114 return err
115 }
116 c.clientFinishedIsFirst = true
117 c.buffering = true
118 if err := hs.sendSessionTicket(); err != nil {
119 return err
120 }
121 if err := hs.sendFinished(nil); err != nil {
122 return err
123 }
124 if _, err := c.flush(); err != nil {
125 return err

Callers 1

serverHandshakeMethod · 0.95

Calls 11

processClientHelloMethod · 0.95
checkForResumptionMethod · 0.95
doResumeHandshakeMethod · 0.95
establishKeysMethod · 0.95
sendSessionTicketMethod · 0.95
sendFinishedMethod · 0.95
readFinishedMethod · 0.95
pickCipherSuiteMethod · 0.95
doFullHandshakeMethod · 0.95
ekmFromMasterSecretFunction · 0.85
flushMethod · 0.80

Tested by

no test coverage detected