From a1840b322176a87c585dfb8b680799b41f45682f Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Thu, 2 Jan 2020 14:36:25 +0800 Subject: [PATCH] fix unmarshaling of transport parameters from session tickets --- internal/handshake/crypto_setup.go | 8 +++++++- internal/handshake/transport_parameters.go | 3 +-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/internal/handshake/crypto_setup.go b/internal/handshake/crypto_setup.go index 9f5aa1c3a..c4ca769cc 100644 --- a/internal/handshake/crypto_setup.go +++ b/internal/handshake/crypto_setup.go @@ -491,7 +491,13 @@ func (h *cryptoSetup) accept0RTT(sessionTicketData []byte) bool { h.logger.Debugf("Unmarshaling transport parameters from session ticket failed: %s", err.Error()) return false } - return h.ourParams.ValidFor0RTT(&tp) + valid := h.ourParams.ValidFor0RTT(&tp) + if valid { + h.logger.Debugf("Accepting 0-RTT.") + } else { + h.logger.Debugf("Transport parameters changed. Rejecting 0-RTT.") + } + return valid } func (h *cryptoSetup) handlePostHandshakeMessage() { diff --git a/internal/handshake/transport_parameters.go b/internal/handshake/transport_parameters.go index 4ab0826f4..d97ee2d10 100644 --- a/internal/handshake/transport_parameters.go +++ b/internal/handshake/transport_parameters.go @@ -413,8 +413,7 @@ func (p *TransportParameters) UnmarshalFromSessionTicket(data []byte) error { if version != transportParameterMarshalingVersion { return fmt.Errorf("unknown transport parameter marshaling version: %d", version) } - tp := &TransportParameters{} - return tp.Unmarshal(data[len(data)-r.Len():], protocol.PerspectiveServer) + return p.Unmarshal(data[len(data)-r.Len():], protocol.PerspectiveServer) } // ValidFor0RTT checks if the transport parameters match those saved in the session ticket.