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

Method marshalMsg

handshake_messages.go:104–373  ·  view source on GitHub ↗
(echInner bool)

Source from the content-addressed store, hash-verified

102}
103
104func (m *clientHelloMsg) marshalMsg(echInner bool) ([]byte, error) {
105 var exts cryptobyte.Builder
106 if len(m.serverName) > 0 {
107 // RFC 6066, Section 3
108 exts.AddUint16(extensionServerName)
109 exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) {
110 exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) {
111 exts.AddUint8(0) // name_type = host_name
112 exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) {
113 exts.AddBytes([]byte(m.serverName))
114 })
115 })
116 })
117 }
118 if len(m.supportedPoints) > 0 && !echInner {
119 // RFC 4492, Section 5.1.2
120 exts.AddUint16(extensionSupportedPoints)
121 exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) {
122 exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) {
123 exts.AddBytes(m.supportedPoints)
124 })
125 })
126 }
127 if m.ticketSupported && !echInner {
128 // RFC 5077, Section 3.2
129 exts.AddUint16(extensionSessionTicket)
130 exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) {
131 exts.AddBytes(m.sessionTicket)
132 })
133 }
134 if m.secureRenegotiationSupported && !echInner {
135 // RFC 5746, Section 3.2
136 exts.AddUint16(extensionRenegotiationInfo)
137 exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) {
138 exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) {
139 exts.AddBytes(m.secureRenegotiation)
140 })
141 })
142 }
143 if m.extendedMasterSecret && !echInner {
144 // RFC 7627
145 exts.AddUint16(extensionExtendedMasterSecret)
146 exts.AddUint16(0) // empty extension_data
147 }
148 if m.scts {
149 // RFC 6962, Section 3.3.1
150 exts.AddUint16(extensionSCT)
151 exts.AddUint16(0) // empty extension_data
152 }
153 if m.earlyData {
154 // RFC 8446, Section 4.2.10
155 exts.AddUint16(extensionEarlyData)
156 exts.AddUint16(0) // empty extension_data
157 }
158 if m.quicTransportParameters != nil { // marshal zero-length parameters when present
159 // RFC 9001, Section 8.2
160 exts.AddUint16(extensionQUICTransportParameters)
161 exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) {

Callers 2

marshalMethod · 0.95
encodeInnerClientHelloFunction · 0.80

Calls 2

addBytesWithLengthFunction · 0.85
BytesMethod · 0.80

Tested by

no test coverage detected