mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-22 06:38:37 -05:00
cryptsuite: add a test of rsa_verify.
This includes a regression test for the p=1 bug I just fixed, and also adds some more basic tests just because it seemed silly not to.
This commit is contained in:
parent
e9e800c773
commit
1cd935e6c9
@ -1276,6 +1276,57 @@ culpa qui officia deserunt mollit anim id est laborum.
|
|||||||
self.assertFalse(ssh_key_verify(pubkey, badsig0, "hello, again"))
|
self.assertFalse(ssh_key_verify(pubkey, badsig0, "hello, again"))
|
||||||
self.assertFalse(ssh_key_verify(pubkey, badsigq, "hello, again"))
|
self.assertFalse(ssh_key_verify(pubkey, badsigq, "hello, again"))
|
||||||
|
|
||||||
|
def testRSAVerify(self):
|
||||||
|
def blobs(n, e, d, p, q, iqmp):
|
||||||
|
pubblob = ssh_string(b"ssh-rsa") + ssh2_mpint(e) + ssh2_mpint(n)
|
||||||
|
privblob = (ssh2_mpint(d) + ssh2_mpint(p) +
|
||||||
|
ssh2_mpint(q) + ssh2_mpint(iqmp))
|
||||||
|
return pubblob, privblob
|
||||||
|
|
||||||
|
def failure_test(*args):
|
||||||
|
pubblob, privblob = blobs(*args)
|
||||||
|
key = ssh_key_new_priv('rsa', pubblob, privblob)
|
||||||
|
self.assertEqual(key, None)
|
||||||
|
|
||||||
|
def success_test(*args):
|
||||||
|
pubblob, privblob = blobs(*args)
|
||||||
|
key = ssh_key_new_priv('rsa', pubblob, privblob)
|
||||||
|
self.assertNotEqual(key, None)
|
||||||
|
|
||||||
|
# Parameters for a (trivially small) test key.
|
||||||
|
n = 0xb5d545a2f6423eabd55ffede53e21628d5d4491541482e10676d9d6f2783b9a5
|
||||||
|
e = 0x25
|
||||||
|
d = 0x6733db6a546ac99fcc21ba2b28b0c077156e8a705976205a955c6d9cef98f419
|
||||||
|
p = 0xe30ebd7348bf10dca72b36f2724dafa7
|
||||||
|
q = 0xcd02c87a7f7c08c4e9dc80c9b9bad5d3
|
||||||
|
iqmp = 0x60a129b30db9227910efe1608976c513
|
||||||
|
|
||||||
|
# Check the test key makes sense unmodified.
|
||||||
|
success_test(n, e, d, p, q, iqmp)
|
||||||
|
|
||||||
|
# Try modifying the values one by one to ensure they are
|
||||||
|
# rejected, except iqmp, which sshrsa.c regenerates anyway so
|
||||||
|
# it won't matter at all.
|
||||||
|
failure_test(n+1, e, d, p, q, iqmp)
|
||||||
|
failure_test(n, e+1, d, p, q, iqmp)
|
||||||
|
failure_test(n, e, d+1, p, q, iqmp)
|
||||||
|
failure_test(n, e, d, p+1, q, iqmp)
|
||||||
|
failure_test(n, e, d, p, q+1, iqmp)
|
||||||
|
success_test(n, e, d, p, q, iqmp+1)
|
||||||
|
|
||||||
|
# The key should also be accepted with p,q reversed. (Again,
|
||||||
|
# iqmp gets regenerated, so it won't matter if that's wrong.)
|
||||||
|
success_test(n, e, d, q, p, iqmp)
|
||||||
|
|
||||||
|
# Replace each of p and q with 0, and with 1. These should
|
||||||
|
# still fail validation (obviously), but the point is that the
|
||||||
|
# validator should also avoid trying to divide by zero in the
|
||||||
|
# process.
|
||||||
|
failure_test(n, e, d, 0, q, iqmp)
|
||||||
|
failure_test(n, e, d, p, 0, iqmp)
|
||||||
|
failure_test(n, e, d, 1, q, iqmp)
|
||||||
|
failure_test(n, e, d, p, 1, iqmp)
|
||||||
|
|
||||||
def testKeyMethods(self):
|
def testKeyMethods(self):
|
||||||
# Exercise all the methods of the ssh_key trait on all key
|
# Exercise all the methods of the ssh_key trait on all key
|
||||||
# types, and ensure that they're consistent with each other.
|
# types, and ensure that they're consistent with each other.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user