()
| 744 | } |
| 745 | |
| 746 | func (m *serverHelloMsg) marshal() ([]byte, error) { |
| 747 | var exts cryptobyte.Builder |
| 748 | if m.ocspStapling { |
| 749 | exts.AddUint16(extensionStatusRequest) |
| 750 | exts.AddUint16(0) // empty extension_data |
| 751 | } |
| 752 | if m.ticketSupported { |
| 753 | exts.AddUint16(extensionSessionTicket) |
| 754 | exts.AddUint16(0) // empty extension_data |
| 755 | } |
| 756 | if m.secureRenegotiationSupported { |
| 757 | exts.AddUint16(extensionRenegotiationInfo) |
| 758 | exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 759 | exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 760 | exts.AddBytes(m.secureRenegotiation) |
| 761 | }) |
| 762 | }) |
| 763 | } |
| 764 | if m.extendedMasterSecret { |
| 765 | exts.AddUint16(extensionExtendedMasterSecret) |
| 766 | exts.AddUint16(0) // empty extension_data |
| 767 | } |
| 768 | if len(m.alpnProtocol) > 0 { |
| 769 | exts.AddUint16(extensionALPN) |
| 770 | exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 771 | exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 772 | exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 773 | exts.AddBytes([]byte(m.alpnProtocol)) |
| 774 | }) |
| 775 | }) |
| 776 | }) |
| 777 | } |
| 778 | if len(m.scts) > 0 { |
| 779 | exts.AddUint16(extensionSCT) |
| 780 | exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 781 | exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 782 | for _, sct := range m.scts { |
| 783 | exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 784 | exts.AddBytes(sct) |
| 785 | }) |
| 786 | } |
| 787 | }) |
| 788 | }) |
| 789 | } |
| 790 | if m.supportedVersion != 0 { |
| 791 | exts.AddUint16(extensionSupportedVersions) |
| 792 | exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 793 | exts.AddUint16(m.supportedVersion) |
| 794 | }) |
| 795 | } |
| 796 | if m.serverShare.group != 0 { |
| 797 | exts.AddUint16(extensionKeyShare) |
| 798 | exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 799 | exts.AddUint16(uint16(m.serverShare.group)) |
| 800 | exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) { |
| 801 | exts.AddBytes(m.serverShare.data) |
| 802 | }) |
| 803 | }) |
nothing calls this directly
no test coverage detected