type SessionState … // Bytes encodes the session, including any private fields, so that it can be // parsed by [ParseSessionState]. The encoding contains secret values critical // to the security of future and possibly past sessions. // // The specific encoding should be considered opaque and may change incompatibly // between Go versions. func (s *SessionState) Bytes() ([]byte, error) { … } func certificatesToBytesSlice(certs []*x509.Certificate) [][]byte { … } // ParseSessionState parses a [SessionState] encoded by [SessionState.Bytes]. func ParseSessionState(data []byte) (*SessionState, error) { … } // sessionState returns a partially filled-out [SessionState] with information // from the current connection. func (c *Conn) sessionState() *SessionState { … } // EncryptTicket encrypts a ticket with the [Config]'s configured (or default) // session ticket keys. It can be used as a [Config.WrapSession] implementation. func (c *Config) EncryptTicket(cs ConnectionState, ss *SessionState) ([]byte, error) { … } func (c *Config) encryptTicket(state []byte, ticketKeys []ticketKey) ([]byte, error) { … } // DecryptTicket decrypts a ticket encrypted by [Config.EncryptTicket]. It can // be used as a [Config.UnwrapSession] implementation. // // If the ticket can't be decrypted or parsed, DecryptTicket returns (nil, nil). func (c *Config) DecryptTicket(identity []byte, cs ConnectionState) (*SessionState, error) { … } func (c *Config) decryptTicket(encrypted []byte, ticketKeys []ticketKey) []byte { … } type ClientSessionState … // ResumptionState returns the session ticket sent by the server (also known as // the session's identity) and the state necessary to resume this session. // // It can be called by [ClientSessionCache.Put] to serialize (with // [SessionState.Bytes]) and store the session. func (cs *ClientSessionState) ResumptionState() (ticket []byte, state *SessionState, err error) { … } // NewResumptionState returns a state value that can be returned by // [ClientSessionCache.Get] to resume a previous session. // // state needs to be returned by [ParseSessionState], and the ticket and session // state must have been returned by [ClientSessionState.ResumptionState]. func NewResumptionState(ticket []byte, state *SessionState) (*ClientSessionState, error) { … }