Remove unused import.

This commit is contained in:
drieseng
2016-05-21 20:27:10 +02:00
parent 02bf043223
commit c50e2a2f41
29 changed files with 2677 additions and 1886 deletions
@@ -485,38 +485,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.MD5.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -617,38 +585,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.RIPEMD160.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -799,38 +735,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA1.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -929,38 +833,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA256.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1139,38 +1011,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA384.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1253,38 +1093,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA512.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -485,38 +485,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.MD5.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -617,38 +585,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.RIPEMD160.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -799,38 +735,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA1.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -929,38 +833,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA256.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1139,38 +1011,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA384.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1253,38 +1093,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA512.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -485,38 +485,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.MD5.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -617,38 +585,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.RIPEMD160.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -799,38 +735,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA1.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -929,38 +833,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA256.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1139,38 +1011,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA384.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1253,38 +1093,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA512.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -624,38 +624,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.MD5.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -756,38 +724,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.RIPEMD160.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -938,38 +874,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA1.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1068,38 +972,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA256.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1278,38 +1150,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA384.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1392,38 +1232,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA512.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -485,38 +485,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.MD5.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -617,38 +585,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.RIPEMD160.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -799,38 +735,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA1.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -929,38 +833,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA256.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1139,38 +1011,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA384.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1253,38 +1093,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA512.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -485,38 +485,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.MD5.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -617,38 +585,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.RIPEMD160.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -799,38 +735,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA1.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -929,38 +833,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA256.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1139,38 +1011,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA384.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1253,38 +1093,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA512.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -624,38 +624,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.MD5.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -756,38 +724,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.RIPEMD160.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -938,38 +874,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA1.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1068,38 +972,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA256.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1278,38 +1150,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA384.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1392,38 +1232,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA512.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -485,38 +485,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.MD5.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -617,38 +585,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.RIPEMD160.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -799,38 +735,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA1.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -929,38 +833,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA256.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1139,38 +1011,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA384.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1253,38 +1093,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA512.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -485,38 +485,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.MD5.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.MD5.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -617,38 +585,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.RIPEMD160.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.RIPEMD160.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -799,38 +735,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA1.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA1.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -929,38 +833,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA256.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA256.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1139,38 +1011,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA384.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA384.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -1253,38 +1093,6 @@
The size, in bits, of the computed hash code.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.InputBlockSize">
<summary>
Gets the input block size.
</summary>
<returns>
The input block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.OutputBlockSize">
<summary>
Gets the output block size.
</summary>
<returns>
The output block size.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanReuseTransform">
<summary>
Gets a value indicating whether the current transform can be reused.
</summary>
<returns>
Always true.
</returns>
</member>
<member name="P:SshNet.Security.Cryptography.SHA512.CanTransformMultipleBlocks">
<summary>
Gets a value indicating whether multiple blocks can be transformed.
</summary>
<returns>
true if multiple blocks can be transformed; otherwise, false.
</returns>
</member>
<member name="M:SshNet.Security.Cryptography.SHA512.HashCore(System.Byte[],System.Int32,System.Int32)">
<summary>
Routes data written to the object into the hash algorithm for computing the hash.
@@ -59,7 +59,8 @@
<ItemGroup>
<Reference Include="Microsoft.CSharp, Version=5.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="mscorlib" />
<Reference Include="SshNet.Security.Cryptography">
<Reference Include="SshNet.Security.Cryptography, Version=1.0.0.0, Culture=neutral, PublicKeyToken=50c6375d29e47192, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\packages\SshNet.Security.Cryptography.1.0.0\lib\sl5\SshNet.Security.Cryptography.dll</HintPath>
<Private>True</Private>
</Reference>
@@ -903,9 +904,7 @@
<None Include="..\Renci.SshNet.snk">
<Link>Renci.SshNet.snk</Link>
</None>
<None Include="packages.config">
<SubType>Designer</SubType>
</None>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />
<ProjectExtensions>
@@ -913,7 +912,7 @@
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
<SilverlightProjectProperties />
</FlavorProperties>
<UserProperties ProjectLinkReference="2f5f8c90-0bd1-424f-997c-7bc6280919d1" ProjectLinkerExcludeFilter="\\?desktop(\\.*)?$;\\?silverlight(\\.*)?$;\.desktop;\.silverlight;\.xaml;^service references(\\.*)?$;\.clientconfig;^web references(\\.*)?$" />
<UserProperties ProjectLinkerExcludeFilter="\\?desktop(\\.*)?$;\\?silverlight(\\.*)?$;\.desktop;\.silverlight;\.xaml;^service references(\\.*)?$;\.clientconfig;^web references(\\.*)?$" ProjectLinkReference="2f5f8c90-0bd1-424f-997c-7bc6280919d1" />
</VisualStudio>
</ProjectExtensions>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+17 -54
View File
@@ -341,10 +341,13 @@ namespace Renci.SshNet.Channels
/// </summary>
public void Close()
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | Channel.Close");
#endif // DEBUG_GERT
Close(true);
}
#region Channel virtual methods
#region Channel virtual methods
/// <summary>
/// Called when channel window need to be adjust.
@@ -405,6 +408,10 @@ namespace Renci.SshNet.Channels
{
_closeMessageReceived = true;
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | Channel.OnClose()");
#endif // DEBUG_GERT
// close the channel
Close(false);
@@ -444,7 +451,7 @@ namespace Renci.SshNet.Channels
requestFailed(this, new ChannelEventArgs(LocalChannelNumber));
}
#endregion
#endregion
/// <summary>
/// Raises <see cref="Channel.Exception"/> event.
@@ -502,54 +509,6 @@ namespace Renci.SshNet.Channels
_eofMessageSent = Sent;
}
/// <summary>
/// Sends channel extended data message to the servers.
/// </summary>
/// <param name="message">Channel data message.</param>
/// <remarks>
/// <para>
/// When the data of the message exceeds the maximum packet size or the remote window
/// size does not allow the full message to be sent, then this method will send the
/// data in multiple chunks and will only wait for the remote window size to be adjusted
/// when its zero.
/// </para>
/// <para>
/// This is done to support SSH servers will a small window size that do not agressively
/// increase their window size. We need to take into account that there may be SSH
/// servers that only increase their window size when it has reached zero.
/// </para>
/// </remarks>
protected void SendMessage(ChannelExtendedDataMessage message)
{
// send channel messages only while channel is open
if (!IsOpen)
return;
var totalDataLength = message.Data.Length;
var totalDataSent = 0;
var totalBytesToSend = totalDataLength;
while (totalBytesToSend > 0)
{
var dataThatCanBeSentInMessage = GetDataLengthThatCanBeSentInMessage(totalBytesToSend);
if (dataThatCanBeSentInMessage == totalDataLength)
{
// we can send the message in one chunk
_session.SendMessage(message);
}
else
{
// we need to send the message in multiple chunks
var dataToSend = new byte[dataThatCanBeSentInMessage];
Array.Copy(message.Data, totalDataSent, dataToSend, 0, dataThatCanBeSentInMessage);
_session.SendMessage(new ChannelExtendedDataMessage(message.LocalChannelNumber,
message.DataTypeCode, dataToSend));
}
totalDataSent += dataThatCanBeSentInMessage;
totalBytesToSend -= dataThatCanBeSentInMessage;
}
}
/// <summary>
/// Waits for the handle to be signaled or for an error to occurs.
/// </summary>
@@ -674,7 +633,7 @@ namespace Renci.SshNet.Channels
}
}
#region Channel message event handlers
#region Channel message event handlers
private void OnChannelWindowAdjust(object sender, MessageEventArgs<ChannelWindowAdjustMessage> e)
{
@@ -815,7 +774,7 @@ namespace Renci.SshNet.Channels
}
}
#endregion
#endregion
private void AdjustDataWindow(byte[] messageData)
{
@@ -871,7 +830,7 @@ namespace Renci.SshNet.Channels
throw new InvalidOperationException("The channel is closed.");
}
#region IDisposable Members
#region IDisposable Members
private bool _isDisposed;
@@ -895,6 +854,10 @@ namespace Renci.SshNet.Channels
if (disposing)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | Channel.Dipose(bool)");
#endif // DEBUG_GERT
Close(false);
var session = _session;
@@ -947,6 +910,6 @@ namespace Renci.SshNet.Channels
Dispose(false);
}
#endregion
#endregion
}
}
+54 -38
View File
@@ -56,12 +56,24 @@ namespace Renci.SshNet.Channels
var ep = (IPEndPoint) socket.RemoteEndPoint;
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelOpenMessage send '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
// open channel
SendMessage(new ChannelOpenMessage(LocalChannelNumber, LocalWindowSize, LocalPacketSize,
new DirectTcpipChannelInfo(remoteHost, port, ep.Address.ToString(), (uint) ep.Port)));
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelOpenMessage sent '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
// Wait for channel to open
WaitOnHandle(_channelOpen);
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelOpenMessage flagged '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
}
/// <summary>
@@ -87,44 +99,11 @@ namespace Renci.SshNet.Channels
var buffer = new byte[RemotePacketSize];
while (_socket != null && _socket.Connected)
{
try
{
var read = SocketAbstraction.ReadPartial(_socket, buffer, 0, buffer.Length, ConnectionInfo.Timeout);
if (read > 0)
{
SendData(buffer, 0, read);
}
else
{
// client shut down the socket (but the server may still send data or an EOF)
break;
}
}
catch (SocketException exp)
{
switch (exp.SocketErrorCode)
{
case SocketError.WouldBlock:
case SocketError.IOPending:
case SocketError.NoBufferSpaceAvailable:
// socket buffer is probably empty, wait and try again
ThreadAbstraction.Sleep(30);
break;
case SocketError.ConnectionAborted:
case SocketError.ConnectionReset:
// connection was closed after receiving SSH_MSG_CHANNEL_CLOSE message
break;
case SocketError.Interrupted:
// connection was closed because FIN/ACK was not received in time after
// shutting down the (send part of the) socket
break;
default:
throw; // throw any other error
}
}
}
SocketAbstraction.ReadContinuous(_socket, buffer, 0, buffer.Length, SendData);
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelDirectTcpip.Bind (after) '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
// even though the client has disconnected, we still want to properly close the
// channel
@@ -147,6 +126,10 @@ namespace Renci.SshNet.Channels
if (_socket == null)
return;
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelDirectTcpip.CloseSocket '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
// closing a socket actually disposes the socket, so we can safely dereference
// the field to avoid entering the lock again later
_socket.Dispose();
@@ -165,6 +148,10 @@ namespace Renci.SshNet.Channels
lock (_socketLock)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelDirectTcpip.ShutdownSocket '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
if (_socket == null || !_socket.Connected)
return;
@@ -179,6 +166,10 @@ namespace Renci.SshNet.Channels
/// <param name="wait"><c>true</c> to wait for the SSH_MSG_CHANNEL_CLOSE message to be received from the server; otherwise, <c>false</c>.</param>
protected override void Close(bool wait)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelDirectTcpip.Close(bool) '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
var forwardedPort = _forwardedPort;
if (forwardedPort != null)
{
@@ -230,6 +221,10 @@ namespace Renci.SshNet.Channels
base.OnOpenConfirmation(remoteChannelNumber, initialWindowSize, maximumPacketSize);
_channelOpen.Set();
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelOpenMessage confirmed '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
}
protected override void OnOpenFailure(uint reasonCode, string description, string language)
@@ -237,6 +232,10 @@ namespace Renci.SshNet.Channels
base.OnOpenFailure(reasonCode, description, language);
_channelOpen.Set();
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelOpenMessage failure '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
}
/// <summary>
@@ -246,6 +245,11 @@ namespace Renci.SshNet.Channels
{
base.OnEof();
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelDirectTcpip.OnEof '" + LocalChannelNumber + "' | " +
DateTime.Now.ToString("hh:mm:ss"));
#endif // DEBUG_GERT
// the channel will send no more data, and hence it does not make sense to receive
// any more data from the client to send to the remote party (and we surely won't
// send anything anymore)
@@ -262,6 +266,10 @@ namespace Renci.SshNet.Channels
{
base.OnErrorOccured(exp);
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelDirectTcpip.OnErrorOccured '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss"));
#endif // DEBUG_GERT
// signal to the client that we will not send anything anymore; this will also interrupt the
// blocking receive in Bind if the client sends FIN/ACK in time
//
@@ -280,6 +288,10 @@ namespace Renci.SshNet.Channels
{
base.OnDisconnected();
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelDirectTcpip.OnDisconnected '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss"));
#endif // DEBUG_GERT
// the channel will accept or send no more data, and hence it does not make sense
// to accept any more data from the client (and we surely won't send anything
// anymore)
@@ -298,6 +310,10 @@ namespace Renci.SshNet.Channels
if (disposing)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | Dispose '" + LocalChannelNumber + "' | " + DateTime.Now.ToString("hh:mm:ss"));
#endif // DEBUG_GERT
if (_socket != null)
{
lock (_socketLock)
@@ -1,6 +1,7 @@
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Renci.SshNet.Abstractions;
using Renci.SshNet.Common;
using Renci.SshNet.Messages.Connection;
@@ -49,8 +50,6 @@ namespace Renci.SshNet.Channels
/// <param name="forwardedPort">The forwarded port for which the channel is opened.</param>
public void Bind(IPEndPoint remoteEndpoint, IForwardedPort forwardedPort)
{
byte[] buffer;
if (!IsConnected)
{
throw new SshException("Session is not connected.");
@@ -62,9 +61,6 @@ namespace Renci.SshNet.Channels
// Try to connect to the socket
try
{
// Get buffer in memory for data exchange
buffer = new byte[RemotePacketSize];
_socket = SocketAbstraction.Connect(remoteEndpoint, ConnectionInfo.Timeout);
// send channel open confirmation message
@@ -78,37 +74,9 @@ namespace Renci.SshNet.Channels
throw;
}
// Start reading data from the port and send to channel
while (_socket != null && _socket.Connected)
{
try
{
var read = SocketAbstraction.ReadPartial(_socket, buffer, 0, buffer.Length, ConnectionInfo.Timeout);
if (read > 0)
{
SendData(buffer, 0, read);
}
else
{
// server quit sending
break;
}
}
catch (SocketException exp)
{
if (SocketAbstraction.IsErrorResumable(exp.SocketErrorCode))
{
// socket buffer is probably empty, wait and try again
ThreadAbstraction.Sleep(30);
}
else if (exp.SocketErrorCode == SocketError.ConnectionAborted || exp.SocketErrorCode == SocketError.Interrupted)
{
break;
}
else
throw; // throw any other error
}
}
var buffer = new byte[RemotePacketSize];
SocketAbstraction.ReadContinuous(_socket, buffer, 0, buffer.Length, SendData);
}
protected override void OnErrorOccured(Exception exp)
@@ -127,6 +95,10 @@ namespace Renci.SshNet.Channels
/// </summary>
private void ForwardedPort_Closing(object sender, EventArgs eventArgs)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelForwardedTcpip.ForwardedPort_Closing");
#endif // DEBUG_GERT
// signal to the server that we will not send anything anymore; this will also interrupt the
// blocking receive in Bind if the server sends FIN/ACK in time
//
@@ -140,6 +112,10 @@ namespace Renci.SshNet.Channels
/// <param name="how">One of the <see cref="SocketShutdown"/> values that specifies the operation that will no longer be allowed.</param>
private void ShutdownSocket(SocketShutdown how)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelForwardedTcpip.ShutdownSocket");
#endif // DEBUG_GERT
if (_socket == null || !_socket.Connected)
return;
@@ -163,6 +139,10 @@ namespace Renci.SshNet.Channels
lock (_socketShutdownAndCloseLock)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelForwardedTcpip.CloseSocket");
#endif // DEBUG_GERT
var socket = _socket;
if (socket != null)
{
@@ -181,6 +161,10 @@ namespace Renci.SshNet.Channels
/// <param name="wait"><c>true</c> to wait for the SSH_MSG_CHANNEL_CLOSE message to be received from the server; otherwise, <c>false</c>.</param>
protected override void Close(bool wait)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ChannelForwardedTcpip.Close");
#endif // DEBUG_GERT
var forwardedPort = _forwardedPort;
if (forwardedPort != null)
{
@@ -201,6 +185,15 @@ namespace Renci.SshNet.Channels
CloseSocket();
}
#if DEBUG_GERT
protected override void OnClose()
{
base.OnClose();
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | OnClose");
}
#endif // DEBUG_GERT
/// <summary>
/// Called when channel data is received.
/// </summary>
-1
View File
@@ -51,7 +51,6 @@ using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Threading;
using Renci.SshNet.Security.Cryptography;
/*
+112 -24
View File
@@ -62,16 +62,16 @@ namespace Renci.SshNet
// wait for the connection to be established
asyncResult.AsyncWaitHandle.WaitOne();
}
#elif FEATURE_SOCKET_TAP
#error Accepting new socket connections is not implemented.
#else
#error Accepting new socket connections is not implemented.
#endif
}
catch (ObjectDisposedException)
{
// BeginAccept will throw an ObjectDisposedException when the
// socket is closed
#elif FEATURE_SOCKET_TAP
#error Accepting new socket connections is not implemented.
#else
#error Accepting new socket connections is not implemented.
#endif
}
catch (Exception ex)
{
@@ -153,6 +153,10 @@ namespace Renci.SshNet
{
Interlocked.Increment(ref _pendingRequests);
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | " + remoteSocket.RemoteEndPoint + " | ForwardedPortDynamic.ProcessAccept | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
try
{
#if FEATURE_SOCKET_SETSOCKETOPTION
@@ -175,6 +179,12 @@ namespace Renci.SshNet
// start receiving from client socket (and sending to server)
channel.Bind();
}
#if DEBUG_GERT
catch (SocketException ex)
{
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | " + ex.SocketErrorCode + " | " + DateTime.Now.ToString("hh:mm:ss.fff") + " | " + ex);
}
#endif // DEBUG_GERT
finally
{
channel.Close();
@@ -187,12 +197,19 @@ namespace Renci.SshNet
// the forwarded port
if (ex.SocketErrorCode != SocketError.Interrupted)
{
#if DEBUG_GERT
RaiseExceptionEvent(new Exception("ID: " + Thread.CurrentThread.ManagedThreadId, ex));
#else
RaiseExceptionEvent(ex);
#endif // DEBUG_GERT
}
CloseSocket(remoteSocket);
}
catch (Exception exp)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | " + exp + " | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
RaiseExceptionEvent(exp);
CloseSocket(remoteSocket);
}
@@ -212,12 +229,20 @@ namespace Renci.SshNet
try
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | Before ReadByte for version | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
var version = SocketAbstraction.ReadByte(remoteSocket, timeout);
if (version == -1)
{
return false;
}
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | After ReadByte for version | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
if (version == 4)
{
return HandleSocks4(remoteSocket, channel, timeout);
@@ -242,6 +267,10 @@ namespace Renci.SshNet
private static void CloseSocket(Socket socket)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | ForwardedPortDynamic.CloseSocket | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
if (socket.Connected)
{
socket.Shutdown(SocketShutdown.Both);
@@ -375,6 +404,10 @@ namespace Renci.SshNet
private bool HandleSocks5(Socket socket, IChannelDirectTcpip channel, TimeSpan timeout)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | Handling Socks5: " + socket.LocalEndPoint + " | " + socket.RemoteEndPoint + " | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
var authenticationMethodsCount = SocketAbstraction.ReadByte(socket, timeout);
if (authenticationMethodsCount == -1)
{
@@ -382,6 +415,10 @@ namespace Renci.SshNet
return false;
}
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | After ReadByte for authenticationMethodsCount | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
var authenticationMethods = new byte[authenticationMethodsCount];
if (SocketAbstraction.Read(socket, authenticationMethods, 0, authenticationMethods.Length, timeout) == 0)
{
@@ -389,11 +426,19 @@ namespace Renci.SshNet
return false;
}
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | After Read for authenticationMethods | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
if (authenticationMethods.Min() == 0)
{
// no user authentication is one of the authentication methods supported
// by the SOCKS client
SocketAbstraction.Send(socket, new byte[] { 0x05, 0x00 }, 0, 2);
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | After Send for authenticationMethods 0 | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
}
else
{
@@ -403,6 +448,9 @@ namespace Renci.SshNet
// we continue business as usual but expect the client to close the connection
// so one of the subsequent reads should return -1 signaling that the client
// has effectively closed the connection
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | After Send for authenticationMethods 2 | " + DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
}
var version = SocketAbstraction.ReadByte(socket, timeout);
@@ -502,43 +550,83 @@ namespace Renci.SshNet
RaiseRequestReceived(host, port);
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | Before channel open | " + DateTime.Now.ToString("hh:mm:ss.fff"));
var stopWatch = new Stopwatch();
stopWatch.Start();
#endif // DEBUG_GERT
channel.Open(host, port, this, socket);
SocketAbstraction.SendByte(socket, 0x05);
#if DEBUG_GERT
stopWatch.Stop();
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | After channel open | " + DateTime.Now.ToString("hh:mm:ss.fff") + " => " + stopWatch.ElapsedMilliseconds);
#endif // DEBUG_GERT
var replyBuffer = new byte[10];
replyBuffer[0] = 0x05;
// SocketAbstraction.SendByte(socket, 0x05);
if (channel.IsOpen)
{
SocketAbstraction.SendByte(socket, 0x00);
replyBuffer[1] = 0x00;
// SocketAbstraction.SendByte(socket, 0x00);
}
else
{
SocketAbstraction.SendByte(socket, 0x01);
replyBuffer[1] = 0x01;
//SocketAbstraction.SendByte(socket, 0x01);
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | Channel not open");
#endif // DEBUG_GERT
}
SocketAbstraction.SendByte(socket, 0x00);
// reserved
replyBuffer[2] = 0x00;
if (ipAddress.AddressFamily == AddressFamily.InterNetwork)
{
SocketAbstraction.SendByte(socket, 0x01);
}
else if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6)
{
SocketAbstraction.SendByte(socket, 0x04);
}
else
{
throw new NotSupportedException("Not supported address family.");
}
// reserved
//SocketAbstraction.SendByte(socket, 0x00);
var addressBytes = ipAddress.GetAddressBytes();
SocketAbstraction.Send(socket, addressBytes, 0, addressBytes.Length);
SocketAbstraction.Send(socket, portBuffer, 0, portBuffer.Length);
//if (ipAddress.AddressFamily == AddressFamily.InterNetwork)
//{
// SocketAbstraction.SendByte(socket, 0x01);
//}
//else if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6)
//{
// SocketAbstraction.SendByte(socket, 0x04);
//}
//else
//{
// throw new NotSupportedException("Not supported address family.");
//}
// IPv4
replyBuffer[3] = 0x01;
SocketAbstraction.Send(socket, replyBuffer, 0, replyBuffer.Length);
//var addressBytes = IPAddress.Any.GetAddressBytes();
//SocketAbstraction.Send(socket, addressBytes, 0, addressBytes.Length);
//SocketAbstraction.Send(socket, new byte[] {0x00, 0x00}, 0, 2);
//var addressBytes = ipAddress.GetAddressBytes();
//SocketAbstraction.Send(socket, addressBytes, 0, addressBytes.Length);
//SocketAbstraction.Send(socket, portBuffer, 0, portBuffer.Length);
return true;
}
private void Channel_Exception(object sender, ExceptionEventArgs e)
{
#if DEBUG_GERT
Console.WriteLine("ID: " + Thread.CurrentThread.ManagedThreadId + " | Channel_Exception | " +
DateTime.Now.ToString("hh:mm:ss.fff"));
#endif // DEBUG_GERT
RaiseExceptionEvent(e.Exception);
}