<PackageReference Include="SSH.NET" Version="2024.0.0" />

Message

public abstract class Message : SshData
Base class for all SSH protocol messages.
using Renci.SshNet.Abstractions; using Renci.SshNet.Common; using Renci.SshNet.Compression; using System.IO; namespace Renci.SshNet.Messages { public abstract class Message : SshData { public abstract string MessageName { get; } public abstract byte MessageNumber { get; } protected override int BufferCapacity => 1; protected override void WriteBytes(SshDataStream stream) { stream.WriteByte(MessageNumber); base.WriteBytes(stream); } internal byte[] GetPacket(byte paddingMultiplier, Compressor compressor, bool isEncryptThenMAC = false) { int bufferCapacity = BufferCapacity; if (bufferCapacity == -1 || compressor != null) { using (SshDataStream sshDataStream = new SshDataStream(64)) { sshDataStream.Seek(9, SeekOrigin.Begin); if (compressor != null) { using (SshDataStream sshDataStream2 = new SshDataStream((bufferCapacity != -1) ? bufferCapacity : 64)) { WriteBytes(sshDataStream2); byte[] array = compressor.Compress(sshDataStream2.ToArray()); sshDataStream.Write(array, 0, array.Length); } } else WriteBytes(sshDataStream); bufferCapacity = (int)sshDataStream.Length - 9; int num = bufferCapacity + 4 + 1; byte paddingLength = GetPaddingLength(paddingMultiplier, isEncryptThenMAC ? (num - 4) : num); byte[] array2 = new byte[paddingLength]; CryptoAbstraction.GenerateRandom(array2); sshDataStream.Write(array2, 0, paddingLength); uint packetDataLength = GetPacketDataLength(bufferCapacity, paddingLength); sshDataStream.Seek(4, SeekOrigin.Begin); sshDataStream.Write(packetDataLength); sshDataStream.WriteByte(paddingLength); return sshDataStream.ToArray(); } } int num2 = bufferCapacity + 4 + 1; byte paddingLength2 = GetPaddingLength(paddingMultiplier, isEncryptThenMAC ? (num2 - 4) : num2); uint packetDataLength2 = GetPacketDataLength(bufferCapacity, paddingLength2); using (SshDataStream sshDataStream3 = new SshDataStream(num2 + paddingLength2 + 4)) { sshDataStream3.Seek(4, SeekOrigin.Begin); sshDataStream3.Write(packetDataLength2); sshDataStream3.WriteByte(paddingLength2); WriteBytes(sshDataStream3); byte[] array3 = new byte[paddingLength2]; CryptoAbstraction.GenerateRandom(array3); sshDataStream3.Write(array3, 0, paddingLength2); return sshDataStream3.ToArray(); } } private static uint GetPacketDataLength(int messageLength, byte paddingLength) { return (uint)(messageLength + paddingLength + 1); } private static byte GetPaddingLength(byte paddingMultiplier, long packetLength) { byte b = (byte)(-packetLength & (paddingMultiplier - 1)); if (b < paddingMultiplier) b = (byte)(b + paddingMultiplier); return b; } public override string ToString() { return MessageName; } internal abstract void Process(Session session); } }