From 21c6a015dea10f19b4602b4410fd14d5a65b0fb5 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Mon, 28 Nov 2016 19:52:23 +0700 Subject: [PATCH] create ServerConfigs with random OBIT value fixes #356 --- handshake/server_config.go | 8 +++++++- handshake/server_config_test.go | 20 +++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/handshake/server_config.go b/handshake/server_config.go index 1a8371d4..e56686c8 100644 --- a/handshake/server_config.go +++ b/handshake/server_config.go @@ -28,6 +28,12 @@ func NewServerConfig(kex crypto.KeyExchange, signer crypto.Signer) (*ServerConfi if _, err = rand.Read(stkSecret); err != nil { return nil, err } + + obit := make([]byte, 8) + if _, err = rand.Read(obit); err != nil { + return nil, err + } + stkSource, err := crypto.NewStkSource(stkSecret) if err != nil { return nil, err @@ -35,7 +41,7 @@ func NewServerConfig(kex crypto.KeyExchange, signer crypto.Signer) (*ServerConfi return &ServerConfig{ ID: id, - obit: []byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7}, + obit: obit, kex: kex, signer: signer, stkSource: stkSource, diff --git a/handshake/server_config_test.go b/handshake/server_config_test.go index bdaba4e8..508e8a6d 100644 --- a/handshake/server_config_test.go +++ b/handshake/server_config_test.go @@ -11,24 +11,34 @@ import ( var _ = Describe("ServerConfig", func() { var ( - kex crypto.KeyExchange - scfg *ServerConfig + kex crypto.KeyExchange ) BeforeEach(func() { var err error kex, err = crypto.NewCurve25519KEX() Expect(err).NotTo(HaveOccurred()) - scfg, err = NewServerConfig(kex, nil) - Expect(err).NotTo(HaveOccurred()) + }) + + It("generates a random ID and OBIT", func() { + scfg1, err := NewServerConfig(kex, nil) + Expect(err).ToNot(HaveOccurred()) + scfg2, err := NewServerConfig(kex, nil) + Expect(err).ToNot(HaveOccurred()) + Expect(scfg1.ID).ToNot(Equal(scfg2.ID)) + Expect(scfg1.obit).ToNot(Equal(scfg2.obit)) }) It("gets the proper binary representation", func() { + scfg, err := NewServerConfig(kex, nil) + Expect(err).NotTo(HaveOccurred()) expected := bytes.NewBuffer([]byte{0x53, 0x43, 0x46, 0x47, 0x6, 0x0, 0x0, 0x0, 0x41, 0x45, 0x41, 0x44, 0x4, 0x0, 0x0, 0x0, 0x53, 0x43, 0x49, 0x44, 0x14, 0x0, 0x0, 0x0, 0x50, 0x55, 0x42, 0x53, 0x37, 0x0, 0x0, 0x0, 0x4b, 0x45, 0x58, 0x53, 0x3b, 0x0, 0x0, 0x0, 0x4f, 0x42, 0x49, 0x54, 0x43, 0x0, 0x0, 0x0, 0x45, 0x58, 0x50, 0x59, 0x4b, 0x0, 0x0, 0x0, 0x41, 0x45, 0x53, 0x47}) expected.Write(scfg.ID) expected.Write([]byte{0x20, 0x0, 0x0}) expected.Write(kex.PublicKey()) - expected.Write([]byte{0x43, 0x32, 0x35, 0x35, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}) + expected.Write([]byte{0x43, 0x32, 0x35, 0x35}) + expected.Write(scfg.obit) + expected.Write([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}) Expect(scfg.Get()).To(Equal(expected.Bytes())) }) })