diff options
| author | Carson Fleming <cflems@cflems.net> | 2023-01-12 06:42:34 -0800 |
|---|---|---|
| committer | Carson Fleming <cflems@cflems.net> | 2023-01-12 06:42:34 -0800 |
| commit | cbdff6d5266495c79eeaeedf97a5bb10d269d720 (patch) | |
| tree | cf293846a72a1958f724002e5f5c42c38810fbde /pkcli_stub.py | |
| parent | 648fcec03ecf80ef5ab9b7e48c459e71d3778bf7 (diff) | |
| download | pk-cbdff6d5266495c79eeaeedf97a5bb10d269d720.tar.gz | |
Initial work with stream ciphers, still has hanging issues
Diffstat (limited to 'pkcli_stub.py')
| -rw-r--r-- | pkcli_stub.py | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/pkcli_stub.py b/pkcli_stub.py index 8821f88..1644718 100644 --- a/pkcli_stub.py +++ b/pkcli_stub.py @@ -106,8 +106,8 @@ def get_hostkey(host): del hkdb[host] return False -def run_pty(sock, privkey, rpubkey, bits): - term = recv_encrypted(sock, privkey['d'], privkey['n'], bits=bits) +def run_pty(sock, screen_is, screen_os): + term = screen_is.recv() sel = selectors.DefaultSelector() pid, shfd = pty.fork() if pid == 0: @@ -130,10 +130,10 @@ def run_pty(sock, privkey, rpubkey, bits): data = False if not data: return True - send_encrypted(sock, data, rpubkey['e'], rpubkey['n'], bits=bits) + screen_os.send(data) else: try: - data = recv_encrypted(sock, privkey['d'], privkey['n'], bits=bits) + data = screen_is.recv() except: data = False if not data: @@ -172,6 +172,7 @@ def work(h_addr, port, privkey, bits): os.environ['PS1'] = '$ ' send_encrypted(sock, os.environ['PS1'], rpubkey['e'], rpubkey['n'], bits=bits) while True: + # TODO: this hangs or errors after a pty cmd = recv_encrypted(sock, privkey['d'], privkey['n'], bits=bits) if cmd == b'tunnel': send_encrypted(sock, b'\xde\xad', rpubkey['e'], rpubkey['n'], bits=bits) @@ -185,10 +186,14 @@ def work(h_addr, port, privkey, bits): else: response = '[pk] Error: could not refresh host database.\n' elif cmd == b'pty': - # TODO: use a one-time symmetric session key for pty communications - if not run_pty(sock, privkey, rpubkey, bits=bits): + send_encrypted(sock, b'\xc0\xdeflush', rpubkey['e'], rpubkey['n'], bits=bits) + screen_is = InStreamCipher(sock, privkey, bits=bits) + screen_os = OutStreamCipher(sock, rpubkey, bits=bits) + if not run_pty(sock, screen_is, screen_os): return True - send_encrypted(sock, b'\xc0\xdenpty', rpubkey['e'], rpubkey['n'], bits=bits) + screen_os.send(b'\xc0\xdenpty') + assert(screen_is.recv() == b'\xc0\xdeflush') + # TODO: this comes on time but the process zombifies after for some reason continue else: try: |
