diff --git a/src/Renci.SshNet/Security/KeyExchange.cs b/src/Renci.SshNet/Security/KeyExchange.cs index 05b1459c3..834b71e24 100644 --- a/src/Renci.SshNet/Security/KeyExchange.cs +++ b/src/Renci.SshNet/Security/KeyExchange.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; @@ -530,9 +529,7 @@ protected void SendMessage(Message message) /// private byte[] GenerateSessionKey(byte[] sharedKey, byte[] exchangeHash, byte[] key, int size) { - var result = new List(key); - - while (size > result.Count) + while (key.Length < size) { var sessionKeyAdjustment = new SessionKeyAdjustment { @@ -541,10 +538,10 @@ private byte[] GenerateSessionKey(byte[] sharedKey, byte[] exchangeHash, byte[] Key = key, }; - result.AddRange(Hash(sessionKeyAdjustment.GetBytes())); + key = key.Concat(Hash(sessionKeyAdjustment.GetBytes())); } - return result.ToArray(); + return key; } /// diff --git a/test/Renci.SshNet.IntegrationTests/HmacTests.cs b/test/Renci.SshNet.IntegrationTests/HmacTests.cs index 261b17a1a..e33f3fa8a 100644 --- a/test/Renci.SshNet.IntegrationTests/HmacTests.cs +++ b/test/Renci.SshNet.IntegrationTests/HmacTests.cs @@ -40,6 +40,22 @@ public void HmacSha2_512() DoTest(MessageAuthenticationCodeAlgorithm.HmacSha2_512); } + [TestMethod] + public void HmacSha2_512_ShortKexOutput() + { + _remoteSshdConfig.ClearMessageAuthenticationCodeAlgorithms() + .AddMessageAuthenticationCodeAlgorithm(MessageAuthenticationCodeAlgorithm.HmacSha2_512) + .ClearKeyExchangeAlgorithms() + .AddKeyExchangeAlgorithm(KeyExchangeAlgorithm.DiffieHellmanGroupExchangeSha1) + .Update() + .Restart(); + + using (var client = new SshClient(_connectionInfoFactory.Create())) + { + client.Connect(); + client.Disconnect(); + } + } [TestMethod] public void HmacSha1_Etm()