소스 검색

Issue #1918: Connection dropped by server due to invalid DSA signature
Pad each part of signature with zero's until its 20 bytes. Signature should be exactly 40 bytes.

Gert Driesen 11 년 전
부모
커밋
83e2067751
1개의 변경된 파일12개의 추가작업 그리고 3개의 파일을 삭제
  1. 12 3
      Renci.SshClient/Renci.SshNet/Security/Cryptography/DsaDigitalSignature.cs

+ 12 - 3
Renci.SshClient/Renci.SshNet/Security/Cryptography/DsaDigitalSignature.cs

@@ -136,9 +136,19 @@ namespace Renci.SshNet.Security.Cryptography
             } while (s.IsZero);
 
             //  The signature is (r, s)
-            return r.ToByteArray().Reverse().TrimLeadingZero().Concat(s.ToByteArray().Reverse().TrimLeadingZero()).ToArray();
+            var signature = new byte[40];
+
+            // issue #1918: pad part with zero's on the left if length is less than 20
+            var rBytes = r.ToByteArray().Reverse().TrimLeadingZero().ToArray();
+            Array.Copy(rBytes, 0, signature, 20 - rBytes.Length, rBytes.Length);
+
+            // issue #1918: pad part with zero's on the left if length is less than 20
+            var sBytes = s.ToByteArray().Reverse().TrimLeadingZero().ToArray();
+            Array.Copy(sBytes, 0, signature, 40 - sBytes.Length, sBytes.Length);
+
+            return signature;
         }
-        
+
         #region IDisposable Members
 
         private bool _isDisposed;
@@ -192,6 +202,5 @@ namespace Renci.SshNet.Security.Cryptography
         }
 
         #endregion
-
     }
 }