forked from quic-go/quic-go
parse server config sent in the SHLO in client CryptoSetup
This commit is contained in:
@@ -82,13 +82,24 @@ func (h *cryptoSetupClient) HandleCryptoStream() error {
|
|||||||
|
|
||||||
func (h *cryptoSetupClient) handleREJMessage(cryptoData map[Tag][]byte) error {
|
func (h *cryptoSetupClient) handleREJMessage(cryptoData map[Tag][]byte) error {
|
||||||
utils.Debugf("Got REJ:\n%s", printHandshakeMessage(cryptoData))
|
utils.Debugf("Got REJ:\n%s", printHandshakeMessage(cryptoData))
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
if stk, ok := cryptoData[TagSTK]; ok {
|
if stk, ok := cryptoData[TagSTK]; ok {
|
||||||
h.stk = stk
|
h.stk = stk
|
||||||
}
|
}
|
||||||
|
|
||||||
if sno, ok := cryptoData[TagSNO]; ok {
|
if sno, ok := cryptoData[TagSNO]; ok {
|
||||||
h.sno = sno
|
h.sno = sno
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if scfg, ok := cryptoData[TagSCFG]; ok {
|
||||||
|
h.serverConfig, err = parseServerConfig(scfg)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,29 @@ var _ = Describe("Crypto setup", func() {
|
|||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(cs.sno).To(Equal(nonc))
|
Expect(cs.sno).To(Equal(nonc))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Context("Reading server configs", func() {
|
||||||
|
It("reads a server config", func() {
|
||||||
|
b := &bytes.Buffer{}
|
||||||
|
scfg := getDefaultServerConfigClient()
|
||||||
|
WriteHandshakeMessage(b, TagSCFG, scfg)
|
||||||
|
tagMap[TagSCFG] = b.Bytes()
|
||||||
|
err := cs.handleREJMessage(tagMap)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(cs.serverConfig).ToNot(BeNil())
|
||||||
|
Expect(cs.serverConfig.ID).To(Equal(scfg[TagSCID]))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("passes on errors from reading the server config", func() {
|
||||||
|
b := &bytes.Buffer{}
|
||||||
|
WriteHandshakeMessage(b, TagSHLO, make(map[Tag][]byte))
|
||||||
|
tagMap[TagSCFG] = b.Bytes()
|
||||||
|
_, origErr := parseServerConfig(b.Bytes())
|
||||||
|
err := cs.handleREJMessage(tagMap)
|
||||||
|
Expect(err).To(HaveOccurred())
|
||||||
|
Expect(err).To(MatchError(origErr))
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("CHLO generation", func() {
|
Context("CHLO generation", func() {
|
||||||
|
|||||||
@@ -9,18 +9,23 @@ import (
|
|||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// This tagMap can be passed to parseValues and is garantueed to not cause any errors
|
||||||
|
func getDefaultServerConfigClient() map[Tag][]byte {
|
||||||
|
return map[Tag][]byte{
|
||||||
|
TagSCID: bytes.Repeat([]byte{'F'}, 16),
|
||||||
|
TagKEXS: []byte("C255"),
|
||||||
|
TagAEAD: []byte("AESG"),
|
||||||
|
TagPUBS: bytes.Repeat([]byte{0}, 35),
|
||||||
|
TagOBIT: bytes.Repeat([]byte{0}, 8),
|
||||||
|
TagEXPY: bytes.Repeat([]byte{0}, 8),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var _ = Describe("Server Config", func() {
|
var _ = Describe("Server Config", func() {
|
||||||
var tagMap map[Tag][]byte
|
var tagMap map[Tag][]byte
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
// This tagMap can be passed to parseValues and doesn't cause any errors
|
tagMap = getDefaultServerConfigClient()
|
||||||
tagMap = make(map[Tag][]byte)
|
|
||||||
tagMap[TagSCID] = bytes.Repeat([]byte{'F'}, 16)
|
|
||||||
tagMap[TagKEXS] = []byte("C255")
|
|
||||||
tagMap[TagAEAD] = []byte("AESG")
|
|
||||||
tagMap[TagPUBS] = bytes.Repeat([]byte{0}, 35)
|
|
||||||
tagMap[TagOBIT] = bytes.Repeat([]byte{0}, 8)
|
|
||||||
tagMap[TagEXPY] = bytes.Repeat([]byte{0}, 8)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
It("returns the parsed server config", func() {
|
It("returns the parsed server config", func() {
|
||||||
|
|||||||
Reference in New Issue
Block a user