From 3a98a5fb02fc404aa73220e13331105b086ecc56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Groman?= Date: Wed, 21 Apr 2021 15:03:06 +0200 Subject: [PATCH 1/4] Format to PEP --- client.py | 69 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 16 deletions(-) diff --git a/client.py b/client.py index 1a93ea4..788fb2c 100644 --- a/client.py +++ b/client.py @@ -8,6 +8,7 @@ import argparse import threading + class Client: def __init__(self): self.sock = socket.socket() @@ -28,7 +29,9 @@ def set_connection_keys(self): encryption_algorithm=serialization.NoEncryption(), ), ) - self.noise.set_keypair_from_public_bytes(Keypair.REMOTE_STATIC, server_public_key) + self.noise.set_keypair_from_public_bytes( + Keypair.REMOTE_STATIC, server_public_key + ) def noise_handshake(self): self.noise.set_as_initiator() @@ -55,7 +58,7 @@ def send_messages(self): self.sock.connect((self.ip, self.port)) self.set_connection_keys() self.noise_handshake() - self.send_encrypted_msg(user_input) + self.send_encrypted_msg(user_input) self.receive_and_decrypt_msg() self.sock.close() @@ -65,36 +68,70 @@ def receive_and_decrypt_msg(self): print(f'Server: {plaintext.decode("utf-8") }') def register(self): - #TODO: read TPMs PCR values and somehow send them to a server + # TODO: read TPMs PCR values and somehow send them to a server print("Registration complete, your identifier is ") return True def run(self, ip, port, message): self.ip = ip self.port = port - if (message): # One time + if message: # One time self.sock.connect((ip, port)) self.set_connection_keys() self.noise_handshake() self.send_encrypted_msg(message) self.receive_and_decrypt_msg() - else: # Multiple messages + else: # Multiple messages self.send_messages() - + if __name__ == "__main__": - parser = argparse.ArgumentParser(description='PV204 NoisyTPM - this is a part of team project for PV204. \ + parser = argparse.ArgumentParser( + description="PV204 NoisyTPM - this is a part of team project for PV204. \ Client app can communicate with server using Noise framework \ and authenticate via TPM. Please see \ - \'https://github.com/Matej4545/PV204-NoisyTPM/\' for more info.') - parser.add_argument('-s','--server', dest='server', metavar='IP', type=str, nargs=1, default='localhost', help="An IP address or hostname of the server.") - parser.add_argument('-p','--port', dest='port', metavar='PORT', type=int, nargs=1, default=5555, help="A port where the server is listening.") - parser.add_argument('-m', '--message', metavar='MESSAGE', dest='message', type=str, nargs='+', help='Specify message as argument. For interactive session please omit.') - parser.add_argument('-r --register', dest="register", action='store_true', default=False, help="If you are not authenticated or running the app first time, you will need to register.") - args=parser.parse_args() - + 'https://github.com/Matej4545/PV204-NoisyTPM/' for more info." + ) + parser.add_argument( + "-s", + "--server", + dest="server", + metavar="IP", + type=str, + nargs=1, + default="localhost", + help="An IP address or hostname of the server.", + ) + parser.add_argument( + "-p", + "--port", + dest="port", + metavar="PORT", + type=int, + nargs=1, + default=5555, + help="A port where the server is listening.", + ) + parser.add_argument( + "-m", + "--message", + metavar="MESSAGE", + dest="message", + type=str, + nargs="+", + help="Specify message as argument. For interactive session please omit.", + ) + parser.add_argument( + "-r --register", + dest="register", + action="store_true", + default=False, + help="If you are not authenticated or running the app first time, you will need to register.", + ) + args = parser.parse_args() + try: - message = "" if args.message is None else "".join(args.message).strip() + message = "" if args.message is None else "".join(args.message).strip() server = args.server[0].strip() port = args.port[0] client = Client() @@ -103,4 +140,4 @@ def run(self, ip, port, message): client.run(server, port, message) except Exception as e: print("An error occured! Quitting app.") - print(e) \ No newline at end of file + print(e) From 0053b6fd7eec98acb4e412eae21ee2fc1491ef8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Groman?= Date: Wed, 21 Apr 2021 16:15:34 +0200 Subject: [PATCH 2/4] Fix format --- client.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/client.py b/client.py index 788fb2c..184422d 100644 --- a/client.py +++ b/client.py @@ -29,9 +29,7 @@ def set_connection_keys(self): encryption_algorithm=serialization.NoEncryption(), ), ) - self.noise.set_keypair_from_public_bytes( - Keypair.REMOTE_STATIC, server_public_key - ) + self.noise.set_keypair_from_public_bytes(Keypair.REMOTE_STATIC, server_public_key) def noise_handshake(self): self.noise.set_as_initiator() From 9b684dc480dd5a2f90ce1765da0bcfb0d8bb6f7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Groman?= Date: Sat, 24 Apr 2021 12:01:21 +0200 Subject: [PATCH 3/4] Fix parser Move ip, port to constructor Extract func. --- client.py | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/client.py b/client.py index 88d04f1..da6ba34 100644 --- a/client.py +++ b/client.py @@ -9,9 +9,11 @@ class Client: - def __init__(self): + def __init__(self, server, port): self.sock = socket.socket() self.key_pair = ED25519().generate_keypair() + self.ip = server + self.port = port def exchange_public_keys(self) -> bytes: self.sock.send(self.key_pair.public_bytes) @@ -51,13 +53,16 @@ def send_messages(self): continue if user_input.lower() in ["q", "quit", "exit"]: return - self.sock = socket.socket() - self.sock.connect((self.ip, self.port)) - self.set_connection_keys() - self.noise_handshake() - self.send_encrypted_msg(user_input) - self.receive_and_decrypt_msg() - self.sock.close() + self.communicate(user_input) + + def communicate(self, message): + self.sock = socket.socket() + self.sock.connect((self.ip, self.port)) + self.set_connection_keys() + self.noise_handshake() + self.send_encrypted_msg(message) + self.receive_and_decrypt_msg() + self.sock.close() def receive_and_decrypt_msg(self): ciphertext = self.sock.recv(constants.CLIENT_PORT) @@ -69,15 +74,9 @@ def register(self): print("Registration complete, your identifier is ") return True - def run(self, ip, port, message): - self.ip = ip - self.port = port + def run(self, message): if message: # One time - self.sock.connect((ip, port)) - self.set_connection_keys() - self.noise_handshake() - self.send_encrypted_msg(message) - self.receive_and_decrypt_msg() + self.communicate(message) else: # Multiple messages self.send_messages() @@ -95,7 +94,6 @@ def run(self, ip, port, message): dest="server", metavar="IP", type=str, - nargs=1, default="localhost", help="An IP address or hostname of the server.", ) @@ -105,7 +103,6 @@ def run(self, ip, port, message): dest="port", metavar="PORT", type=int, - nargs=1, default=5555, help="A port where the server is listening.", ) @@ -115,7 +112,7 @@ def run(self, ip, port, message): metavar="MESSAGE", dest="message", type=str, - nargs="+", + nargs='+', help="Specify message as argument. For interactive session please omit.", ) parser.add_argument( @@ -129,12 +126,10 @@ def run(self, ip, port, message): try: message = "" if args.message is None else "".join(args.message).strip() - server = args.server[0].strip() - port = args.port[0] - client = Client() + client = Client(args.server.strip(), args.port) if args.register: client.register() - client.run(server, port, message) + client.run(message) except Exception as e: print("An error occured! Quitting app.") print(e) From 6e899a84bd96dda3d6c48d2ea23bc4ffbc500d4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Groman?= Date: Sat, 24 Apr 2021 12:03:25 +0200 Subject: [PATCH 4/4] Fix formatting --- client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client.py b/client.py index da6ba34..08dee4c 100644 --- a/client.py +++ b/client.py @@ -112,7 +112,7 @@ def run(self, message): metavar="MESSAGE", dest="message", type=str, - nargs='+', + nargs="+", help="Specify message as argument. For interactive session please omit.", ) parser.add_argument(