private void send_kexinit()
{
if(in_kex) return;
in_kex=true;
// byte SSH_MSG_KEXINIT(20)
// byte[16] cookie (random bytes)
// String kex_algorithms
// String server_host_key_algorithms
// String encryption_algorithms_client_to_server
// String encryption_algorithms_server_to_client
// String mac_algorithms_client_to_server
// String mac_algorithms_server_to_client
// String compression_algorithms_client_to_server
// String compression_algorithms_server_to_client
// String languages_client_to_server
// String languages_server_to_client
packet.reset();
buf.WriteByte((byte) SSH_MSG_KEXINIT);
lock(random)
{
random.fill(buf.buffer, buf.index, 16); buf.Skip(16);
}
buf.WriteString(getConfig("kex"));
buf.WriteString(getConfig("server_host_key"));
buf.WriteString(getConfig("cipher.c2s"));
buf.WriteString(getConfig("cipher.s2c"));
buf.WriteString(getConfig("mac.c2s"));
buf.WriteString(getConfig("mac.s2c"));
buf.WriteString(getConfig("compression.c2s"));
buf.WriteString(getConfig("compression.s2c"));
buf.WriteString(getConfig("lang.c2s"));
buf.WriteString(getConfig("lang.s2c"));
buf.WriteByte((byte)0);
buf.WriteInt(0);
buf.Offset = 5;
I_C=new byte[buf.Length];
buf.ReadByte(I_C);
write(packet);
}