From 7609246b45c0fa31693bdf59ab6a1baa114a3e07 Mon Sep 17 00:00:00 2001 From: Lucas Clemente Date: Tue, 10 May 2016 11:05:52 +0200 Subject: [PATCH] re-add support for version 30 fixes #72 --- README.md | 2 +- handshake/crypto_setup.go | 7 ++++++- handshake/crypto_setup_test.go | 7 +++++++ protocol/version.go | 2 +- protocol/version_test.go | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 02d2099f..9cba715d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This is very much an incomplete, buggy, unperformant and insecure work in progre Done: -- Basic protocol with support for QUIC version 31 and 32 +- Basic protocol with support for QUIC version 30, 31 and 32 - HTTP/2 support - Crypto (RSA for signing, curve25519 for KEX, chacha20-poly1305 as cipher) - Basic loss detection (currently only fast retransmission) & retransmission diff --git a/handshake/crypto_setup.go b/handshake/crypto_setup.go index 3668e9ab..084bd180 100644 --- a/handshake/crypto_setup.go +++ b/handshake/crypto_setup.go @@ -165,7 +165,12 @@ func (h *CryptoSetup) isInchoateCHLO(cryptoData map[Tag][]byte) bool { } func (h *CryptoSetup) handleInchoateCHLO(sni string, data []byte) ([]byte, error) { - proof, err := h.scfg.Sign(sni, data) + var chloOrNil []byte + if h.version > protocol.VersionNumber(30) { + chloOrNil = data + } + + proof, err := h.scfg.Sign(sni, chloOrNil) if err != nil { return nil, err } diff --git a/handshake/crypto_setup_test.go b/handshake/crypto_setup_test.go index 40f6d0ca..39b264f2 100644 --- a/handshake/crypto_setup_test.go +++ b/handshake/crypto_setup_test.go @@ -133,6 +133,13 @@ var _ = Describe("Crypto setup", func() { Expect(signer.gotCHLO).To(BeTrue()) }) + It("generates REJ messages for version 30", func() { + cs.version = protocol.VersionNumber(30) + _, err := cs.handleInchoateCHLO("", sampleCHLO) + Expect(err).ToNot(HaveOccurred()) + Expect(signer.gotCHLO).To(BeFalse()) + }) + It("generates SHLO messages", func() { response, err := cs.handleCHLO("", []byte("chlo-data"), map[Tag][]byte{ TagPUBS: []byte("pubs-c"), diff --git a/protocol/version.go b/protocol/version.go index 90329ff2..990ee97a 100644 --- a/protocol/version.go +++ b/protocol/version.go @@ -11,7 +11,7 @@ type VersionNumber int // SupportedVersions lists the versions that the server supports var SupportedVersions = []VersionNumber{ - 31, 32, + 30, 31, 32, } // SupportedVersionsAsTags is needed for the SHLO crypto message diff --git a/protocol/version_test.go b/protocol/version_test.go index 9efc14f2..f85967e3 100644 --- a/protocol/version_test.go +++ b/protocol/version_test.go @@ -19,7 +19,7 @@ var _ = Describe("Version", func() { }) It("has proper tag list", func() { - Expect(protocol.SupportedVersionsAsTags).To(Equal([]byte("Q031Q032"))) + Expect(protocol.SupportedVersionsAsTags).To(Equal([]byte("Q030Q031Q032"))) }) It("recognizes supported versions", func() {