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

Method sendSessionTickets

handshake_server_tls13.go:706–763  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

704}
705
706func (hs *serverHandshakeStateTLS13) sendSessionTickets() error {
707 c := hs.c
708
709 hs.clientFinished = hs.suite.finishedHash(c.in.trafficSecret, hs.transcript)
710 finishedMsg := &finishedMsg{
711 verifyData: hs.clientFinished,
712 }
713 hs.transcript.Write(finishedMsg.marshal())
714
715 if !hs.shouldSendSessionTickets() {
716 return nil
717 }
718
719 resumptionSecret := hs.suite.deriveSecret(hs.masterSecret,
720 resumptionLabel, hs.transcript)
721
722 m := new(newSessionTicketMsgTLS13)
723
724 var certsFromClient [][]byte
725 for _, cert := range c.peerCertificates {
726 certsFromClient = append(certsFromClient, cert.Raw)
727 }
728 state := sessionStateTLS13{
729 cipherSuite: hs.suite.id,
730 createdAt: uint64(c.config.time().Unix()),
731 resumptionSecret: resumptionSecret,
732 certificate: Certificate{
733 Certificate: certsFromClient,
734 OCSPStaple: c.ocspResponse,
735 SignedCertificateTimestamps: c.scts,
736 },
737 }
738 var err error
739 m.label, err = c.encryptTicket(state.marshal())
740 if err != nil {
741 return err
742 }
743 m.lifetime = uint32(maxSessionTicketLifetime / time.Second)
744
745 // ticket_age_add is a random 32-bit value. See RFC 8446, section 4.6.1
746 // The value is not stored anywhere; we never need to check the ticket age
747 // because 0-RTT is not supported.
748 ageAdd := make([]byte, 4)
749 _, err = hs.c.config.rand().Read(ageAdd)
750 if err != nil {
751 return err
752 }
753 m.ageAdd = binary.LittleEndian.Uint32(ageAdd)
754
755 // ticket_nonce, which must be unique per connection, is always left at
756 // zero because we only ever send one ticket per connection.
757
758 if _, err := c.writeRecord(recordTypeHandshake, m.marshal()); err != nil {
759 return err
760 }
761
762 return nil
763}

Callers 2

sendServerFinishedMethod · 0.95
readClientCertificateMethod · 0.95

Calls 12

marshalMethod · 0.95
marshalMethod · 0.95
finishedHashMethod · 0.80
deriveSecretMethod · 0.80
timeMethod · 0.80
encryptTicketMethod · 0.80
randMethod · 0.80
writeRecordMethod · 0.80
marshalMethod · 0.65
WriteMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected