//--------------------------------------------------------------------- // 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); } } }
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)); } }
public static extern IntPtr libssh2_hostkey_hash( SshSessionHandle session, LIBSSH2_HOSTKEY_HASH hashType);