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.
This commit is contained in:
Gert Driesen
2014-03-10 13:48:32 +00:00
parent cd640aa1cd
commit 83e2067751
@@ -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
}
}