MCPcopy Create free account
hub / github.com/XTLS/Go / marshal

Method marshal

handshake_messages.go:621–735  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

619}
620
621func (m *serverHelloMsg) marshal() []byte {
622 if m.raw != nil {
623 return m.raw
624 }
625
626 var b cryptobyte.Builder
627 b.AddUint8(typeServerHello)
628 b.AddUint24LengthPrefixed(func(b *cryptobyte.Builder) {
629 b.AddUint16(m.vers)
630 addBytesWithLength(b, m.random, 32)
631 b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) {
632 b.AddBytes(m.sessionId)
633 })
634 b.AddUint16(m.cipherSuite)
635 b.AddUint8(m.compressionMethod)
636
637 // If extensions aren't present, omit them.
638 var extensionsPresent bool
639 bWithoutExtensions := *b
640
641 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
642 if m.ocspStapling {
643 b.AddUint16(extensionStatusRequest)
644 b.AddUint16(0) // empty extension_data
645 }
646 if m.ticketSupported {
647 b.AddUint16(extensionSessionTicket)
648 b.AddUint16(0) // empty extension_data
649 }
650 if m.secureRenegotiationSupported {
651 b.AddUint16(extensionRenegotiationInfo)
652 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
653 b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) {
654 b.AddBytes(m.secureRenegotiation)
655 })
656 })
657 }
658 if len(m.alpnProtocol) > 0 {
659 b.AddUint16(extensionALPN)
660 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
661 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
662 b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) {
663 b.AddBytes([]byte(m.alpnProtocol))
664 })
665 })
666 })
667 }
668 if len(m.scts) > 0 {
669 b.AddUint16(extensionSCT)
670 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
671 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
672 for _, sct := range m.scts {
673 b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
674 b.AddBytes(sct)
675 })
676 }
677 })
678 })

Callers 1

doHelloRetryRequestMethod · 0.95

Calls 1

addBytesWithLengthFunction · 0.85

Tested by

no test coverage detected