From c2fb4b71a7a2c2bfab3c09a47129ff0a016fdd78 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Thu, 13 May 2021 15:05:11 -0700 Subject: [PATCH 01/15] Add files via upload --- Client_1.py | 4 +--- Client_2.py | 5 +---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/Client_1.py b/Client_1.py index 42dbcdf..4677006 100644 --- a/Client_1.py +++ b/Client_1.py @@ -73,7 +73,6 @@ def receive(): try: msg = (sock.recv(1024)).decode() dec = decrypt(d, N, msg) - print(dec) msg_list.insert(tkinter.END, dec) except OSError: # Possibly client has left the chat. break @@ -83,8 +82,7 @@ def send(event=None): msg = my_msg.get() enc = encrypt(e, N, msg) - print(enc) - + print("Encrypted message", enc) my_msg.set("") # Clears input field. sock.send(enc.encode()) if msg == "#quit": diff --git a/Client_2.py b/Client_2.py index 2cf635e..9b8bf89 100644 --- a/Client_2.py +++ b/Client_2.py @@ -72,10 +72,8 @@ def receive(): """ Handles receiving of messages. """ while True: try: - #msg = sock.recv(BUFSIZ).decode("utf8") msg = (sock.recv(1024)).decode() dec = decrypt(d, N, msg) - print(dec) msg_list.insert(tkinter.END, dec) except OSError: # Possibly client has left the chat. break @@ -85,8 +83,7 @@ def send(event=None): msg = my_msg.get() enc = encrypt(e, N, msg) - print(enc) - + print("Encrypted message", enc) my_msg.set("") # Clears input field. sock.send(enc.encode()) if msg == "#quit": From ab4fe26b6ecab3fbcf560dc2072ca322f7052704 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Thu, 13 May 2021 15:10:52 -0700 Subject: [PATCH 02/15] Delete Server.py --- Server.py | 134 ------------------------------------------------------ 1 file changed, 134 deletions(-) delete mode 100644 Server.py diff --git a/Server.py b/Server.py deleted file mode 100644 index c0bbd4b..0000000 --- a/Server.py +++ /dev/null @@ -1,134 +0,0 @@ -""" Script for TCP chat server - relays messages to all clients """ -from socket import AF_INET, socket, SOCK_STREAM -from threading import Thread - -def generateKeys(): - e = d = N = 0 - - p = 5099 - q = 4759 - - N = p * q - phiN = (p - 1) * (q - 1) - - while True: - e = 1013 - if (isCoPrime(e, phiN)): - break - - d = modularInv(e, phiN) - - return e, d, N - -def isCoPrime(p, q): - return gcd(p, q) == 1 - -def gcd(p, q): - while q: - p, q = q, p % q - return p - -def egcd(a, b): - s = 0; old_s = 1 - t = 1; old_t = 0 - r = b; old_r = a - - while r != 0: - quotient = old_r // r - old_r, r = r, old_r - quotient * r - old_s, s = s, old_s - quotient * s - old_t, t = t, old_t - quotient * t - # return gcd, x, y - return old_r, old_s, old_t - -def modularInv(a, b): - gcd, x, y = egcd(a, b) - - if x < 0: - x += b - return x - -def decrypt(d, N, cipher): - msg = "" - parts = cipher.split() - for part in parts: - if part: - c = int(part) - msg += chr(pow(c, d, N)) - return msg - -def encrypt(e, N, msg): - cipher = "" - for c in msg: - m = ord(c) - cipher += str(pow(m, e, N)) + " " - - return cipher - -e, d, N = generateKeys() - -clients = {} -addresses = {} - -HOST = "127.0.0.1" -PORT = 5000 -BUFSIZ = 1024 -ADDR = (HOST, PORT) -SOCK = socket(AF_INET, SOCK_STREAM) -SOCK.bind(ADDR) - -def accept_incoming_connections(): - """Sets up handling for incoming clients.""" - while True: - client, client_address = SOCK.accept() - print("%s:%s has connected." % client_address) - greet = "Greetings from the Chat Room!" - enc = encrypt(e, N, greet) - client.send(enc.encode()) - inst = "Please type your name and press enter!" - enc2 = encrypt(e, N, inst) - client.send(enc2.encode()) - addresses[client] = client_address - Thread(target=handle_client, args=(client, client_address)).start() - - -def handle_client(conn, addr): # Takes client socket as argument. - """Handles a single client connection.""" - name = conn.recv(1024).decode() - dec = decrypt(d, N, name) - name = dec - welcome = '\nWelcome %s! If you ever want to quit, type #quit to exit.' % name - enc = encrypt(e, N, welcome) - conn.send(enc.encode()) - clients[conn] = name - quuit = "#quit" - while True: - msg = conn.recv(1024) - dec2 = decrypt(d, N, msg) - msg = dec2 - if msg != bytes("#quit", "utf8"): - broadcast(msg, name + ": ") - else: - encQuit = encrypt(e, N, quuit) - quuit = encQuit - conn.send(quuit.encode()) - conn.close() - del clients[conn] - broadcast(bytes("\n%s has left the chat." % name, "utf8")) - break - -def broadcast(msg, prefix=""): # prefix is for name identification. - """Broadcasts a message to all the clients.""" - for sock in clients: - enc = encrypt(e, N, msg) - msg = enc - sock.send(msg.encode()) - -if __name__ == "__main__": - SOCK.listen(5) # Listens for 5 connections at max. - print("Chat Server has Started !!") - print("Waiting for connections...") - ACCEPT_THREAD = Thread(target=accept_incoming_connections) - ACCEPT_THREAD.start() # Starts the infinite loop. - ACCEPT_THREAD.join() - SOCK.close() From 8431c98075bfe4d29cb920d70caff1e17e1f73a3 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Thu, 13 May 2021 15:11:06 -0700 Subject: [PATCH 03/15] Delete Client_1.py --- Client_1.py | 136 ---------------------------------------------------- 1 file changed, 136 deletions(-) delete mode 100644 Client_1.py diff --git a/Client_1.py b/Client_1.py deleted file mode 100644 index 4677006..0000000 --- a/Client_1.py +++ /dev/null @@ -1,136 +0,0 @@ -""" Script for Tkinter GUI chat client. """ -import tkinter -from socket import AF_INET, socket, SOCK_STREAM -from threading import Thread - -def generateKeys(): - e = d = N = 0 - - p = 5099 - q = 4759 - - N = p * q - phiN = (p - 1) * (q - 1) - - while True: - e = 1013 - if (isCoPrime(e, phiN)): - break - - d = modularInv(e, phiN) - - return e, d, N - -def isCoPrime(p, q): - return gcd(p, q) == 1 - -def gcd(p, q): - while q: - p, q = q, p % q - return p - -def egcd(a, b): - s = 0; old_s = 1 - t = 1; old_t = 0 - r = b; old_r = a - - while r != 0: - quotient = old_r // r - old_r, r = r, old_r - quotient * r - old_s, s = s, old_s - quotient * s - old_t, t = t, old_t - quotient * t - # return gcd, x, y - return old_r, old_s, old_t - -def modularInv(a, b): - gcd, x, y = egcd(a, b) - - if x < 0: - x += b - return x - -def decrypt(d, N, cipher): - msg = "" - parts = cipher.split() - for part in parts: - if part: - c = int(part) - msg += chr(pow(c, d, N)) - return msg - -def encrypt(e, N, msg): - cipher = "" - for c in msg: - m = ord(c) - cipher += str(pow(m, e, N)) + " " - - return cipher - -e, d, N = generateKeys() -def receive(): - """ Handles receiving of messages. """ - while True: - try: - msg = (sock.recv(1024)).decode() - dec = decrypt(d, N, msg) - msg_list.insert(tkinter.END, dec) - except OSError: # Possibly client has left the chat. - break - -def send(event=None): - """ Handles sending of messages. """ - msg = my_msg.get() - - enc = encrypt(e, N, msg) - print("Encrypted message", enc) - my_msg.set("") # Clears input field. - sock.send(enc.encode()) - if msg == "#quit": - sock.close() - top.quit() - -def on_closing(event=None): - """ This function is to be called when the window is closed. """ - my_msg.set("#quit") - send() - -top = tkinter.Tk() -top.title("Simple Cypher Client") -messages_frame = tkinter.Frame(top) - -my_msg = tkinter.StringVar() # For the messages to be sent. -my_msg.set("") -scrollbar = tkinter.Scrollbar(messages_frame) # To navigate through past messages. -msg_list = tkinter.Listbox(messages_frame, height=15, width=70, yscrollcommand=scrollbar.set) -scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) -msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH) -msg_list.pack() - -messages_frame.pack() - -button_label = tkinter.Label(top, text="Enter Message:") -button_label.pack() -entry_field = tkinter.Entry(top, textvariable=my_msg, foreground="Red") -entry_field.bind("", send) -entry_field.pack() -send_button = tkinter.Button(top, text="Send", command=send) -send_button.pack() - - -quit_button = tkinter.Button(top, text="Quit", command=on_closing) -quit_button.pack() - -top.protocol("WM_DELETE_WINDOW", on_closing) - - - -HOST = "127.0.0.1" -PORT = 5000 -BUFSIZ = 1024 -ADDR = (HOST, PORT) -sock = socket(AF_INET, SOCK_STREAM) -sock.connect(ADDR) - -receive_thread = Thread(target=receive) -receive_thread.start() -tkinter.mainloop() # Starts GUI execution. From ae38d27970cdb59459cd118e2da93b671f8dc3bb Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Thu, 13 May 2021 15:11:12 -0700 Subject: [PATCH 04/15] Delete Client_2.py --- Client_2.py | 137 ---------------------------------------------------- 1 file changed, 137 deletions(-) delete mode 100644 Client_2.py diff --git a/Client_2.py b/Client_2.py deleted file mode 100644 index 9b8bf89..0000000 --- a/Client_2.py +++ /dev/null @@ -1,137 +0,0 @@ -""" Script for Tkinter GUI chat client. """ -import tkinter -from socket import AF_INET, socket, SOCK_STREAM -from threading import Thread - -def generateKeys(): - e = d = N = 0 - - p = 5099 - q = 4759 - - N = p * q - phiN = (p - 1) * (q - 1) - - while True: - e = 1013 - if (isCoPrime(e, phiN)): - break - - d = modularInv(e, phiN) - - return e, d, N - -def isCoPrime(p, q): - return gcd(p, q) == 1 - -def gcd(p, q): - while q: - p, q = q, p % q - return p - -def egcd(a, b): - s = 0; old_s = 1 - t = 1; old_t = 0 - r = b; old_r = a - - while r != 0: - quotient = old_r // r - old_r, r = r, old_r - quotient * r - old_s, s = s, old_s - quotient * s - old_t, t = t, old_t - quotient * t - # return gcd, x, y - return old_r, old_s, old_t - -def modularInv(a, b): - gcd, x, y = egcd(a, b) - - if x < 0: - x += b - return x - -def decrypt(d, N, cipher): - msg = "" - parts = cipher.split() - for part in parts: - if part: - c = int(part) - msg += chr(pow(c, d, N)) - return msg - -def encrypt(e, N, msg): - cipher = "" - for c in msg: - m = ord(c) - cipher += str(pow(m, e, N)) + " " - - return cipher - -e, d, N = generateKeys() - -def receive(): - """ Handles receiving of messages. """ - while True: - try: - msg = (sock.recv(1024)).decode() - dec = decrypt(d, N, msg) - msg_list.insert(tkinter.END, dec) - except OSError: # Possibly client has left the chat. - break - -def send(event=None): - """ Handles sending of messages. """ - msg = my_msg.get() - - enc = encrypt(e, N, msg) - print("Encrypted message", enc) - my_msg.set("") # Clears input field. - sock.send(enc.encode()) - if msg == "#quit": - sock.close() - top.quit() - -def on_closing(event=None): - """ This function is to be called when the window is closed. """ - my_msg.set("#quit") - send() - -top = tkinter.Tk() -top.title("Simple Cypher Client") -messages_frame = tkinter.Frame(top) - -my_msg = tkinter.StringVar() # For the messages to be sent. -my_msg.set("") -scrollbar = tkinter.Scrollbar(messages_frame) # To navigate through past messages. -msg_list = tkinter.Listbox(messages_frame, height=15, width=70, yscrollcommand=scrollbar.set) -scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) -msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH) -msg_list.pack() - -messages_frame.pack() - -button_label = tkinter.Label(top, text="Enter Message:") -button_label.pack() -entry_field = tkinter.Entry(top, textvariable=my_msg, foreground="Red") -entry_field.bind("", send) -entry_field.pack() -send_button = tkinter.Button(top, text="Send", command=send) -send_button.pack() - - -quit_button = tkinter.Button(top, text="Quit", command=on_closing) -quit_button.pack() - -top.protocol("WM_DELETE_WINDOW", on_closing) - - - -HOST = "127.0.0.1" -PORT = 5000 -BUFSIZ = 1024 -ADDR = (HOST, PORT) -sock = socket(AF_INET, SOCK_STREAM) -sock.connect(ADDR) - -receive_thread = Thread(target=receive) -receive_thread.start() -tkinter.mainloop() # Starts GUI execution. From 873b866721aec9b523df8497befc9e4dd05c3c16 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Thu, 13 May 2021 15:11:20 -0700 Subject: [PATCH 05/15] Delete Client_3.py --- Client_3.py | 70 ----------------------------------------------------- 1 file changed, 70 deletions(-) delete mode 100644 Client_3.py diff --git a/Client_3.py b/Client_3.py deleted file mode 100644 index 054d30c..0000000 --- a/Client_3.py +++ /dev/null @@ -1,70 +0,0 @@ -""" Script for Tkinter GUI chat client. """ - -import tkinter -from socket import AF_INET, socket, SOCK_STREAM -from threading import Thread - - -def receive(): - """ Handles receiving of messages. """ - while True: - try: - msg = sock.recv(BUFSIZ).decode("utf8") - msg_list.insert(tkinter.END, msg) - except OSError: # Possibly client has left the chat. - break - -def send(event=None): - """ Handles sending of messages. """ - msg = my_msg.get() - my_msg.set("") # Clears input field. - sock.send(bytes(msg, "utf8")) - if msg == "#quit": - sock.close() - top.quit() - -def on_closing(event=None): - """ This function is to be called when the window is closed. """ - my_msg.set("#quit") - send() - -top = tkinter.Tk() -top.title("Simple Cypher Client") -messages_frame = tkinter.Frame(top) - -my_msg = tkinter.StringVar() # For the messages to be sent. -my_msg.set("") -scrollbar = tkinter.Scrollbar(messages_frame) # To navigate through past messages. -msg_list = tkinter.Listbox(messages_frame, height=15, width=70, yscrollcommand=scrollbar.set) -scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) -msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH) -msg_list.pack() - -messages_frame.pack() - -button_label = tkinter.Label(top, text="Enter Message:") -button_label.pack() -entry_field = tkinter.Entry(top, textvariable=my_msg, foreground="Red") -entry_field.bind("", send) -entry_field.pack() -send_button = tkinter.Button(top, text="Send", command=send) -send_button.pack() - - -quit_button = tkinter.Button(top, text="Quit", command=on_closing) -quit_button.pack() - -top.protocol("WM_DELETE_WINDOW", on_closing) - - - -HOST = "127.0.0.1" -PORT = 5000 -BUFSIZ = 1024 -ADDR = (HOST, PORT) -sock = socket(AF_INET, SOCK_STREAM) -sock.connect(ADDR) - -receive_thread = Thread(target=receive) -receive_thread.start() -tkinter.mainloop() # Starts GUI execution. \ No newline at end of file From b8ccd85be091defbe57620a2bb8c36537336e647 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Thu, 13 May 2021 15:11:25 -0700 Subject: [PATCH 06/15] Delete Client_4.py --- Client_4.py | 70 ----------------------------------------------------- 1 file changed, 70 deletions(-) delete mode 100644 Client_4.py diff --git a/Client_4.py b/Client_4.py deleted file mode 100644 index 054d30c..0000000 --- a/Client_4.py +++ /dev/null @@ -1,70 +0,0 @@ -""" Script for Tkinter GUI chat client. """ - -import tkinter -from socket import AF_INET, socket, SOCK_STREAM -from threading import Thread - - -def receive(): - """ Handles receiving of messages. """ - while True: - try: - msg = sock.recv(BUFSIZ).decode("utf8") - msg_list.insert(tkinter.END, msg) - except OSError: # Possibly client has left the chat. - break - -def send(event=None): - """ Handles sending of messages. """ - msg = my_msg.get() - my_msg.set("") # Clears input field. - sock.send(bytes(msg, "utf8")) - if msg == "#quit": - sock.close() - top.quit() - -def on_closing(event=None): - """ This function is to be called when the window is closed. """ - my_msg.set("#quit") - send() - -top = tkinter.Tk() -top.title("Simple Cypher Client") -messages_frame = tkinter.Frame(top) - -my_msg = tkinter.StringVar() # For the messages to be sent. -my_msg.set("") -scrollbar = tkinter.Scrollbar(messages_frame) # To navigate through past messages. -msg_list = tkinter.Listbox(messages_frame, height=15, width=70, yscrollcommand=scrollbar.set) -scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) -msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH) -msg_list.pack() - -messages_frame.pack() - -button_label = tkinter.Label(top, text="Enter Message:") -button_label.pack() -entry_field = tkinter.Entry(top, textvariable=my_msg, foreground="Red") -entry_field.bind("", send) -entry_field.pack() -send_button = tkinter.Button(top, text="Send", command=send) -send_button.pack() - - -quit_button = tkinter.Button(top, text="Quit", command=on_closing) -quit_button.pack() - -top.protocol("WM_DELETE_WINDOW", on_closing) - - - -HOST = "127.0.0.1" -PORT = 5000 -BUFSIZ = 1024 -ADDR = (HOST, PORT) -sock = socket(AF_INET, SOCK_STREAM) -sock.connect(ADDR) - -receive_thread = Thread(target=receive) -receive_thread.start() -tkinter.mainloop() # Starts GUI execution. \ No newline at end of file From c7d0e643279c626b66e164b358627870a2984342 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Thu, 13 May 2021 15:11:44 -0700 Subject: [PATCH 07/15] Add files via upload --- Client_1.py | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Client_2.py | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++ Client_3.py | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++ Client_4.py | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++ Server.py | 61 +++++++++++++++++++++++ 5 files changed, 611 insertions(+) create mode 100644 Client_1.py create mode 100644 Client_2.py create mode 100644 Client_3.py create mode 100644 Client_4.py create mode 100644 Server.py diff --git a/Client_1.py b/Client_1.py new file mode 100644 index 0000000..9ec4df3 --- /dev/null +++ b/Client_1.py @@ -0,0 +1,139 @@ +""" Script for Tkinter GUI chat client. """ + +import tkinter +from socket import AF_INET, socket, SOCK_STREAM +from threading import Thread + + +def generateKeys(): + e = d = N = 0 + + p = 5099 + q = 4759 + + N = p * q + phiN = (p - 1) * (q - 1) + + while True: + e = 1013 + if (isCoPrime(e, phiN)): + break + + d = modularInv(e, phiN) + + return e, d, N + +def isCoPrime(p, q): + return gcd(p, q) == 1 + +def gcd(p, q): + while q: + p, q = q, p % q + return p + +def egcd(a, b): + s = 0; old_s = 1 + t = 1; old_t = 0 + r = b; old_r = a + + while r != 0: + quotient = old_r // r + old_r, r = r, old_r - quotient * r + old_s, s = s, old_s - quotient * s + old_t, t = t, old_t - quotient * t + # return gcd, x, y + return old_r, old_s, old_t + +def modularInv(a, b): + gcd, x, y = egcd(a, b) + + if x < 0: + x += b + return x + +def decrypt(d, N, cipher): + msg = "" + parts = cipher.split() + for part in parts: + if part: + c = int(part) + msg += chr(pow(c, d, N)) + return msg + +def encrypt(e, N, msg): + cipher = "" + for c in msg: + m = ord(c) + cipher += str(pow(m, e, N)) + " " + + return cipher + +e, d, N = generateKeys() + + +def receive(): + """ Handles receiving of messages. """ + while True: + try: + msg = sock.recv(BUFSIZ).decode("utf8") + msg_list.insert(tkinter.END, msg) + except OSError: # Possibly client has left the chat. + break + +def send(event=None): + """ Handles sending of messages. """ + msg = my_msg.get() + enc = encrypt(e, N, msg) + print("Encrypted message", enc) + dec = decrypt(d, N, enc) + my_msg.set("") # Clears input field. + sock.send(dec.encode()) + if msg == "#quit": + sock.close() + top.quit() + +def on_closing(event=None): + """ This function is to be called when the window is closed. """ + my_msg.set("#quit") + send() + +top = tkinter.Tk() +top.title("Simple Cypher Client") +messages_frame = tkinter.Frame(top) + +my_msg = tkinter.StringVar() # For the messages to be sent. +my_msg.set("") +scrollbar = tkinter.Scrollbar(messages_frame) # To navigate through past messages. +msg_list = tkinter.Listbox(messages_frame, height=15, width=70, yscrollcommand=scrollbar.set) +scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) +msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH) +msg_list.pack() + +messages_frame.pack() + +button_label = tkinter.Label(top, text="Enter Message:") +button_label.pack() +entry_field = tkinter.Entry(top, textvariable=my_msg, foreground="Red") +entry_field.bind("", send) +entry_field.pack() +send_button = tkinter.Button(top, text="Send", command=send) +send_button.pack() + + +quit_button = tkinter.Button(top, text="Quit", command=on_closing) +quit_button.pack() + +top.protocol("WM_DELETE_WINDOW", on_closing) + + + +HOST = "127.0.0.1" +PORT = 5000 +BUFSIZ = 1024 +ADDR = (HOST, PORT) +sock = socket(AF_INET, SOCK_STREAM) +sock.connect(ADDR) + +receive_thread = Thread(target=receive) +receive_thread.start() +tkinter.mainloop() # Starts GUI execution. diff --git a/Client_2.py b/Client_2.py new file mode 100644 index 0000000..31d0991 --- /dev/null +++ b/Client_2.py @@ -0,0 +1,137 @@ +""" Script for Tkinter GUI chat client. """ + +import tkinter +from socket import AF_INET, socket, SOCK_STREAM +from threading import Thread + +def generateKeys(): + e = d = N = 0 + + p = 5099 + q = 4759 + + N = p * q + phiN = (p - 1) * (q - 1) + + while True: + e = 1013 + if (isCoPrime(e, phiN)): + break + + d = modularInv(e, phiN) + + return e, d, N + +def isCoPrime(p, q): + return gcd(p, q) == 1 + +def gcd(p, q): + while q: + p, q = q, p % q + return p + +def egcd(a, b): + s = 0; old_s = 1 + t = 1; old_t = 0 + r = b; old_r = a + + while r != 0: + quotient = old_r // r + old_r, r = r, old_r - quotient * r + old_s, s = s, old_s - quotient * s + old_t, t = t, old_t - quotient * t + # return gcd, x, y + return old_r, old_s, old_t + +def modularInv(a, b): + gcd, x, y = egcd(a, b) + + if x < 0: + x += b + return x + +def decrypt(d, N, cipher): + msg = "" + parts = cipher.split() + for part in parts: + if part: + c = int(part) + msg += chr(pow(c, d, N)) + return msg + +def encrypt(e, N, msg): + cipher = "" + for c in msg: + m = ord(c) + cipher += str(pow(m, e, N)) + " " + + return cipher + +e, d, N = generateKeys() + +def receive(): + """ Handles receiving of messages. """ + while True: + try: + msg = sock.recv(BUFSIZ).decode("utf8") + msg_list.insert(tkinter.END, msg) + except OSError: # Possibly client has left the chat. + break + +def send(event=None): + """ Handles sending of messages. """ + msg = my_msg.get() + enc = encrypt(e, N, msg) + print("Encrypted message", enc) + dec = decrypt(d, N, enc) + my_msg.set("") # Clears input field. + sock.send(dec.encode()) + if msg == "#quit": + sock.close() + top.quit() + +def on_closing(event=None): + """ This function is to be called when the window is closed. """ + my_msg.set("#quit") + send() + +top = tkinter.Tk() +top.title("Simple Cypher Client") +messages_frame = tkinter.Frame(top) + +my_msg = tkinter.StringVar() # For the messages to be sent. +my_msg.set("") +scrollbar = tkinter.Scrollbar(messages_frame) # To navigate through past messages. +msg_list = tkinter.Listbox(messages_frame, height=15, width=70, yscrollcommand=scrollbar.set) +scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) +msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH) +msg_list.pack() + +messages_frame.pack() + +button_label = tkinter.Label(top, text="Enter Message:") +button_label.pack() +entry_field = tkinter.Entry(top, textvariable=my_msg, foreground="Red") +entry_field.bind("", send) +entry_field.pack() +send_button = tkinter.Button(top, text="Send", command=send) +send_button.pack() + + +quit_button = tkinter.Button(top, text="Quit", command=on_closing) +quit_button.pack() + +top.protocol("WM_DELETE_WINDOW", on_closing) + + + +HOST = "127.0.0.1" +PORT = 5000 +BUFSIZ = 1024 +ADDR = (HOST, PORT) +sock = socket(AF_INET, SOCK_STREAM) +sock.connect(ADDR) + +receive_thread = Thread(target=receive) +receive_thread.start() +tkinter.mainloop() # Starts GUI execution. \ No newline at end of file diff --git a/Client_3.py b/Client_3.py new file mode 100644 index 0000000..19d57ea --- /dev/null +++ b/Client_3.py @@ -0,0 +1,137 @@ +""" Script for Tkinter GUI chat client. """ + +import tkinter +from socket import AF_INET, socket, SOCK_STREAM +from threading import Thread + +def generateKeys(): + e = d = N = 0 + + p = 5099 + q = 4759 + + N = p * q + phiN = (p - 1) * (q - 1) + + while True: + e = 1013 + if (isCoPrime(e, phiN)): + break + + d = modularInv(e, phiN) + + return e, d, N + +def isCoPrime(p, q): + return gcd(p, q) == 1 + +def gcd(p, q): + while q: + p, q = q, p % q + return p + +def egcd(a, b): + s = 0; old_s = 1 + t = 1; old_t = 0 + r = b; old_r = a + + while r != 0: + quotient = old_r // r + old_r, r = r, old_r - quotient * r + old_s, s = s, old_s - quotient * s + old_t, t = t, old_t - quotient * t + # return gcd, x, y + return old_r, old_s, old_t + +def modularInv(a, b): + gcd, x, y = egcd(a, b) + + if x < 0: + x += b + return x + +def decrypt(d, N, cipher): + msg = "" + parts = cipher.split() + for part in parts: + if part: + c = int(part) + msg += chr(pow(c, d, N)) + return msg + +def encrypt(e, N, msg): + cipher = "" + for c in msg: + m = ord(c) + cipher += str(pow(m, e, N)) + " " + + return cipher + +e, d, N = generateKeys() + +def receive(): + """ Handles receiving of messages. """ + while True: + try: + msg = sock.recv(BUFSIZ).decode("utf8") + msg_list.insert(tkinter.END, msg) + except OSError: # Possibly client has left the chat. + break + +def send(event=None): + """ Handles sending of messages. """ + msg = my_msg.get() + enc = encrypt(e, N, msg) + print("Encrypted message", enc) + dec = decrypt(d, N, enc) + my_msg.set("") # Clears input field. + sock.send(dec.encode()) + if msg == "#quit": + sock.close() + top.quit() + +def on_closing(event=None): + """ This function is to be called when the window is closed. """ + my_msg.set("#quit") + send() + +top = tkinter.Tk() +top.title("Simple Cypher Client") +messages_frame = tkinter.Frame(top) + +my_msg = tkinter.StringVar() # For the messages to be sent. +my_msg.set("") +scrollbar = tkinter.Scrollbar(messages_frame) # To navigate through past messages. +msg_list = tkinter.Listbox(messages_frame, height=15, width=70, yscrollcommand=scrollbar.set) +scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) +msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH) +msg_list.pack() + +messages_frame.pack() + +button_label = tkinter.Label(top, text="Enter Message:") +button_label.pack() +entry_field = tkinter.Entry(top, textvariable=my_msg, foreground="Red") +entry_field.bind("", send) +entry_field.pack() +send_button = tkinter.Button(top, text="Send", command=send) +send_button.pack() + + +quit_button = tkinter.Button(top, text="Quit", command=on_closing) +quit_button.pack() + +top.protocol("WM_DELETE_WINDOW", on_closing) + + + +HOST = "127.0.0.1" +PORT = 5000 +BUFSIZ = 1024 +ADDR = (HOST, PORT) +sock = socket(AF_INET, SOCK_STREAM) +sock.connect(ADDR) + +receive_thread = Thread(target=receive) +receive_thread.start() +tkinter.mainloop() # Starts GUI execution. diff --git a/Client_4.py b/Client_4.py new file mode 100644 index 0000000..19d57ea --- /dev/null +++ b/Client_4.py @@ -0,0 +1,137 @@ +""" Script for Tkinter GUI chat client. """ + +import tkinter +from socket import AF_INET, socket, SOCK_STREAM +from threading import Thread + +def generateKeys(): + e = d = N = 0 + + p = 5099 + q = 4759 + + N = p * q + phiN = (p - 1) * (q - 1) + + while True: + e = 1013 + if (isCoPrime(e, phiN)): + break + + d = modularInv(e, phiN) + + return e, d, N + +def isCoPrime(p, q): + return gcd(p, q) == 1 + +def gcd(p, q): + while q: + p, q = q, p % q + return p + +def egcd(a, b): + s = 0; old_s = 1 + t = 1; old_t = 0 + r = b; old_r = a + + while r != 0: + quotient = old_r // r + old_r, r = r, old_r - quotient * r + old_s, s = s, old_s - quotient * s + old_t, t = t, old_t - quotient * t + # return gcd, x, y + return old_r, old_s, old_t + +def modularInv(a, b): + gcd, x, y = egcd(a, b) + + if x < 0: + x += b + return x + +def decrypt(d, N, cipher): + msg = "" + parts = cipher.split() + for part in parts: + if part: + c = int(part) + msg += chr(pow(c, d, N)) + return msg + +def encrypt(e, N, msg): + cipher = "" + for c in msg: + m = ord(c) + cipher += str(pow(m, e, N)) + " " + + return cipher + +e, d, N = generateKeys() + +def receive(): + """ Handles receiving of messages. """ + while True: + try: + msg = sock.recv(BUFSIZ).decode("utf8") + msg_list.insert(tkinter.END, msg) + except OSError: # Possibly client has left the chat. + break + +def send(event=None): + """ Handles sending of messages. """ + msg = my_msg.get() + enc = encrypt(e, N, msg) + print("Encrypted message", enc) + dec = decrypt(d, N, enc) + my_msg.set("") # Clears input field. + sock.send(dec.encode()) + if msg == "#quit": + sock.close() + top.quit() + +def on_closing(event=None): + """ This function is to be called when the window is closed. """ + my_msg.set("#quit") + send() + +top = tkinter.Tk() +top.title("Simple Cypher Client") +messages_frame = tkinter.Frame(top) + +my_msg = tkinter.StringVar() # For the messages to be sent. +my_msg.set("") +scrollbar = tkinter.Scrollbar(messages_frame) # To navigate through past messages. +msg_list = tkinter.Listbox(messages_frame, height=15, width=70, yscrollcommand=scrollbar.set) +scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) +msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH) +msg_list.pack() + +messages_frame.pack() + +button_label = tkinter.Label(top, text="Enter Message:") +button_label.pack() +entry_field = tkinter.Entry(top, textvariable=my_msg, foreground="Red") +entry_field.bind("", send) +entry_field.pack() +send_button = tkinter.Button(top, text="Send", command=send) +send_button.pack() + + +quit_button = tkinter.Button(top, text="Quit", command=on_closing) +quit_button.pack() + +top.protocol("WM_DELETE_WINDOW", on_closing) + + + +HOST = "127.0.0.1" +PORT = 5000 +BUFSIZ = 1024 +ADDR = (HOST, PORT) +sock = socket(AF_INET, SOCK_STREAM) +sock.connect(ADDR) + +receive_thread = Thread(target=receive) +receive_thread.start() +tkinter.mainloop() # Starts GUI execution. diff --git a/Server.py b/Server.py new file mode 100644 index 0000000..a5d2198 --- /dev/null +++ b/Server.py @@ -0,0 +1,61 @@ +""" Script for TCP chat server - relays messages to all clients """ + +from socket import AF_INET, socket, SOCK_STREAM +from threading import Thread + +clients = {} +addresses = {} + +HOST = "127.0.0.1" +PORT = 5000 +BUFSIZ = 1024 +ADDR = (HOST, PORT) +SOCK = socket(AF_INET, SOCK_STREAM) +SOCK.bind(ADDR) + + +def accept_incoming_connections(): + """Sets up handling for incoming clients.""" + while True: + client, client_address = SOCK.accept() + print("%s:%s has connected." % client_address) + client.send("Greetings from the ChatRoom! ".encode("utf8")) + client.send("Please type your name and press enter!".encode("utf8")) + addresses[client] = client_address + Thread(target=handle_client, args=(client, client_address)).start() + + +def handle_client(conn, addr): # Takes client socket as argument. + """Handles a single client connection.""" + name = conn.recv(BUFSIZ).decode("utf8") + welcome = '\nWelcome %s! If you ever want to quit, type #quit to exit.' % name + conn.send(bytes(welcome, "utf8")) + msg = "\n%s from [%s] has joined the chat!" % (name, "{}:{}".format(addr[0], addr[1])) + broadcast(bytes(msg, "utf8")) + clients[conn] = name + while True: + msg = conn.recv(BUFSIZ) + if msg != bytes("#quit", "utf8"): + broadcast(msg, name + ": ") + else: + conn.send(bytes("#quit", "utf8")) + conn.close() + del clients[conn] + broadcast(bytes("\n%s has left the chat." % name, "utf8")) + break + + +def broadcast(msg, prefix=""): # prefix is for name identification. + """Broadcasts a message to all the clients.""" + for sock in clients: + sock.send(bytes(prefix, "utf8") + msg) + + +if __name__ == "__main__": + SOCK.listen(5) # Listens for 5 connections at max. + print("Chat Server has Started !!") + print("Waiting for connections...") + ACCEPT_THREAD = Thread(target=accept_incoming_connections) + ACCEPT_THREAD.start() # Starts the infinite loop. + ACCEPT_THREAD.join() + SOCK.close() From d843290bb25edd628949ae741262ead3bc6ae55a Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Fri, 14 May 2021 21:43:10 -0700 Subject: [PATCH 08/15] Update Client_1.py --- Client_1.py | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/Client_1.py b/Client_1.py index 9ec4df3..816189f 100644 --- a/Client_1.py +++ b/Client_1.py @@ -7,30 +7,15 @@ def generateKeys(): e = d = N = 0 - p = 5099 q = 4759 - N = p * q phiN = (p - 1) * (q - 1) - - while True: - e = 1013 - if (isCoPrime(e, phiN)): - break - + e = 1013 d = modularInv(e, phiN) return e, d, N -def isCoPrime(p, q): - return gcd(p, q) == 1 - -def gcd(p, q): - while q: - p, q = q, p % q - return p - def egcd(a, b): s = 0; old_s = 1 t = 1; old_t = 0 @@ -65,7 +50,6 @@ def encrypt(e, N, msg): for c in msg: m = ord(c) cipher += str(pow(m, e, N)) + " " - return cipher e, d, N = generateKeys() From 7d88b1b66ce37ef7113752c6ace6c91bf59df598 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Fri, 14 May 2021 21:43:36 -0700 Subject: [PATCH 09/15] Update Client_2.py --- Client_2.py | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/Client_2.py b/Client_2.py index 31d0991..816189f 100644 --- a/Client_2.py +++ b/Client_2.py @@ -4,32 +4,18 @@ from socket import AF_INET, socket, SOCK_STREAM from threading import Thread + def generateKeys(): e = d = N = 0 - p = 5099 q = 4759 - N = p * q phiN = (p - 1) * (q - 1) - - while True: - e = 1013 - if (isCoPrime(e, phiN)): - break - + e = 1013 d = modularInv(e, phiN) return e, d, N -def isCoPrime(p, q): - return gcd(p, q) == 1 - -def gcd(p, q): - while q: - p, q = q, p % q - return p - def egcd(a, b): s = 0; old_s = 1 t = 1; old_t = 0 @@ -64,11 +50,11 @@ def encrypt(e, N, msg): for c in msg: m = ord(c) cipher += str(pow(m, e, N)) + " " - return cipher e, d, N = generateKeys() + def receive(): """ Handles receiving of messages. """ while True: @@ -134,4 +120,4 @@ def on_closing(event=None): receive_thread = Thread(target=receive) receive_thread.start() -tkinter.mainloop() # Starts GUI execution. \ No newline at end of file +tkinter.mainloop() # Starts GUI execution. From 26ba74ef627361f4783151adf94de4969ebbff03 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Fri, 14 May 2021 21:43:59 -0700 Subject: [PATCH 10/15] Update Client_3.py --- Client_3.py | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/Client_3.py b/Client_3.py index 19d57ea..816189f 100644 --- a/Client_3.py +++ b/Client_3.py @@ -4,32 +4,18 @@ from socket import AF_INET, socket, SOCK_STREAM from threading import Thread + def generateKeys(): e = d = N = 0 - p = 5099 q = 4759 - N = p * q phiN = (p - 1) * (q - 1) - - while True: - e = 1013 - if (isCoPrime(e, phiN)): - break - + e = 1013 d = modularInv(e, phiN) return e, d, N -def isCoPrime(p, q): - return gcd(p, q) == 1 - -def gcd(p, q): - while q: - p, q = q, p % q - return p - def egcd(a, b): s = 0; old_s = 1 t = 1; old_t = 0 @@ -64,11 +50,11 @@ def encrypt(e, N, msg): for c in msg: m = ord(c) cipher += str(pow(m, e, N)) + " " - return cipher e, d, N = generateKeys() + def receive(): """ Handles receiving of messages. """ while True: From 44c0eafe4a8156a676fb6727044dc1e5d87faa55 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Fri, 14 May 2021 21:44:22 -0700 Subject: [PATCH 11/15] Update Client_4.py --- Client_4.py | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/Client_4.py b/Client_4.py index 19d57ea..816189f 100644 --- a/Client_4.py +++ b/Client_4.py @@ -4,32 +4,18 @@ from socket import AF_INET, socket, SOCK_STREAM from threading import Thread + def generateKeys(): e = d = N = 0 - p = 5099 q = 4759 - N = p * q phiN = (p - 1) * (q - 1) - - while True: - e = 1013 - if (isCoPrime(e, phiN)): - break - + e = 1013 d = modularInv(e, phiN) return e, d, N -def isCoPrime(p, q): - return gcd(p, q) == 1 - -def gcd(p, q): - while q: - p, q = q, p % q - return p - def egcd(a, b): s = 0; old_s = 1 t = 1; old_t = 0 @@ -64,11 +50,11 @@ def encrypt(e, N, msg): for c in msg: m = ord(c) cipher += str(pow(m, e, N)) + " " - return cipher e, d, N = generateKeys() + def receive(): """ Handles receiving of messages. """ while True: From 9b43473df0312f2bd3350e644f468ffca4afa163 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Sun, 16 May 2021 14:51:54 -0700 Subject: [PATCH 12/15] Update Client_1.py --- Client_1.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Client_1.py b/Client_1.py index 816189f..9b9a776 100644 --- a/Client_1.py +++ b/Client_1.py @@ -4,15 +4,16 @@ from socket import AF_INET, socket, SOCK_STREAM from threading import Thread - -def generateKeys(): +#finds N and phi of N +def RSA(): e = d = N = 0 p = 5099 q = 4759 N = p * q phiN = (p - 1) * (q - 1) - e = 1013 - d = modularInv(e, phiN) + e = 1013 + #find d using e and phi + d = inverse(e, phiN) return e, d, N @@ -29,13 +30,15 @@ def egcd(a, b): # return gcd, x, y return old_r, old_s, old_t -def modularInv(a, b): +#d is the inverse of e and phi +def inverse(a, b): gcd, x, y = egcd(a, b) if x < 0: x += b return x +#decrypts each character def decrypt(d, N, cipher): msg = "" parts = cipher.split() @@ -45,6 +48,7 @@ def decrypt(d, N, cipher): msg += chr(pow(c, d, N)) return msg +#encrypts each character def encrypt(e, N, msg): cipher = "" for c in msg: @@ -52,7 +56,7 @@ def encrypt(e, N, msg): cipher += str(pow(m, e, N)) + " " return cipher -e, d, N = generateKeys() +e, d, N = RSA() def receive(): From d9358af51ea64a4d1aff8bacaf9881a45d931380 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Sun, 16 May 2021 14:52:06 -0700 Subject: [PATCH 13/15] Update Client_2.py --- Client_2.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Client_2.py b/Client_2.py index 816189f..9b9a776 100644 --- a/Client_2.py +++ b/Client_2.py @@ -4,15 +4,16 @@ from socket import AF_INET, socket, SOCK_STREAM from threading import Thread - -def generateKeys(): +#finds N and phi of N +def RSA(): e = d = N = 0 p = 5099 q = 4759 N = p * q phiN = (p - 1) * (q - 1) - e = 1013 - d = modularInv(e, phiN) + e = 1013 + #find d using e and phi + d = inverse(e, phiN) return e, d, N @@ -29,13 +30,15 @@ def egcd(a, b): # return gcd, x, y return old_r, old_s, old_t -def modularInv(a, b): +#d is the inverse of e and phi +def inverse(a, b): gcd, x, y = egcd(a, b) if x < 0: x += b return x +#decrypts each character def decrypt(d, N, cipher): msg = "" parts = cipher.split() @@ -45,6 +48,7 @@ def decrypt(d, N, cipher): msg += chr(pow(c, d, N)) return msg +#encrypts each character def encrypt(e, N, msg): cipher = "" for c in msg: @@ -52,7 +56,7 @@ def encrypt(e, N, msg): cipher += str(pow(m, e, N)) + " " return cipher -e, d, N = generateKeys() +e, d, N = RSA() def receive(): From ca2fe1c3753faf00cd5a9c362d2c8cc349d06805 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Sun, 16 May 2021 14:52:18 -0700 Subject: [PATCH 14/15] Update Client_3.py --- Client_3.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Client_3.py b/Client_3.py index 816189f..9b9a776 100644 --- a/Client_3.py +++ b/Client_3.py @@ -4,15 +4,16 @@ from socket import AF_INET, socket, SOCK_STREAM from threading import Thread - -def generateKeys(): +#finds N and phi of N +def RSA(): e = d = N = 0 p = 5099 q = 4759 N = p * q phiN = (p - 1) * (q - 1) - e = 1013 - d = modularInv(e, phiN) + e = 1013 + #find d using e and phi + d = inverse(e, phiN) return e, d, N @@ -29,13 +30,15 @@ def egcd(a, b): # return gcd, x, y return old_r, old_s, old_t -def modularInv(a, b): +#d is the inverse of e and phi +def inverse(a, b): gcd, x, y = egcd(a, b) if x < 0: x += b return x +#decrypts each character def decrypt(d, N, cipher): msg = "" parts = cipher.split() @@ -45,6 +48,7 @@ def decrypt(d, N, cipher): msg += chr(pow(c, d, N)) return msg +#encrypts each character def encrypt(e, N, msg): cipher = "" for c in msg: @@ -52,7 +56,7 @@ def encrypt(e, N, msg): cipher += str(pow(m, e, N)) + " " return cipher -e, d, N = generateKeys() +e, d, N = RSA() def receive(): From e38c2a8811a5d89f882f7cc976e6098acb951307 Mon Sep 17 00:00:00 2001 From: cesarm2 Date: Sun, 16 May 2021 14:52:29 -0700 Subject: [PATCH 15/15] Update Client_4.py --- Client_4.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Client_4.py b/Client_4.py index 816189f..9b9a776 100644 --- a/Client_4.py +++ b/Client_4.py @@ -4,15 +4,16 @@ from socket import AF_INET, socket, SOCK_STREAM from threading import Thread - -def generateKeys(): +#finds N and phi of N +def RSA(): e = d = N = 0 p = 5099 q = 4759 N = p * q phiN = (p - 1) * (q - 1) - e = 1013 - d = modularInv(e, phiN) + e = 1013 + #find d using e and phi + d = inverse(e, phiN) return e, d, N @@ -29,13 +30,15 @@ def egcd(a, b): # return gcd, x, y return old_r, old_s, old_t -def modularInv(a, b): +#d is the inverse of e and phi +def inverse(a, b): gcd, x, y = egcd(a, b) if x < 0: x += b return x +#decrypts each character def decrypt(d, N, cipher): msg = "" parts = cipher.split() @@ -45,6 +48,7 @@ def decrypt(d, N, cipher): msg += chr(pow(c, d, N)) return msg +#encrypts each character def encrypt(e, N, msg): cipher = "" for c in msg: @@ -52,7 +56,7 @@ def encrypt(e, N, msg): cipher += str(pow(m, e, N)) + " " return cipher -e, d, N = generateKeys() +e, d, N = RSA() def receive():