You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.2 KiB
C#

9 months ago
using Renci.SshNet.Common;
namespace Renci.SshNet.Messages.Transport
{
/// <summary>
/// Represents SSH_MSG_KEXDH_REPLY message.
/// </summary>
[Message("SSH_MSG_KEXDH_REPLY", 31)]
public class KeyExchangeDhReplyMessage : Message
{
private byte[] _fBytes;
/// <summary>
/// Gets server public host key and certificates
/// </summary>
/// <value>The host key.</value>
public byte[] HostKey { get; private set; }
/// <summary>
/// Gets the F value.
/// </summary>
public BigInteger F
{
get { return _fBytes.ToBigInteger(); }
}
/// <summary>
/// Gets the signature of H.
/// </summary>
/// <value>The signature.</value>
public byte[] Signature { get; private set; }
/// <summary>
/// Gets the size of the message in bytes.
/// </summary>
/// <value>
/// The size of the messages in bytes.
/// </value>
protected override int BufferCapacity
{
get
{
var capacity = base.BufferCapacity;
capacity += 4; // HostKey length
capacity += HostKey.Length; // HostKey
capacity += 4; // F length
capacity += _fBytes.Length; // F
capacity += 4; // Signature length
capacity += Signature.Length; // Signature
return capacity;
}
}
/// <summary>
/// Called when type specific data need to be loaded.
/// </summary>
protected override void LoadData()
{
HostKey = ReadBinary();
_fBytes = ReadBinary();
Signature = ReadBinary();
}
/// <summary>
/// Called when type specific data need to be saved.
/// </summary>
protected override void SaveData()
{
WriteBinaryString(HostKey);
WriteBinaryString(_fBytes);
WriteBinaryString(Signature);
}
internal override void Process(Session session)
{
session.OnKeyExchangeDhReplyMessageReceived(this);
}
}
}