| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | using System;using Renci.SshNet.Common;namespace Renci.SshNet.Security{    internal sealed class GroupExchangeHashData : SshData    {        private byte[] _serverVersion;        private byte[] _clientVersion;        private byte[] _prime;        private byte[] _subGroup;        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 uint MinimumGroupSize { get; set; }        public uint PreferredGroupSize { get; set; }        public uint MaximumGroupSize { get; set; }        public BigInteger Prime        {            private get { return _prime.ToBigInteger(); }            set { _prime = value.ToByteArray().Reverse(); }        }        public BigInteger SubGroup        {            private get { return _subGroup.ToBigInteger(); }            set { _subGroup = value.ToByteArray().Reverse(); }        }        public byte[] ClientExchangeValue { get; set; }        public byte[] ServerExchangeValue { get; set; }        public byte[] SharedKey { get; set; }        /// <summary>        /// Gets the size of the message in bytes.        /// </summary>        /// <value>        /// The size of the messages in bytes.        /// </value>        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; // MinimumGroupSize                capacity += 4; // PreferredGroupSize                capacity += 4; // MaximumGroupSize                capacity += 4; // Prime length                capacity += _prime.Length; // Prime                capacity += 4; // SubGroup length                capacity += _subGroup.Length; // SubGroup                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);            Write(MinimumGroupSize);            Write(PreferredGroupSize);            Write(MaximumGroupSize);            WriteBinaryString(_prime);            WriteBinaryString(_subGroup);            WriteBinaryString(ClientExchangeValue);            WriteBinaryString(ServerExchangeValue);            WriteBinaryString(SharedKey);        }    }}
 |