/// <summary>
            /// Constructor
            /// </summary>
            /// <param name="hostName">host name</param>
            /// <param name="portNumber">port number</param>
            /// <param name="hostKey">host key</param>
            public SSH2HostKeyInformationProvider(string hostName, int portNumber, PublicKey hostKey)
            {
                HostName   = hostName;
                PortNumber = portNumber;

                _hostKey = hostKey;

                _knownHostsString =
                    new Lazy <string>(
                        () => {
                    // Poderosa known_hosts format
                    return(new StringBuilder()
                           .Append(_hostKey.Algorithm.GetAlgorithmName())
                           .Append(' ')
                           .Append(Encoding.ASCII.GetString(Base64.Encode(_encodedHostKey.Value)))
                           .ToString());
                },
                        false
                        );

                _encodedHostKey =
                    new Lazy <byte[]>(
                        () => {
                    SSH2PayloadImageBuilder image = new SSH2PayloadImageBuilder(0x10000);
                    image.WriteString(_hostKey.Algorithm.GetAlgorithmName());
                    if (_hostKey is RSAPublicKey)
                    {
                        RSAPublicKey rsa = (RSAPublicKey)_hostKey;
                        image.WriteBigInteger(rsa.Exponent);
                        image.WriteBigInteger(rsa.Modulus);
                    }
                    else if (_hostKey is DSAPublicKey)
                    {
                        DSAPublicKey dsa = (DSAPublicKey)_hostKey;
                        image.WriteBigInteger(dsa.P);
                        image.WriteBigInteger(dsa.Q);
                        image.WriteBigInteger(dsa.G);
                        image.WriteBigInteger(dsa.Y);
                    }
                    else if (_hostKey is ECDSAPublicKey)
                    {
                        ECDSAPublicKey ec = (ECDSAPublicKey)_hostKey;
                        image.WriteString(ec.CurveName);
                        image.WriteAsString(ec.ToOctetString());
                    }
                    else if (_hostKey is EDDSAPublicKey)
                    {
                        EDDSAPublicKey ed = (EDDSAPublicKey)_hostKey;
                        image.WriteAsString(ed.Bytes);
                    }
                    else
                    {
                        throw new SSHException("Host key algorithm is unsupported");
                    }
                    return(image.GetBytes());
                },
                        false
                        );
            }
        public byte[] GetPublicKeyBlob()
        {
            SSH2PayloadImageBuilder imageBuilder =
                new SSH2PayloadImageBuilder()
                .WriteString(SSH2Util.PublicKeyAlgorithmName(_keypair.Algorithm));

            _keypair.PublicKey.WriteTo(new SSH2KeyWriter(imageBuilder));
            return(imageBuilder.GetBytes());
        }