move adding of stateless reset tokens to the transport parameter struct

This commit is contained in:
Marten Seemann
2018-08-19 11:11:50 +07:00
parent ad9618ef9e
commit 2c75b795ae
4 changed files with 13 additions and 12 deletions

View File

@@ -1,7 +1,6 @@
package handshake
import (
"bytes"
"errors"
"fmt"
@@ -50,11 +49,6 @@ func (h *extensionHandlerServer) Send(hType mint.HandshakeType, el *mint.Extensi
return nil
}
transportParams := append(
h.ourParams.getTransportParameters(),
// TODO(#855): generate a real token
transportParameter{statelessResetTokenParameterID, bytes.Repeat([]byte{42}, 16)},
)
supportedVersions := protocol.GetGreasedVersions(h.supportedVersions)
versions := make([]uint32, len(supportedVersions))
for i, v := range supportedVersions {
@@ -64,7 +58,7 @@ func (h *extensionHandlerServer) Send(hType mint.HandshakeType, el *mint.Extensi
data, err := syntax.Marshal(encryptedExtensionsTransportParameters{
NegotiatedVersion: uint32(h.version),
SupportedVersions: versions,
Parameters: transportParams,
Parameters: h.ourParams.getTransportParameters(),
})
if err != nil {
return err

View File

@@ -237,12 +237,13 @@ var _ = Describe("Transport Parameters", func() {
MaxBidiStreams: 0x1234,
MaxUniStreams: 0x4321,
DisableMigration: true,
StatelessResetToken: []byte("foobar"),
}
})
It("creates the parameters list", func() {
values := paramsListToMap(params.getTransportParameters())
Expect(values).To(HaveLen(7))
Expect(values).To(HaveLen(8))
Expect(values).To(HaveKeyWithValue(initialMaxStreamDataParameterID, []byte{0xde, 0xad, 0xbe, 0xef}))
Expect(values).To(HaveKeyWithValue(initialMaxDataParameterID, []byte{0xde, 0xca, 0xfb, 0xad}))
Expect(values).To(HaveKeyWithValue(initialMaxBidiStreamsParameterID, []byte{0x12, 0x34}))
@@ -250,6 +251,7 @@ var _ = Describe("Transport Parameters", func() {
Expect(values).To(HaveKeyWithValue(idleTimeoutParameterID, []byte{0xca, 0xfe}))
Expect(values).To(HaveKeyWithValue(maxPacketSizeParameterID, []byte{0x5, 0xac})) // 1452 = 0x5ac
Expect(values).To(HaveKeyWithValue(disableMigrationParameterID, []byte{}))
Expect(values).To(HaveKeyWithValue(statelessResetTokenParameterID, []byte("foobar")))
})
})
})

View File

@@ -29,7 +29,7 @@ type TransportParameters struct {
OmitConnectionID bool // only used for gQUIC
IdleTimeout time.Duration
DisableMigration bool // only used for IETF QUIC
StatelessResetToken []byte // only used for IETF QUIC
}
// readHelloMap reads the transport parameters from the tags sent in a gQUIC handshake message
@@ -179,6 +179,9 @@ func (p *TransportParameters) getTransportParameters() []transportParameter {
if p.DisableMigration {
params = append(params, transportParameter{disableMigrationParameterID, nil})
}
if len(p.StatelessResetToken) > 0 {
params = append(params, transportParameter{statelessResetTokenParameterID, p.StatelessResetToken})
}
return params
}

View File

@@ -51,6 +51,8 @@ func newServerTLS(
MaxBidiStreams: uint16(config.MaxIncomingStreams),
MaxUniStreams: uint16(config.MaxIncomingUniStreams),
DisableMigration: true,
// TODO(#855): generate a real token
StatelessResetToken: bytes.Repeat([]byte{42}, 16),
}
mconf, err := tlsToMintConfig(tlsConf, protocol.PerspectiveServer)
if err != nil {