Example #1
0
        //---------------------------------------------------------------------
        // Host key.
        //---------------------------------------------------------------------

        public byte[] GetRemoteHostKeyHash(LIBSSH2_HOSTKEY_HASH hashType)
        {
            this.session.Handle.CheckCurrentThreadOwnsHandle();
            if (!Enum.IsDefined(typeof(LIBSSH2_HOSTKEY_HASH), hashType))
            {
                throw new ArgumentException(nameof(hashType));
            }

            using (SshTraceSources.Default.TraceMethod().WithParameters(hashType))
            {
                var hashPtr = UnsafeNativeMethods.libssh2_hostkey_hash(
                    this.session.Handle,
                    hashType);

                if (hashPtr == IntPtr.Zero)
                {
                    return(null);
                }
                else
                {
                    var hash = new byte[HostKeyHashLength(hashType)];
                    Marshal.Copy(hashPtr, hash, 0, hash.Length);
                    return(hash);
                }
            }
        }
Example #2
0
        private static int HostKeyHashLength(LIBSSH2_HOSTKEY_HASH hashType)
        {
            switch (hashType)
            {
            case LIBSSH2_HOSTKEY_HASH.MD5:
                return(16);

            case LIBSSH2_HOSTKEY_HASH.SHA1:
                return(16);

            case LIBSSH2_HOSTKEY_HASH.SHA256:
                return(32);

            default:
                throw new ArgumentException(nameof(hashType));
            }
        }
Example #3
0
 public static extern IntPtr libssh2_hostkey_hash(
     SshSessionHandle session,
     LIBSSH2_HOSTKEY_HASH hashType);