mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-04 13:02:47 -05:00
New test script 'agenttest.py' for testing Pageant.
Well, actually, two new test programs. agenttest.py is the actual test; it depends on agenttestgen.py which generates a collection of test private keys, using the newly exposed testcrypt interface to our key generation code. In this commit I've also factored out some Python SSH marshalling code from cryptsuite, and moved it into a module ssh.py which the agent tests can reuse.
This commit is contained in:
89
test/agenttestgen.py
Executable file
89
test/agenttestgen.py
Executable file
@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def generate():
|
||||
import hashlib
|
||||
|
||||
print("""\
|
||||
# DO NOT EDIT DIRECTLY! Autogenerated by agenttestgen.py
|
||||
#
|
||||
# To regenerate, run
|
||||
# python3 agenttestgen.py > agenttestdata.py
|
||||
#
|
||||
# agenttestgen.py depends on the testcrypt system, so you must also
|
||||
# have built testcrypt in the parent directory, or else set
|
||||
# PUTTY_TESTCRYPT to point at a working implementation of it.
|
||||
|
||||
""")
|
||||
|
||||
from testcrypt import (rsa_generate, dsa_generate, ecdsa_generate,
|
||||
eddsa_generate, random_clear, random_queue,
|
||||
ssh_key_public_blob, ssh_key_openssh_blob,
|
||||
ssh_key_sign, rsa1_generate, rsa_ssh1_encrypt,
|
||||
rsa_ssh1_public_blob, rsa_ssh1_private_blob_agent,
|
||||
mp_from_bytes_be)
|
||||
from agenttest import (Key2, TestSig2, test_message_to_sign,
|
||||
Key1, test_session_id)
|
||||
import ssh
|
||||
|
||||
keygen2 = [
|
||||
('RSA-1024', lambda: rsa_generate(1024),
|
||||
(ssh.SSH_AGENT_RSA_SHA2_256, ssh.SSH_AGENT_RSA_SHA2_512)),
|
||||
('DSA-1024', lambda: dsa_generate(1024)),
|
||||
('ECDSA-p256', lambda: ecdsa_generate(256)),
|
||||
('Ed25519', lambda: eddsa_generate(256)),
|
||||
]
|
||||
|
||||
keys2 = []
|
||||
|
||||
for record in keygen2:
|
||||
if len(record) == 2:
|
||||
record += ((),)
|
||||
comment, genfn, flaglist = record
|
||||
flaglist = (0,) + flaglist
|
||||
|
||||
random_clear()
|
||||
random_queue(b''.join(hashlib.sha512('{}{:d}'.format(comment, j)
|
||||
.encode('ASCII')).digest()
|
||||
for j in range(1000)))
|
||||
key = genfn()
|
||||
sigs = [TestSig2(flags, ssh_key_sign(key, test_message_to_sign, flags))
|
||||
for flags in flaglist]
|
||||
|
||||
keys2.append(Key2(comment.encode("ASCII"),
|
||||
ssh_key_public_blob(key),
|
||||
sigs,
|
||||
ssh_key_openssh_blob(key)))
|
||||
|
||||
print("def key2examples(Key2, TestSig2):\n return {!r}".format(keys2))
|
||||
|
||||
keygen1 = [
|
||||
('RSA-1024a', 1024),
|
||||
('RSA-1024b', 1024),
|
||||
('RSA-768c', 768),
|
||||
('RSA-768d', 768),
|
||||
]
|
||||
|
||||
keys1 = []
|
||||
|
||||
for comment, bits in keygen1:
|
||||
random_clear()
|
||||
random_queue(b''.join(hashlib.sha512('{}{:d}'.format(comment, j)
|
||||
.encode('ASCII')).digest()
|
||||
for j in range(1000)))
|
||||
key = rsa1_generate(bits)
|
||||
preimage = b'Test128BitRSA1ChallengeCleartext'
|
||||
assert len(preimage) == 32
|
||||
challenge_bytes = rsa_ssh1_encrypt(preimage, key)
|
||||
assert len(challenge_bytes) > 0
|
||||
challenge = int(mp_from_bytes_be(challenge_bytes))
|
||||
response = hashlib.md5(preimage + test_session_id).digest()
|
||||
|
||||
keys1.append(Key1(comment.encode("ASCII"),
|
||||
rsa_ssh1_public_blob(key, 'exponent_first'),
|
||||
challenge, response,
|
||||
rsa_ssh1_private_blob_agent(key)))
|
||||
|
||||
print("def key1examples(Key1):\n return {!r}".format(keys1))
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate()
|
Reference in New Issue
Block a user