using System; using Renci.SshNet.Common; namespace Renci.SshNet.Security { internal sealed class KeyExchangeHashData : SshData { private byte[] _serverVersion; private byte[] _clientVersion; public string ServerVersion { private get { return Utf8.GetString(_serverVersion, 0, _serverVersion.Length); } set { _serverVersion = Utf8.GetBytes(value); } } public string ClientVersion { private get { return Utf8.GetString(_clientVersion, 0, _clientVersion.Length); } set { _clientVersion = Utf8.GetBytes(value); } } public byte[] ClientPayload { get; set; } public byte[] ServerPayload { get; set; } public byte[] HostKey { get; set; } public byte[] ClientExchangeValue { get; set; } public byte[] ServerExchangeValue { get; set; } public byte[] SharedKey { get; set; } /// /// Gets the size of the message in bytes. /// /// /// The size of the messages in bytes. /// protected override int BufferCapacity { get { var capacity = base.BufferCapacity; capacity += 4; // ClientVersion length capacity += _clientVersion.Length; // ClientVersion capacity += 4; // ServerVersion length capacity += _serverVersion.Length; // ServerVersion capacity += 4; // ClientPayload length capacity += ClientPayload.Length; // ClientPayload capacity += 4; // ServerPayload length capacity += ServerPayload.Length; // ServerPayload capacity += 4; // HostKey length capacity += HostKey.Length; // HostKey capacity += 4; // ClientExchangeValue length capacity += ClientExchangeValue.Length; // ClientExchangeValue capacity += 4; // ServerExchangeValue length capacity += ServerExchangeValue.Length; // ServerExchangeValue capacity += 4; // SharedKey length capacity += SharedKey.Length; // SharedKey return capacity; } } protected override void LoadData() { throw new NotImplementedException(); } protected override void SaveData() { WriteBinaryString(_clientVersion); WriteBinaryString(_serverVersion); WriteBinaryString(ClientPayload); WriteBinaryString(ServerPayload); WriteBinaryString(HostKey); WriteBinaryString(ClientExchangeValue); WriteBinaryString(ServerExchangeValue); WriteBinaryString(SharedKey); } } }