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.

105 lines
3.9 KiB
C#

9 months ago
namespace Renci.SshNet.Messages.Authentication
{
/// <summary>
/// Represents "hostbased" SSH_MSG_USERAUTH_REQUEST message.
/// </summary>
internal class RequestMessageHost : RequestMessage
{
/// <summary>
/// Gets the public key algorithm for host key as ASCII encoded byte array.
/// </summary>
public byte[] PublicKeyAlgorithm { get; private set; }
/// <summary>
/// Gets or sets the public host key and certificates for client host.
/// </summary>
/// <value>
/// The public host key.
/// </value>
public byte[] PublicHostKey { get; private set; }
/// <summary>
/// Gets or sets the name of the client host as ASCII encoded byte array.
/// </summary>
/// <value>
/// The name of the client host.
/// </value>
public byte[] ClientHostName { get; private set; }
/// <summary>
/// Gets or sets the client username on the client host as UTF-8 encoded byte array.
/// </summary>
/// <value>
/// The client username.
/// </value>
public byte[] ClientUsername { get; private set; }
/// <summary>
/// Gets or sets the signature.
/// </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; // PublicKeyAlgorithm length
capacity += PublicKeyAlgorithm.Length; // PublicKeyAlgorithm
capacity += 4; // PublicHostKey length
capacity += PublicHostKey.Length; // PublicHostKey
capacity += 4; // ClientHostName length
capacity += ClientHostName.Length; // ClientHostName
capacity += 4; // ClientUsername length
capacity += ClientUsername.Length; // ClientUsername
capacity += 4; // Signature length
capacity += Signature.Length; // Signature
return capacity;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="RequestMessageHost"/> class.
/// </summary>
/// <param name="serviceName">Name of the service.</param>
/// <param name="username">Authentication username.</param>
/// <param name="publicKeyAlgorithm">The public key algorithm.</param>
/// <param name="publicHostKey">The public host key.</param>
/// <param name="clientHostName">Name of the client host.</param>
/// <param name="clientUsername">The client username.</param>
/// <param name="signature">The signature.</param>
public RequestMessageHost(ServiceName serviceName, string username, string publicKeyAlgorithm, byte[] publicHostKey, string clientHostName, string clientUsername, byte[] signature)
: base(serviceName, username, "hostbased")
{
PublicKeyAlgorithm = Ascii.GetBytes(publicKeyAlgorithm);
PublicHostKey = publicHostKey;
ClientHostName = Ascii.GetBytes(clientHostName);
ClientUsername = Utf8.GetBytes(clientUsername);
Signature = signature;
}
/// <summary>
/// Called when type specific data need to be saved.
/// </summary>
protected override void SaveData()
{
base.SaveData();
WriteBinaryString(PublicKeyAlgorithm);
WriteBinaryString(PublicHostKey);
WriteBinaryString(ClientHostName);
WriteBinaryString(ClientUsername);
WriteBinaryString(Signature);
}
}
}