From 1031ad52884cc2bf26fabdb8fe346b6fef183fc2 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 8 Nov 2016 17:40:03 +0700 Subject: [PATCH] read SHLOs in cryptoSetupCleint --- handshake/crypto_setup_client.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/handshake/crypto_setup_client.go b/handshake/crypto_setup_client.go index 688f3b000..128b7ec30 100644 --- a/handshake/crypto_setup_client.go +++ b/handshake/crypto_setup_client.go @@ -17,7 +17,7 @@ type cryptoSetupClient struct { cryptoStream utils.Stream - hasServerConfig bool + serverConfig *serverConfigClient } var _ crypto.AEAD = &cryptoSetupClient{} @@ -43,13 +43,25 @@ func (h *cryptoSetupClient) HandleCryptoStream() error { } for { - var chloData bytes.Buffer - messageTag, cryptoData, err := ParseHandshakeMessage(io.TeeReader(h.cryptoStream, &chloData)) - _ = cryptoData - utils.Debugf("Received message on Crypto Stream. MessageTag: %#v", messageTag) + var shloData bytes.Buffer + messageTag, cryptoData, err := ParseHandshakeMessage(io.TeeReader(h.cryptoStream, &shloData)) if err != nil { return qerr.HandshakeFailed } + + if messageTag == TagSHLO { + utils.Debugf("Got SHLO:\n%s", printHandshakeMessage(cryptoData)) + } else if messageTag == TagREJ { + utils.Debugf("Got REJ:\n%s", printHandshakeMessage(cryptoData)) + if scfg, ok := cryptoData[TagSCFG]; ok { + h.serverConfig, err = parseServerConfig(scfg) + if err != nil { + return err + } + } + } else { + return qerr.InvalidCryptoMessageType + } } }