Skip to content

Pad RSA signatures which have leading zeroes removed - #1855

Merged
Rob-Hague merged 2 commits into
sshnet:developfrom
Rob-Hague:rsa-verify
Nov 14, 2026
Merged

Rob-Hague merged 2 commits into
sshnet:developfrom
Rob-Hague:rsa-verify

Conversation

@Rob-Hague

Copy link
Copy Markdown
Collaborator

The BCL (at least the Windows crypto provider) seems to expect signatures matching the modulus size and fails verification even if the difference is just leading zeroes. So add them if needed. This is basically the same as #1388 in the opposite direction.

I believe this fixes one of the issues reported in #1799 that has roughly 1% or 2% failure rate (lines up with the upper byte of the signature being roughly uniform in [0, 255]).

The BCL (at least the Windows crypto provider) seems to expect signatures matching the
modulus size and fails verification even if the difference is just leading zeroes. So
add them if needed. This is basically the same as sshnet#1388 in the opposite direction.

I believe this fixes one of the issues reported in sshnet#1799 that has roughly 1% or 2%
failure rate (lines up with the upper byte of the signature being roughly uniform
in [0, 255]).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

A null signature now causes a NullReferenceException during padding instead of the previous ArgumentNullException, changing public argument-validation behavior and bypassing callers’ argument-error handling.

1 open issue
What changed in this PR

This PR improves SSH.NET’s compatibility with servers that omit leading zeroes from RSA signatures, addressing a possible cause of the intermittent host-key verification failures reported in #1799.

Changes:

  • Pad incoming RSA signatures to the modulus size before verification.
  • Extend regression coverage to verify shortened signatures, reject corrupted signatures, and preserve leading zeroes when signing.
File Description
test/​Renci.SshNet.Tests/​Classes/​Security/​Cryptography/​RsaDigitalSignatureTest.cs Expands leading-zero regression tests with valid and corrupted shortened signatures.
src/​Renci.SshNet/​Security/​Cryptography/​RsaDigitalSignature.cs Pads RSA signatures before passing them to the platform verifier.

Review effort: Balanced

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants