diff --git a/handshake/crypto_setup_client.go b/handshake/crypto_setup_client.go index a45dd670..9acde21b 100644 --- a/handshake/crypto_setup_client.go +++ b/handshake/crypto_setup_client.go @@ -170,6 +170,18 @@ func (h *cryptoSetupClient) getTags() map[Tag][]byte { binary.LittleEndian.PutUint32(versionTag, protocol.VersionNumberToTag(h.version)) tags[TagVER] = versionTag + if len(h.stk) > 0 { + tags[TagSTK] = h.stk + } + + if len(h.sno) > 0 { + tags[TagSNO] = h.sno + } + + if h.serverConfig != nil { + tags[TagSCID] = h.serverConfig.ID + } + return tags } diff --git a/handshake/crypto_setup_client_test.go b/handshake/crypto_setup_client_test.go index 3c798de9..2943e97c 100644 --- a/handshake/crypto_setup_client_test.go +++ b/handshake/crypto_setup_client_test.go @@ -106,6 +106,32 @@ var _ = Describe("Crypto setup", func() { Expect(tags[TagPDMD]).To(Equal([]byte("X509"))) Expect(tags[TagVER]).To(Equal([]byte("Q036"))) }) + + It("includes the server config id, if available", func() { + id := []byte("foobar") + cs.serverConfig = &serverConfigClient{ID: id} + tags := cs.getTags() + Expect(tags[TagSCID]).To(Equal(id)) + }) + + It("includes the source address token, if available", func() { + cs.stk = []byte("sourceaddresstoken") + tags := cs.getTags() + Expect(tags[TagSTK]).To(Equal(cs.stk)) + }) + + It("includes the server nonce, if available", func() { + cs.sno = []byte("foobar") + tags := cs.getTags() + Expect(tags[TagSNO]).To(Equal(cs.sno)) + }) + + It("doesn't include optional values, if not available", func() { + tags := cs.getTags() + Expect(tags).ToNot(HaveKey(TagSCID)) + Expect(tags).ToNot(HaveKey(TagSNO)) + Expect(tags).ToNot(HaveKey(TagSTK)) + }) }) Context("Diversification Nonces", func() {