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

Method marshal

handshake_messages.go:1010–1047  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1008}
1009
1010func (m *encryptedExtensionsMsg) marshal() ([]byte, error) {
1011 var b cryptobyte.Builder
1012 b.AddUint8(typeEncryptedExtensions)
1013 b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) {
1014 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
1015 if len(m.alpnProtocol) > 0 {
1016 b.AddUint16(extensionALPN)
1017 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
1018 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
1019 b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) {
1020 b.AddBytes([]byte(m.alpnProtocol))
1021 })
1022 })
1023 })
1024 }
1025 if m.quicTransportParameters != nil { // marshal zero-length parameters when present
1026 // draft-ietf-quic-tls-32, Section 8.2
1027 b.AddUint16(extensionQUICTransportParameters)
1028 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
1029 b.AddBytes(m.quicTransportParameters)
1030 })
1031 }
1032 if m.earlyData {
1033 // RFC 8446, Section 4.2.10
1034 b.AddUint16(extensionEarlyData)
1035 b.AddUint16(0) // empty extension_data
1036 }
1037 if len(m.echRetryConfigs) > 0 {
1038 b.AddUint16(extensionEncryptedClientHello)
1039 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
1040 b.AddBytes(m.echRetryConfigs)
1041 })
1042 }
1043 })
1044 })
1045
1046 return b.Bytes()
1047}
1048
1049func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool {
1050 *m = encryptedExtensionsMsg{}

Callers

nothing calls this directly

Calls 1

BytesMethod · 0.80

Tested by

no test coverage detected