mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-10 09:58:01 +00:00
8c7b0a787f
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.
90 lines
3.1 KiB
Python
Executable File
90 lines
3.1 KiB
Python
Executable File
#!/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()
|