parse server config sent in the SHLO in client CryptoSetup

This commit is contained in:
Marten Seemann
2016-11-10 18:33:24 +07:00
parent dbee83b8de
commit b58bc8cffd
3 changed files with 47 additions and 8 deletions

View File

@@ -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
}

View File

@@ -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() {

View File

@@ -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() {