forked from quic-go/quic-go
move reading of stateless reset tokens to the transport parameter struct
This commit is contained in:
@@ -107,25 +107,13 @@ func (h *extensionHandlerClient) Receive(hType mint.HandshakeType, el *mint.Exte
|
||||
}
|
||||
}
|
||||
|
||||
// check that the server sent the stateless reset token
|
||||
var foundStatelessResetToken bool
|
||||
for _, p := range eetp.Parameters {
|
||||
if p.Parameter == statelessResetTokenParameterID {
|
||||
if len(p.Value) != 16 {
|
||||
return fmt.Errorf("wrong length for stateless_reset_token: %d (expected 16)", len(p.Value))
|
||||
}
|
||||
foundStatelessResetToken = true
|
||||
// TODO: handle this value
|
||||
}
|
||||
}
|
||||
if !foundStatelessResetToken {
|
||||
// TODO: return the right error here
|
||||
return errors.New("server didn't sent stateless_reset_token")
|
||||
}
|
||||
params, err := readTransportParameters(eetp.Parameters)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(params.StatelessResetToken) == 0 {
|
||||
return errors.New("server didn't sent stateless_reset_token")
|
||||
}
|
||||
h.logger.Debugf("Received Transport Parameters: %s", params)
|
||||
h.paramsChan <- *params
|
||||
return nil
|
||||
|
||||
@@ -135,13 +135,6 @@ var _ = Describe("TLS Extension Handler, for the client", func() {
|
||||
Expect(err).To(MatchError("server didn't sent stateless_reset_token"))
|
||||
})
|
||||
|
||||
It("errors if the stateless reset token has the wrong length", func() {
|
||||
parameters[statelessResetTokenParameterID] = bytes.Repeat([]byte{0}, 15) // should be 16
|
||||
addEncryptedExtensionsWithParameters(parameters)
|
||||
err := handler.Receive(mint.HandshakeTypeEncryptedExtensions, &el)
|
||||
Expect(err).To(MatchError("wrong length for stateless_reset_token: 15 (expected 16)"))
|
||||
})
|
||||
|
||||
Context("Version Negotiation", func() {
|
||||
It("accepts a valid version negotiation", func() {
|
||||
done := make(chan struct{})
|
||||
|
||||
@@ -96,16 +96,14 @@ func (h *extensionHandlerServer) Receive(hType mint.HandshakeType, el *mint.Exte
|
||||
return qerr.Error(qerr.VersionNegotiationMismatch, "Client should have used the initial version")
|
||||
}
|
||||
|
||||
for _, p := range chtp.Parameters {
|
||||
if p.Parameter == statelessResetTokenParameterID {
|
||||
// TODO: return the correct error type
|
||||
return errors.New("client sent a stateless reset token")
|
||||
}
|
||||
}
|
||||
params, err := readTransportParameters(chtp.Parameters)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(params.StatelessResetToken) != 0 {
|
||||
// TODO: return the correct error type
|
||||
return errors.New("client sent a stateless reset token")
|
||||
}
|
||||
h.logger.Debugf("Received Transport Parameters: %s", params)
|
||||
h.paramsChan <- *params
|
||||
return nil
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package handshake
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
|
||||
"github.com/bifurcation/mint"
|
||||
@@ -118,7 +119,7 @@ var _ = Describe("TLS Extension Handler, for the server", func() {
|
||||
})
|
||||
|
||||
It("rejects messages that contain a stateless reset token", func() {
|
||||
parameters[statelessResetTokenParameterID] = []byte("reset")
|
||||
parameters[statelessResetTokenParameterID] = bytes.Repeat([]byte{0}, 16)
|
||||
addClientHelloWithParameters(parameters)
|
||||
err := handler.Receive(mint.HandshakeTypeClientHello, &el)
|
||||
Expect(err).To(MatchError("client sent a stateless reset token"))
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package handshake
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"time"
|
||||
|
||||
"github.com/lucas-clemente/quic-go/internal/protocol"
|
||||
@@ -122,9 +123,13 @@ var _ = Describe("Transport Parameters", func() {
|
||||
})
|
||||
|
||||
Context("parsing", func() {
|
||||
var parameters map[transportParameterID][]byte
|
||||
var (
|
||||
parameters map[transportParameterID][]byte
|
||||
statelessResetToken []byte
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
statelessResetToken = bytes.Repeat([]byte{42}, 16)
|
||||
parameters = map[transportParameterID][]byte{
|
||||
initialMaxStreamDataParameterID: {0x11, 0x22, 0x33, 0x44},
|
||||
initialMaxDataParameterID: {0x22, 0x33, 0x44, 0x55},
|
||||
@@ -133,6 +138,7 @@ var _ = Describe("Transport Parameters", func() {
|
||||
idleTimeoutParameterID: {0x13, 0x37},
|
||||
maxPacketSizeParameterID: {0x73, 0x31},
|
||||
disableMigrationParameterID: {},
|
||||
statelessResetTokenParameterID: statelessResetToken,
|
||||
}
|
||||
})
|
||||
It("reads parameters", func() {
|
||||
@@ -146,6 +152,7 @@ var _ = Describe("Transport Parameters", func() {
|
||||
Expect(params.OmitConnectionID).To(BeFalse())
|
||||
Expect(params.MaxPacketSize).To(Equal(protocol.ByteCount(0x7331)))
|
||||
Expect(params.DisableMigration).To(BeTrue())
|
||||
Expect(params.StatelessResetToken).To(Equal(statelessResetToken))
|
||||
})
|
||||
|
||||
It("rejects the parameters if the idle_timeout is missing", func() {
|
||||
@@ -211,6 +218,12 @@ var _ = Describe("Transport Parameters", func() {
|
||||
Expect(err).To(MatchError("wrong length for disable_migration: 1 (expected empty)"))
|
||||
})
|
||||
|
||||
It("rejects the parameters if the stateless_reset_token has the wrong length", func() {
|
||||
parameters[statelessResetTokenParameterID] = statelessResetToken[1:]
|
||||
_, err := readTransportParameters(paramsMapToList(parameters))
|
||||
Expect(err).To(MatchError("wrong length for stateless_reset_token: 15 (expected 16)"))
|
||||
})
|
||||
|
||||
It("ignores unknown parameters", func() {
|
||||
parameters[1337] = []byte{42}
|
||||
_, err := readTransportParameters(paramsMapToList(parameters))
|
||||
|
||||
@@ -144,6 +144,11 @@ func readTransportParameters(paramsList []transportParameter) (*TransportParamet
|
||||
return nil, fmt.Errorf("wrong length for disable_migration: %d (expected empty)", len(p.Value))
|
||||
}
|
||||
params.DisableMigration = true
|
||||
case statelessResetTokenParameterID:
|
||||
if len(p.Value) != 16 {
|
||||
return nil, fmt.Errorf("wrong length for stateless_reset_token: %d (expected 16)", len(p.Value))
|
||||
}
|
||||
params.StatelessResetToken = p.Value
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user