public void Authenticate(string username, string password) { PacketGeneral packet_auth = new PacketGeneral(Packet.SSH_MSG_USERAUTH_REQUEST); packet_auth.GetStreamWriter().WriteString("ssh-userauth"); SendPacket(crypto_encryptor, packet_auth); Packet packet = RecvPacket(crypto_decryptor); if (packet.Message == Packet.SSH_MSG_SERVICE_ACCEPT) { Console.WriteLine("SSH_MSG_SERVICE_ACCEPT"); } packet_auth = new PacketGeneral(50); NetworkByteWriter nbw_cache = packet_auth.GetStreamWriter(); //SSH_MSG_USERAUTH_REQUEST nbw_cache.WriteString(username); nbw_cache.WriteString("ssh-connection"); nbw_cache.WriteString("password"); nbw_cache.WriteByte((byte)0); nbw_cache.WriteString(password); SendPacket(crypto_encryptor, packet_auth); packet = RecvPacket(crypto_decryptor); if (Packet.SSH_MSG_USERAUTH_SUCCESS == packet.Message) { Console.WriteLine("oh ya!"); } }
public void KeyVerify(string algorithm, HashAlgorithm hash) { MemoryStream cache = new MemoryStream(); NetworkByteWriter nbr_cache = new NetworkByteWriter(cache); nbr_cache.WriteString(verify_v_c); nbr_cache.WriteString(verify_v_s); nbr_cache.WriteBlob(verify_i_c); nbr_cache.WriteBlob(verify_i_s); nbr_cache.WriteBlob(verify_k_s); nbr_cache.WriteMPInt(verify_e); nbr_cache.WriteMPInt(verify_f); nbr_cache.WriteMPInt(verify_k); nbr_cache.Flush(); if (algorithm == "ssh-rsa") { verify_h = hash.ComputeHash(cache.ToArray()); RSAParameters RSAKeyInfo = new RSAParameters(); { MemoryStream ms_tmp = new MemoryStream(verify_k_s); NetworkByteReader nbr_tmp = new NetworkByteReader(ms_tmp); string type = nbr_tmp.ReadString(); BigInteger rsa_e = nbr_tmp.ReadMPInt(); BigInteger rsa_n = nbr_tmp.ReadMPInt(); RSAKeyInfo.Modulus = NetworkByteUtils.BigIntegerToUnsignedArray(rsa_n); RSAKeyInfo.Exponent = NetworkByteUtils.BigIntegerToUnsignedArray(rsa_e); } byte[] rsa_signature_blob; { MemoryStream ms_tmp = new MemoryStream(verify_sig); NetworkByteReader nbr_tmp = new NetworkByteReader(ms_tmp); string type = nbr_tmp.ReadString(); rsa_signature_blob = nbr_tmp.ReadBlob(); } RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); RSA.ImportParameters(RSAKeyInfo); RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA); RSADeformatter.SetHashAlgorithm("SHA1"); byte[] xx2 = SHA1.Create().ComputeHash(verify_h); bool verify = RSADeformatter.VerifySignature(xx2, rsa_signature_blob); } }
public void OpenChannel(VideoTerminal x) { PacketGeneral packet_openchannel = new PacketGeneral(90); NetworkByteWriter nbw = packet_openchannel.GetStreamWriter(); nbw.WriteString("session"); nbw.WriteUInt32(0); nbw.WriteUInt32(1048576); nbw.WriteUInt32(16384); SendPacket(crypto_encryptor, packet_openchannel); Packet packet = RecvPacket(crypto_decryptor); NetworkByteReader nbr = packet.GenerateReader(); nbr.ReadByte(); uint recipient_channel = nbr.ReadUInt32(); uint sender_channel = nbr.ReadUInt32(); uint initial_window_size = nbr.ReadUInt32(); uint maximum_packet_size = nbr.ReadUInt32(); PacketGeneral packet_pty = new PacketGeneral(Packet.SSH_MSG_CHANNEL_REQUEST); nbw = packet_pty.GetStreamWriter(); nbw.WriteUInt32(recipient_channel); nbw.WriteString("pty-req"); nbw.WriteByte(0); nbw.WriteString("vt100"); nbw.WriteUInt32(80); nbw.WriteUInt32(24); nbw.WriteUInt32(640); nbw.WriteUInt32(480); nbw.WriteString(""); SendPacket(crypto_encryptor, packet_pty); PacketGeneral packet_shell = new PacketGeneral(Packet.SSH_MSG_CHANNEL_REQUEST); nbw = packet_shell.GetStreamWriter(); nbw.WriteUInt32(recipient_channel); nbw.WriteString("shell"); nbw.WriteByte(0); SendPacket(crypto_encryptor, packet_shell); while (true) { if (RecvAvailable()) { packet = RecvPacket(crypto_decryptor); switch (packet.Message) { case Packet.SSH_MSG_CHANNEL_WINDOW_ADJUST: break; case Packet.SSH_MSG_CHANNEL_DATA: PacketChannelData p = new PacketChannelData(packet); p.Parse(); x.HandleServerData(p.data); break; default: break; } } else { string data = x.GetClientData(); if (data.Length != 0) { PacketGeneral packet_key = new PacketGeneral(Packet.SSH_MSG_CHANNEL_DATA); nbw = packet_key.GetStreamWriter(); nbw.WriteUInt32(recipient_channel); nbw.WriteString(data); SendPacket(crypto_encryptor, packet_key); } } } }