From 28fd87877836da3774bba24f59c0b1756520b8d0 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 2 Jun 2020 16:01:50 +0700 Subject: [PATCH] add a unit test using the ChaCha20 test vector from the draft --- internal/handshake/updatable_aead_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/internal/handshake/updatable_aead_test.go b/internal/handshake/updatable_aead_test.go index ea2248443..2fc3d7340 100644 --- a/internal/handshake/updatable_aead_test.go +++ b/internal/handshake/updatable_aead_test.go @@ -9,12 +9,30 @@ import ( "github.com/lucas-clemente/quic-go/internal/congestion" "github.com/lucas-clemente/quic-go/internal/protocol" "github.com/lucas-clemente/quic-go/internal/utils" + "github.com/marten-seemann/qtls" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Updatable AEAD", func() { + It("ChaCha test vector from the draft", func() { + secret := splitHexString("9ac312a7f877468ebe69422748ad00a1 5443f18203a07d6060f688f30f21632b") + aead := newUpdatableAEAD(&congestion.RTTStats{}, nil, nil) + chacha := cipherSuites[2] + Expect(chacha.ID).To(Equal(qtls.TLS_CHACHA20_POLY1305_SHA256)) + aead.SetWriteKey(chacha, secret) + header := splitHexString("4200bff4") + const pnOffset = 1 + payloadOffset := len(header) + plaintext := splitHexString("01") + payload := aead.Seal(nil, plaintext, 654360564, header) + Expect(payload).To(Equal(splitHexString("655e5cd55c41f69080575d7999c25a5bfb"))) + packet := append(header, payload...) + aead.EncryptHeader(packet[pnOffset+4:pnOffset+4+16], &packet[0], packet[pnOffset:payloadOffset]) + Expect(packet).To(Equal(splitHexString("4cfe4189655e5cd55c41f69080575d7999c25a5bfb"))) + }) + for i := range cipherSuites { cs := cipherSuites[i]