(echInner bool)
| 102 | } |
| 103 | |
| 104 | func (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) { |
no test coverage detected