mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-10 09:58:01 +00:00
2ec2b796ed
Most of them are now _mandatory_ P3 scripts, because I'm tired of maintaining everything to be compatible with both versions. The current exceptions are gdb.py (which has to live with whatever gdb gives it), and kh2reg.py (which is actually designed for other people to use, and some of them might still be stuck on P2 for the moment).
94 lines
3.1 KiB
Python
Executable File
94 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
|
|
assert sys.version_info[:2] >= (3,0), "This is Python 3 code"
|
|
|
|
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()
|