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); } }
override public void Pack() { MemoryStream ms = new MemoryStream(); NetworkByteWriter nbw = new NetworkByteWriter(ms); nbw.WriteByte((byte)Message); nbw.WriteBytes(cookie); nbw.WriteNameList(kex_algorithms); nbw.WriteNameList(server_host_key_algorithms); nbw.WriteNameList(encryption_algorithms_client_to_server); nbw.WriteNameList(encryption_algorithms_server_to_client); nbw.WriteNameList(mac_algorithms_client_to_server); nbw.WriteNameList(mac_algorithms_server_to_client); nbw.WriteNameList(compression_algorithms_client_to_server); nbw.WriteNameList(compression_algorithms_server_to_client); nbw.WriteNameList(languages_client_to_server); nbw.WriteNameList(languages_server_to_client); nbw.WriteBoolean(first_kex_packet_follows); nbw.WriteUInt32(0); nbw.Flush(); SetPayload(ms.ToArray()); }
public void SendPacket(ICryptoTransform encryptor, Packet packet) { byte[] payload = packet.GetPayload(); int blocksize = 16; if (encryptor == null) { uint size = (uint)payload.Length; size += 5; size = (uint)((size + blocksize) / blocksize * blocksize); uint packet_length = size - 4; byte padding_length = (byte)(size - 5 - payload.Length); MemoryStream ms = new MemoryStream(); NetworkByteWriter nbw = new NetworkByteWriter(ms); nbw.WriteUInt32(packet_length); nbw.WriteByte(padding_length); nbw.WriteBytes(payload); for (int i = 0; i < padding_length; i++ ) nbw.WriteByte(0x0C); nbw.Flush(); writer.WriteBytes(ms.ToArray()); writer.Flush(); } else { blocksize = Math.Max(encryptor.InputBlockSize, blocksize); uint size = (uint)payload.Length; size += (5 + (uint)encryptor.InputBlockSize); size = (uint)((size + blocksize) / blocksize * blocksize); uint packet_length = size - 4; byte padding_length = (byte)(size - 5 - payload.Length); MemoryStream ms = new MemoryStream(); NetworkByteWriter nbw = new NetworkByteWriter(ms); nbw.WriteUInt32(packet_length); nbw.WriteByte(padding_length); nbw.WriteBytes(payload); for (int i = 0; i < padding_length; i++) nbw.WriteByte(0x0C); nbw.Flush(); // compute mac byte[] cache = ms.ToArray(); MemoryStream ms_mac = new MemoryStream(); NetworkByteWriter nbw_mac = new NetworkByteWriter(ms_mac); nbw_mac.WriteUInt32((uint)sequence); nbw_mac.WriteBytes(cache); nbw_mac.Flush(); byte[] mac = crypto_mac_encryptor.ComputeHash(ms_mac.ToArray()); crypto_encryptor.TransformBlock(cache, 0, cache.Length, cache, 0); writer.WriteBytes(cache); writer.Flush(); if (crypto_mac_encryptor != null) { writer.WriteBytes(mac); } } sequence++; }
override public void Pack() { writer.Flush(); SetPayload(cache.ToArray()); }
public override void Pack() { MemoryStream ms = new MemoryStream(); NetworkByteWriter nbw = new NetworkByteWriter(ms); nbw.WriteByte((byte)Message); nbw.WriteBytes(cookie); nbw.WriteNameList(kex_algorithms); nbw.WriteNameList(server_host_key_algorithms); nbw.WriteNameList(encryption_algorithms_client_to_server); nbw.WriteNameList(encryption_algorithms_server_to_client); nbw.WriteNameList(mac_algorithms_client_to_server); nbw.WriteNameList(mac_algorithms_server_to_client); nbw.WriteNameList(compression_algorithms_client_to_server); nbw.WriteNameList(compression_algorithms_server_to_client); nbw.WriteNameList(languages_client_to_server); nbw.WriteNameList(languages_server_to_client); nbw.WriteBoolean(first_kex_packet_follows); nbw.WriteUInt32(0); nbw.Flush(); SetPayload(ms.ToArray()); }
public void SendPacket(ICryptoTransform encryptor, Packet packet) { byte[] payload = packet.GetPayload(); int blocksize = 16; if (encryptor == null) { uint size = (uint)payload.Length; size += 5; size = (uint)((size + blocksize) / blocksize * blocksize); uint packet_length = size - 4; byte padding_length = (byte)(size - 5 - payload.Length); MemoryStream ms = new MemoryStream(); NetworkByteWriter nbw = new NetworkByteWriter(ms); nbw.WriteUInt32(packet_length); nbw.WriteByte(padding_length); nbw.WriteBytes(payload); for (int i = 0; i < padding_length; i++) { nbw.WriteByte(0x0C); } nbw.Flush(); writer.WriteBytes(ms.ToArray()); writer.Flush(); } else { blocksize = Math.Max(encryptor.InputBlockSize, blocksize); uint size = (uint)payload.Length; size += (5 + (uint)encryptor.InputBlockSize); size = (uint)((size + blocksize) / blocksize * blocksize); uint packet_length = size - 4; byte padding_length = (byte)(size - 5 - payload.Length); MemoryStream ms = new MemoryStream(); NetworkByteWriter nbw = new NetworkByteWriter(ms); nbw.WriteUInt32(packet_length); nbw.WriteByte(padding_length); nbw.WriteBytes(payload); for (int i = 0; i < padding_length; i++) { nbw.WriteByte(0x0C); } nbw.Flush(); // compute mac byte[] cache = ms.ToArray(); MemoryStream ms_mac = new MemoryStream(); NetworkByteWriter nbw_mac = new NetworkByteWriter(ms_mac); nbw_mac.WriteUInt32((uint)sequence); nbw_mac.WriteBytes(cache); nbw_mac.Flush(); byte[] mac = crypto_mac_encryptor.ComputeHash(ms_mac.ToArray()); crypto_encryptor.TransformBlock(cache, 0, cache.Length, cache, 0); writer.WriteBytes(cache); writer.Flush(); if (crypto_mac_encryptor != null) { writer.WriteBytes(mac); } } sequence++; }