KeyExchangeInitMessage
Represents SSH_MSG_KEXINIT message.
            
                using Renci.SshNet.Abstractions;
namespace Renci.SshNet.Messages.Transport
{
    public class KeyExchangeInitMessage : Message, IKeyExchangedAllowed
    {
        public override string MessageName => "SSH_MSG_KEXINIT";
        public override byte MessageNumber => 20;
        public byte[] Cookie { get; set; }
        public string[] KeyExchangeAlgorithms { get; set; }
        public string[] ServerHostKeyAlgorithms { get; set; }
        public string[] EncryptionAlgorithmsClientToServer { get; set; }
        public string[] EncryptionAlgorithmsServerToClient { get; set; }
        public string[] MacAlgorithmsClientToServer { get; set; }
        public string[] MacAlgorithmsServerToClient { get; set; }
        public string[] CompressionAlgorithmsClientToServer { get; set; }
        public string[] CompressionAlgorithmsServerToClient { get; set; }
        public string[] LanguagesClientToServer { get; set; }
        public string[] LanguagesServerToClient { get; set; }
        public bool FirstKexPacketFollows { get; set; }
        public uint Reserved { get; set; }
        protected override int BufferCapacity => -1;
        public KeyExchangeInitMessage()
        {
            Cookie = CryptoAbstraction.GenerateRandom(16);
        }
        protected override void LoadData()
        {
            Cookie = ReadBytes(16);
            KeyExchangeAlgorithms = ReadNamesList();
            ServerHostKeyAlgorithms = ReadNamesList();
            EncryptionAlgorithmsClientToServer = ReadNamesList();
            EncryptionAlgorithmsServerToClient = ReadNamesList();
            MacAlgorithmsClientToServer = ReadNamesList();
            MacAlgorithmsServerToClient = ReadNamesList();
            CompressionAlgorithmsClientToServer = ReadNamesList();
            CompressionAlgorithmsServerToClient = ReadNamesList();
            LanguagesClientToServer = ReadNamesList();
            LanguagesServerToClient = ReadNamesList();
            FirstKexPacketFollows = ReadBoolean();
            Reserved = ReadUInt32();
        }
        protected override void SaveData()
        {
            Write(Cookie);
            Write(KeyExchangeAlgorithms);
            Write(ServerHostKeyAlgorithms);
            Write(EncryptionAlgorithmsClientToServer);
            Write(EncryptionAlgorithmsServerToClient);
            Write(MacAlgorithmsClientToServer);
            Write(MacAlgorithmsServerToClient);
            Write(CompressionAlgorithmsClientToServer);
            Write(CompressionAlgorithmsServerToClient);
            Write(LanguagesClientToServer);
            Write(LanguagesServerToClient);
            Write(FirstKexPacketFollows);
            Write(Reserved);
        }
        internal override void Process(Session session)
        {
            session.OnKeyExchangeInitReceived(this);
        }
    }
}