mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-10 09:58:01 +00:00
7ccc368a57
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.
(cherry picked from commit 8c7b0a787f
)
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()
|