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 {
|
||||
utils.Debugf("Got REJ:\n%s", printHandshakeMessage(cryptoData))
|
||||
|
||||
var err error
|
||||
|
||||
if stk, ok := cryptoData[TagSTK]; ok {
|
||||
h.stk = stk
|
||||
}
|
||||
|
||||
if sno, ok := cryptoData[TagSNO]; ok {
|
||||
h.sno = sno
|
||||
}
|
||||
|
||||
if scfg, ok := cryptoData[TagSCFG]; ok {
|
||||
h.serverConfig, err = parseServerConfig(scfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -62,6 +62,29 @@ var _ = Describe("Crypto setup", func() {
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
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() {
|
||||
|
||||
@@ -9,18 +9,23 @@ import (
|
||||
. "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 tagMap map[Tag][]byte
|
||||
|
||||
BeforeEach(func() {
|
||||
// This tagMap can be passed to parseValues and doesn't cause any errors
|
||||
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)
|
||||
tagMap = getDefaultServerConfigClient()
|
||||
})
|
||||
|
||||
It("returns the parsed server config", func() {
|
||||
|
||||
Reference in New Issue
Block a user