drop 0-RTT read keys after 3 PTO

This commit is contained in:
Marten Seemann
2020-02-18 17:51:05 +07:00
parent e01995041e
commit d08c2145a4

View File

@@ -8,6 +8,7 @@ import (
"io"
"net"
"sync"
"time"
"github.com/lucas-clemente/quic-go/internal/congestion"
"github.com/lucas-clemente/quic-go/internal/protocol"
@@ -95,6 +96,8 @@ type cryptoSetup struct {
mutex sync.Mutex // protects all members below
handshakeCompleteTime time.Time
readEncLevel protocol.EncryptionLevel
writeEncLevel protocol.EncryptionLevel
@@ -244,6 +247,9 @@ func (h *cryptoSetup) RunHandshake() {
select {
case <-handshakeComplete: // return when the handshake is done
h.mutex.Lock()
h.handshakeCompleteTime = time.Now()
h.mutex.Unlock()
h.runner.OnHandshakeComplete()
case <-h.closeChan:
close(h.messageChan)
@@ -764,6 +770,11 @@ func (h *cryptoSetup) Get1RTTOpener() (ShortHeaderOpener, error) {
h.mutex.Lock()
defer h.mutex.Unlock()
if h.zeroRTTOpener != nil && time.Since(h.handshakeCompleteTime) > 3*h.rttStats.PTO(true) {
h.zeroRTTOpener = nil
h.logger.Debugf("Dropping 0-RTT keys.")
}
if !h.has1RTTOpener {
return nil, ErrKeysNotYetAvailable
}