()
| 619 | } |
| 620 | |
| 621 | func (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 | }) |
no test coverage detected