RequestMessagePublicKey
Represents "publickey" SSH_MSG_USERAUTH_REQUEST message.
            
                using Renci.SshNet.Common;
using System.Runtime.CompilerServices;
namespace Renci.SshNet.Messages.Authentication
{
    public class RequestMessagePublicKey : RequestMessage
    {
        public byte[] PublicKeyAlgorithmName { get; set; }
        public byte[] PublicKeyData { get; set; }
        public byte[] Signature { get; set; }
        protected override int BufferCapacity {
            get {
                int bufferCapacity = base.BufferCapacity;
                bufferCapacity++;
                bufferCapacity += 4;
                bufferCapacity += PublicKeyAlgorithmName.Length;
                bufferCapacity += 4;
                bufferCapacity += PublicKeyData.Length;
                if (Signature != null) {
                    bufferCapacity += 4;
                    bufferCapacity += Signature.Length;
                }
                return bufferCapacity;
            }
        }
        public RequestMessagePublicKey(ServiceName serviceName, string username, string keyAlgorithmName, byte[] keyData)
            : base(serviceName, username, "publickey")
        {
            PublicKeyAlgorithmName = SshData.Ascii.GetBytes(keyAlgorithmName);
            PublicKeyData = keyData;
        }
        public RequestMessagePublicKey(ServiceName serviceName, string username, string keyAlgorithmName, byte[] keyData, byte[] signature)
            : this(serviceName, username, keyAlgorithmName, keyData)
        {
            Signature = signature;
        }
        protected override void SaveData()
        {
            base.SaveData();
            Write(Signature != null);
            WriteBinaryString(PublicKeyAlgorithmName);
            WriteBinaryString(PublicKeyData);
            if (Signature != null)
                WriteBinaryString(Signature);
        }
        public override string ToString()
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(13, 3);
            defaultInterpolatedStringHandler.AppendFormatted(base.ToString());
            defaultInterpolatedStringHandler.AppendLiteral(" ");
            defaultInterpolatedStringHandler.AppendFormatted(SshData.Ascii.GetString(PublicKeyAlgorithmName));
            defaultInterpolatedStringHandler.AppendLiteral(" ");
            defaultInterpolatedStringHandler.AppendFormatted((Signature != null) ? "with" : "without");
            defaultInterpolatedStringHandler.AppendLiteral(" signature.");
            return defaultInterpolatedStringHandler.ToStringAndClear();
        }
    }
}