From c054da67f1850a25ca2cdcfcf36a409f2d3588c4 Mon Sep 17 00:00:00 2001 From: nihonium Date: Fri, 18 Oct 2024 00:49:36 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20Dockerfile,=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 8 + ...liece_console_v2.py => McEliece_console.py | 0 app_local/readme.txt => README.md | 0 app_local/McEliece.pdf | Bin 166853 -> 0 bytes app_local/McEliece_GUI.py | 130 ----- app_local/McEliece_console.py | 445 ------------------ app_local/cryptosystem_core.py | 246 ---------- app_local/icon.ico | Bin 15027 -> 0 bytes app_local/old_portable.py | 350 -------------- ...osystem_core_v2.py => cryptosystem_core.py | 0 requirements.txt | 2 + 11 files changed, 10 insertions(+), 1171 deletions(-) create mode 100644 Dockerfile rename app_local/McEliece_console_v2.py => McEliece_console.py (100%) rename app_local/readme.txt => README.md (100%) delete mode 100644 app_local/McEliece.pdf delete mode 100644 app_local/McEliece_GUI.py delete mode 100644 app_local/McEliece_console.py delete mode 100644 app_local/cryptosystem_core.py delete mode 100644 app_local/icon.ico delete mode 100644 app_local/old_portable.py rename app_local/cryptosystem_core_v2.py => cryptosystem_core.py (100%) create mode 100644 requirements.txt diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7f3b5d5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM python:3.12-slim + +WORKDIR /opt/McEliece +COPY . . + +RUN pip install --no-cache-dir -r requirements.txt + +CMD [ "python", "McEliece_console.py" ] diff --git a/app_local/McEliece_console_v2.py b/McEliece_console.py similarity index 100% rename from app_local/McEliece_console_v2.py rename to McEliece_console.py diff --git a/app_local/readme.txt b/README.md similarity index 100% rename from app_local/readme.txt rename to README.md diff --git a/app_local/McEliece.pdf b/app_local/McEliece.pdf deleted file mode 100644 index 38fc32d3c4ec6138317ec232298f09db4563b297..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166853 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 diff --git a/app_local/McEliece_GUI.py b/app_local/McEliece_GUI.py deleted file mode 100644 index 01b8d79..0000000 --- a/app_local/McEliece_GUI.py +++ /dev/null @@ -1,130 +0,0 @@ -#pyinstaller -F -w -i "icon.ico" McEliece_GUI.py - -import cryptosystem_core as core -import tkinter as tk - -def mymessagebox(fontsize, butsize, mytitle, mytext): - toplevel = tk.Toplevel(window) - toplevel.title(mytitle) - toplevel.geometry(f"600x400+{window.winfo_x()+40}+{window.winfo_y()+15}") - toplevel.resizable(False, False) - l = tk.Label(toplevel, text = mytext, font = ("TkDefaultFont", fontsize)) - l.pack() - b = tk.Button(toplevel, text = "Close", command = toplevel.destroy, width = 10, font = ("TkDefaultFont", butsize)) - b.pack() - -def show_error(): - mymessagebox(30, 30, "Error!", "ERROR!\n\nPress help button\nto show common\nmistakes in usage.\n") - -def button0_click(): - mymessagebox(15, 15, "Source code: github.com/vovuas2003/McEliece", "Program can work slow and doesn't response, it is normal.\n1st line = current configuration of cryptosystem.\n2nd line = public key (send to anybody).\n3rd line = first half (s) of private key (keep in secret!).\n4th line = second half (p) of private key (keep in secret!).\nBig field = place for writing text or pasting message.\nGenerate keys = rewrite all 3 keys.\nEncrypt = pubkey is required.\nDecrypt = both privkeys are required.\nYou can restore any key from the other two.\nConfig = change cryptosystem parameters n and k.\n(two numbers separated by a space, default: 255 210)\n(255 mod n = 0; 255 = 3 * 5 * 17)\n(2 <= k <= n; (n - k) div 2 bytes are randomly changed)\nPT! = just easter egg :)") - -def button1_click(): - try: - new_text1, new_text2, new_text3 = core.generate() - entry1.delete(0, tk.END) - entry1.insert(0, new_text1) - entry2.delete(0, tk.END) - entry2.insert(0, new_text2) - entry3.delete(0, tk.END) - entry3.insert(0, new_text3) - except: - show_error() - -def button2_click(): - try: - G = entry1.get() - text = entry4.get("1.0", "end-1c") - new_text4 = core.encrypt(G, text) - entry4.delete("1.0", tk.END) - entry4.insert("1.0", new_text4) - except: - show_error() - -def button3_click(): - try: - S = entry2.get() - P = entry3.get() - msg = entry4.get("1.0", "end-1c") - new_text4 = core.decrypt(S, P, msg) - entry4.delete("1.0", tk.END) - entry4.insert("1.0", new_text4) - except: - show_error() - -def button4_click(): - try: - S = entry2.get() - P = entry3.get() - new_text1 = core.restore_G(S, P) - entry1.delete(0, tk.END) - entry1.insert(0, new_text1) - except: - show_error() - -def button5_click(): - try: - G = entry1.get() - P = entry3.get() - new_text2 = core.break_S(G, P) - entry2.delete(0, tk.END) - entry2.insert(0, new_text2) - except: - show_error() - -def button6_click(): - try: - G = entry1.get() - S = entry2.get() - new_text3 = core.break_P(G, S) - entry3.delete(0, tk.END) - entry3.insert(0, new_text3) - except: - show_error() - -def button7_click(): - try: - core.config(entry0.get()) - except: - entry0.delete(0, tk.END) - entry0.insert(0, str(core.n) + " " + str(core.k)) - show_error() - -def button8_click(): - mymessagebox(200, 15, "PT!" * 25, "PT!") - -window = tk.Tk() -window.title("McEliece by vovuas2003") - -frame_buttons = tk.Frame(window) -frame_buttons.pack(side = tk.TOP, fill = tk.X) - -buttons = [] -but_names = ["help", "generate keys", "encrypt text", "decrypt message", "pubkey = s + p", "s = pubkey + p", "p = pubkey + s", "change config", "PT!"] -but_com = [button0_click, button1_click, button2_click, button3_click, button4_click, button5_click, button6_click, button7_click, button8_click] -for i in range(9): - buttons.append(tk.Button(frame_buttons, text = but_names[i], command = but_com[i])) - -for button in buttons: - button.pack(side = tk.LEFT) - -entry0 = tk.Entry(window, width = 50) -entry1 = tk.Entry(window, width = 50) -entry2 = tk.Entry(window, width = 50) -entry3 = tk.Entry(window, width = 50) -entry4 = tk.Text(window, height = 20, width = 50) - -entry0.insert(0, "255 210 (default config)") -entry1.insert(0, "pubkey") -entry2.insert(0, "privkey s") -entry3.insert(0, "privkey p") -entry4.insert("1.0", "Write a text or paste a message here!\nAll utf-8 symbols are supported, e.g. alt codes and Russian text.\n\n(use ctrl+a before crtl+v or ctrl+c)\n(switch keyboard layout to english to use these shortcuts)\n\nYou can't resize window, but can scroll down.\nProgram can work slow, don't kill it please :)") - -entry0.pack() -entry1.pack() -entry2.pack() -entry3.pack() -entry4.pack(fill = tk.BOTH, expand = True) - -window.resizable(False, False) -window.mainloop() diff --git a/app_local/McEliece_console.py b/app_local/McEliece_console.py deleted file mode 100644 index cdc302a..0000000 --- a/app_local/McEliece_console.py +++ /dev/null @@ -1,445 +0,0 @@ -#pyinstaller -F -i "icon.ico" McEliece_console.py - -import hashlib -import getpass -import random -import base64 - -def main(): - safe_start() - -def safe_start(): - try: - start_menu() - except: - print("\nUnknown error (maybe ctrl+c), emergency exit!") - -def start_menu(): - f = True - print("\nA soldering iron is into a black hole.") - #thermorectal cryptanalysis - if myhash(getpass.getpass("Login: ")) != 1314399736851798576: - f = False - if myhash(getpass.getpass("Password: ")) != 192441972608755898: - f = False - if f: - print("Authorization successful, wait a bit.") - menu() - else: - print("Permission denied.") - print("\nPress ENTER to exit.", end = '') - input() - -def menu(): - import cryptosystem_core as core - print("\nMcEliece cryptosystem implementation by vovuas2003.\n") - print("All necessary txt files must be in utf-8 and located in the directory with this exe program.\n") - info = "Menu numbers: 0 = exit; 1 = generate keys, 2 = encrypt, 3 = decrypt,\n4 = restore pubkey, 5 = break privkey_s, 6 = break privkey_p;\n-0 = init all txt files, -1 = init keys, -2 = init text, -3 = init message,\n-4 = init pubkey, -5 = init privkey_s, -6 = init privkey_p;\nc = config, b = binary menu, u = unsafe keygen by password, h = help.\n" - err = "Error! Check command info and try again!\n" - ok = "Operation successful.\n" - inp = [str(i) for i in range(7)] + ['-' + str(i) for i in range(7)] + ['c', 'b', 'h', 'u'] + ['1337', '-1337'] - print(info) - while True: - s = input("Menu number: ") - while s not in inp: - s = input("Wrong menu number, h = help: ") - if s == 'h': - print(info) - elif s == 'b': - print("Go to binary files encryption menu? Don't forget to generate keys and change config before that (if you want)!") - if(not get_yes_no()): - continue - try: - if(bin_menu(core)): - break - except: - raise Exception() - elif s == 'c': - print("Default config is 255 210, current is " + str(core.n) + " " + str(core.k) + ". Change config?") - if(not get_yes_no()): - continue - try: - print("Config is two numbers n >= k >= 2; (3 * 5 * 17) mod n = 0. Larger values = larger keys.\nRandomly change (n - k) div 2 bytes during encryption, but add (n - k + 1) bytes to each chunk with len (k - 1).") - core.config(input("Write n and k separated by a space: ")) - print(ok) - except: - print(err) - elif s == '0': - print("\nGood luck!") - break - elif s == 'u': - print("WARNING: setting sha256hash(password) mod 2^32 as random seed is VERY unsafe practice!\nIt is better to use menu number 1 for independent random.") - print("This operation will rewrite pubkey.txt, privkey_s.txt and privkey_p.txt; are you sure?") - if(not get_yes_no()): - continue - try: - seed = normalhash(getpass.getpass("Any password for hashing: ")) - G, S, P = core.unsafe_generate(seed) - write_txt("pubkey", G) - write_txt("privkey_s", S) - write_txt("privkey_p", P) - print(ok) - except: - print(err) - elif s == '1': - print("This operation will rewrite pubkey.txt, privkey_s.txt and privkey_p.txt; are you sure?") - if(not get_yes_no()): - continue - try: - G, S, P = core.generate() - write_txt("pubkey", G) - write_txt("privkey_s", S) - write_txt("privkey_p", P) - print(ok) - except: - print(err) - elif s == '2': - print("Write your text into text.txt; pubkey.txt is required, message.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - G = read_txt("pubkey") - text = read_txt("text") - msg = core.encrypt(G, text) - write_txt("message", msg) - print(ok) - except: - print(err) - elif s == '3': - print("You need message.txt, privkey_s.txt and privkey_p.txt; text.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - S = read_txt("privkey_s") - P = read_txt("privkey_p") - msg = read_txt("message") - text = core.decrypt(S, P, msg) - write_txt("text", text) - print(ok) - except: - print(err) - elif s == '4': - print("You need privkey_s.txt and privkey_p.txt; pubkey.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - S = read_txt("privkey_s") - P = read_txt("privkey_p") - G = core.restore_G(S, P) - write_txt("pubkey", G) - print(ok) - except: - print(err) - elif s == '5': - print("You need pubkey.txt and privkey_p.txt; privkey_s.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - G = read_txt("pubkey") - P = read_txt("privkey_p") - S = core.break_S(G, P) - write_txt("privkey_s", S) - print(ok) - except: - print(err) - elif s == '6': - print("You need pubkey.txt and privkey_s.txt; privkey_p.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - G = read_txt("pubkey") - S = read_txt("privkey_s") - P = core.break_P(G, S) - write_txt("privkey_p", P) - print(ok) - except: - print(err) - elif s == '-0': - print("Create (or make empty) all 5 necessary txt files in right utf-8 encoding.") - if(not get_yes_no()): - continue - try: - write_txt("pubkey", "") - write_txt("privkey_s", "") - write_txt("privkey_p", "") - write_txt("text", "") - write_txt("message", "") - print(ok) - except: - print(err) - elif s == '-1': - print("Create (or make empty) all 3 keys txt files in right utf-8 encoding.") - if(not get_yes_no()): - continue - try: - write_txt("pubkey", "") - write_txt("privkey_s", "") - write_txt("privkey_p", "") - print(ok) - except: - print(err) - elif s == '-2': - print("Create (or make empty) text.txt in right utf-8 encoding.") - if(not get_yes_no()): - continue - try: - write_txt("text", "") - print(ok) - except: - print(err) - elif s == '-3': - print("Create (or make empty) message.txt in right utf-8 encoding.") - if(not get_yes_no()): - continue - try: - write_txt("message", "") - print(ok) - except: - print(err) - elif s == '-4': - print("Create (or make empty) pubkey.txt in right utf-8 encoding.") - if(not get_yes_no()): - continue - try: - write_txt("pubkey", "") - print(ok) - except: - print(err) - elif s == '-5': - print("Create (or make empty) privkey_s.txt in right utf-8 encoding.") - if(not get_yes_no()): - continue - try: - write_txt("privkey_s", "") - print(ok) - except: - print(err) - elif s == '-6': - print("Create (or make empty) privkey_p.txt in right utf-8 encoding.") - if(not get_yes_no()): - continue - try: - write_txt("privkey_p", "") - print(ok) - except: - print(err) - elif s == '1337': - c = input("Move the soldering iron into the black hole number: ") - try: - PT(int(c)) - except: - print("Iron: 'I don't know this hole.'") - continue - elif s == '-1337': - print("Do you want to format your system disk?") - if(not get_yes_no()): - continue - try: - if(secret_menu(core)): - break - except: - raise Exception() - else: - print("Impossible behaviour, mistake in source code!\nThe string allowed in the inp array is not bound to the call of any function!") - break - -def bin_menu(core): - print("\nFirst line in binary.txt is a name of the original file (with extension), you can edit it.") - print("Default config is 255 210, current is " + str(core.n) + " " + str(core.k) + ".") - info = "Binary menu numbers: 0 = go back to common menu; 1 = encrypt, 2 = decrypt;\n-0 = init binary.txt; -1 = to base64, -2 = from base64; h = help.\n" - err = "Error! Check command info and try again!\n" - ok = "Operation successful.\n" - inp = [str(i) for i in range(3)] + ['-' + str(i) for i in range(3)] + ['h'] - print(info) - while True: - s = input("Binary menu number: ") - while s not in inp: - s = input("Wrong menu number, h = help: ") - if s == 'h': - print(info) - elif s == '0': - print("Going back to common menu.\n") - break - elif s == '1': - print("You need pubkey.txt and any file that you want to encrypt; binary.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - G = read_txt("pubkey") - name = input("Write name of file with extension: ") - with open(name, "rb") as f: - b = f.read() - out = core.bin_encrypt(G, b) - write_txt("binary", name + '\n' + out) - print(ok) - except: - print(err) - elif s == '2': - print("You need privkey_s.txt, privkey_p.txt and binary.txt; name of new file is the first string in binary.txt.") - if(not get_yes_no()): - continue - try: - S = read_txt("privkey_s") - P = read_txt("privkey_p") - name, msg = read_txt("binary").split('\n') - text = core.bin_decrypt(S, P, msg) - with open(name, "wb") as f: - f.write(text) - print(ok) - except: - print(err) - elif s == '-0': - print("Create (or make empty) binary.txt in right utf-8 encoding.") - if(not get_yes_no()): - continue - try: - write_txt("binary", "") - print(ok) - except: - print(err) - elif s == '-1': - print("Convert any file to base64 string without any encryption; binary.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - name = input("Write name of file with extension: ") - with open(name, "rb") as f: - b = f.read() - out = base64.b64encode(b).decode() - write_txt("binary", name + '\n' + out) - print(ok) - except: - print(err) - elif s == '-2': - print("Convert binary.txt from base64; name of new file is the first string in binary.txt.") - if(not get_yes_no()): - continue - try: - name, msg = read_txt("binary").split('\n') - text = base64.b64decode(msg) - with open(name, "wb") as f: - f.write(text) - print(ok) - except: - print(err) - else: - print("Impossible behaviour, mistake in source code!\nThe string allowed in the inp array is not bound to the call of any function!") - return 1 - return 0 - -def secret_menu(core): - #1qaz@WSX - if myhash(getpass.getpass("canp: ")) == 1355332552418299328: - print("Authorization successful.") - else: - print("Permission denied.") - return 0 - print("\nHidden input from keyboard, writing to secret_message.txt.") - print("Default config is 255 210, current is " + str(core.n) + " " + str(core.k) + ".") - info = "Secret menu numbers: 0 = go back; 1 = encrypt, 2 = decrypt; -0 = init txt; h = help.\n" - err = "Error! Check command info and try again!\n" - ok = "Operation successful.\n" - inp = [str(i) for i in range(3)] + ['-0'] + ['h'] - print(info) - while True: - s = input("Secret menu number: ") - while s not in inp: - s = input("Wrong menu number, h = help: ") - if s == 'h': - print(info) - elif s == '0': - print("Going back to common menu.\n") - break - elif s == '1': - print("You need pubkey.txt; secret_message.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - G = read_txt("pubkey") - text = getpass.getpass("Secret text: ") - msg = core.encrypt(G, text) - write_txt("secret_message", msg) - print(ok) - except: - print(err) - elif s == '2': - print("You need privkey_s.txt, privkey_p.txt and secret_message.txt.") - if(not get_yes_no()): - continue - try: - S = read_txt("privkey_s") - P = read_txt("privkey_p") - msg = read_txt("secret_message") - text = core.decrypt(S, P, msg) - print('\nSecret text: ' + text + '\n') - print(ok) - except: - print(err) - elif s == '-0': - print("Create (or make empty) secret_message.txt in right utf-8 encoding.") - if(not get_yes_no()): - continue - try: - write_txt("secret_message", "") - print(ok) - except: - print(err) - else: - print("Impossible behaviour, mistake in source code!\nThe string allowed in the inp array is not bound to the call of any function!") - return 1 - return 0 - -def get_yes_no(): - s = input("Confirm (0 = go back, 1 = continue): ") - while s not in ['0', '1']: - s = input("Try again, 0 or 1: ") - return int(s) - -def myhash(s, m = 2**61 - 1, p = 257): - a = 0 - for i in range(len(s)): - a = ((a * p) % m + ord(s[i])) % m - return a - -def normalhash(s): - return int(hashlib.sha256(bytearray(s, 'utf-8')).hexdigest(), 16) - -def PT(m, M = 3): - if m == 0: - print("Iron: 'OK, I will choose the number by myself.'") - while m == 0: - m = random.randint(-M, M) - s = "PT!" - p = " " - f = False - if m < 0: - s, p = p, s - m *= -1 - f = True - if m > M: - print("Iron: 'Are you sure to move me so far?'") - if(not get_yes_no()): - return - print() - if f: - print(p * (10 * m + 1)) - print(p + (s * 3 + p + s * 3 + p + s + p) * m) - print(p + (s + p + s + p * 2 + s + p * 2 + s + p) * m) - print(p + (s * 3 + p * 2 + s + p * 2 + s + p) * m) - print(p + (s + p * 4 + s + p * 4) * m) - print(p + (s + p * 4 + s + p * 2 + s + p) * m) - if f: - print(p * (10 * m + 1)) - print() - -def write_txt(name, string): - with open(name + ".txt", "w", encoding = "utf-8") as f: - f.write(string) - -def read_txt(name): - with open(name + ".txt", "r", encoding = "utf-8") as f: - out = f.read() - return out - -if __name__ == "__main__": - main() diff --git a/app_local/cryptosystem_core.py b/app_local/cryptosystem_core.py deleted file mode 100644 index 4d49b63..0000000 --- a/app_local/cryptosystem_core.py +++ /dev/null @@ -1,246 +0,0 @@ -#McEliece cryptosystem implementation by vovuas2003 - -#Usage: -#G = pubkey; S and P = privkeys; text = plaintext; msg = encrypted text -#all these variables are strings, so it's easy to integrate this code into any project (check GUI and console examples) -#text must be in utf-8 encoding (e.g. force encoding when open txt files, check console example) -#keys and messages are saved as base64 strings -#you can use bin_encrypt and bin_decrypt functions if text is a byte array (check console example) - -''' -import cryptosystem_core as core -G, S, P = core.generate() -G, S, P = core.unsafe_generate(seed) #e.g. seed = hash(password) -msg = core.encrypt(G, text) -text = core.decrypt(S, P, msg) -G = core.restore_G(S, P) -S = core.break_S(G, P) -P = core.break_P(G, S) -core.config("255 210") #this is the default configuration, NO NEED TO WRITE THIS LINE FOR INITIALIZATION, it is just an example of using the function -#these parameters n and k affect the length of the keys, messages and the number of erroneous bytes in the message -#larger values = larger keys; randomly change (n - k) div 2 bytes during encryption, but add (n - k + 1) bytes to each chunk with len (k - 1). -#see the comments below to understand the requirements for n and k (or check console example) -''' - -#if you want to figure out how the code below works, keep in mind that -#G_ is a pubkey, G is a Reed Solomon code matrix and P is saved as permutation array -#to use the core of the cryptosystem, you don't need to think about it, just write the code as in the example above - -import numpy as np -import galois -import random -import base64 - -order = 256 #p^m = 2**8; encrypt each byte and save in base64 format -n = 255 #(order - 1) mod n = 0 for Reed Solomon code; 255 = 3 * 5 * 17 = (order - 1) -k = 210 #2 <= k <= n; randomly change (n - k) div 2 bytes during encryption -GF = galois.GF(2, 8, irreducible_poly = "x^8 + x^4 + x^3 + x^2 + 1", primitive_element = "x", verify = False) #hardcoded galois.GF(2**8).properties for pyinstaller -rs = galois.ReedSolomon(n, k, field = GF) - -def main(): #for testing - pass - -def config(string): - global n - global k - global rs - try: - nn, kk = map(int, string.split()[:2]) - if kk < 2: - raise Exception() - rrss = galois.ReedSolomon(nn, kk, field = GF) - except: - raise Exception() - else: - n = nn - k = kk - rs = rrss - -def generate(): - S = generate_S() - G = rs.G - P, p = generate_P() - G_ = S @ G @ P - return write_pubkey(G_), write_privkey_s(S), write_privkey_p(p) - -def generate_S(): - S = GF.Random((k, k)) - while np.linalg.det(S) == 0: - S = GF.Random((k, k)) - return S - -def generate_P(): - r = [i for i in range(n)] - p = [] - for i in range(n): - p.append(r.pop(random.randint(0, n - 1 - i))) - P = GF.Zeros((n, n)) - for i in range(n): - P[i, p[i]] = 1 - return P, p - -def unsafe_generate(h): - seed = h % (2**32) - S = unsafe_generate_S(seed) - G = rs.G - P, p = unsafe_generate_P(seed) - G_ = S @ G @ P - return write_pubkey(G_), write_privkey_s(S), write_privkey_p(p) - -def unsafe_generate_S(seed): - pseudo = np.random.RandomState(seed) - S = GF(pseudo.randint(0, order, (k, k))) - while np.linalg.det(S) == 0: - S = GF(pseudo.randint(0, order, (k, k))) - return S - -def unsafe_generate_P(seed): - pseudo = np.random.RandomState(seed) - p = [i for i in range(n)] - pseudo.shuffle(p) - P = GF.Zeros((n, n)) - for i in range(n): - P[i, p[i]] = 1 - return P, p - -def write_pubkey(G_): - rows = [bytes(row) for row in G_] - row = bytes([i for j in rows for i in j]) - return base64.b64encode(row).decode() - -def write_privkey_s(S): - rows = [bytes(row) for row in S] - row = bytes([i for j in rows for i in j]) - return base64.b64encode(row).decode() - -def write_privkey_p(p): - return base64.b64encode(bytes(p)).decode() - -def read_pubkey(out): - out = [int(i) for i in base64.b64decode(out)] - out = [out[i - n : i] for i in range(n, n * k + n, n)] - return out - -def read_privkey_s(out): - out = [int(i) for i in base64.b64decode(out)] - out = [out[i - k : i] for i in range(k, k * k + k, k)] - return out - -def read_privkey_p(out): - return [int(i) for i in base64.b64decode(out)] - -def build_P(p): - P = GF.Zeros((n, n)) - for i in range(n): - P[i, p[i]] = 1 - return P - -def build_P_inv(p): - P = GF.Zeros((n, n)) - for i in range(n): - P[p[i], i] = 1 - return P - -def pad_message(msg: bytes, pad_size: int) -> list[int]: - padding = pad_size - (len(msg) % pad_size) - return list(msg + padding.to_bytes() * padding) - -def unpad_message(msg): - padding_byte = msg[-1] - for i in range(1, padding_byte + 1): - if msg[-i] != padding_byte: - #print("Wrong privkey!") - raise Exception() - return msg[: -padding_byte] - -def encrypt(key, text): - return bin_encrypt(key, text.encode("utf-8")) - -def decrypt(s, p, msg): - return bin_decrypt(s, p, msg).decode("utf-8") - -def bin_encrypt(key, text): - G_ = GF(read_pubkey(key)) - out = bytes() - while len(text) > k - 1: - tmp = text[: k - 1] - text = text[k - 1 :] - out += encrypt_one(G_, tmp) - out += encrypt_one(G_, text) - return base64.b64encode(out).decode() - -def bin_decrypt(s, p, msg): - S_inv = np.linalg.inv(GF(read_privkey_s(s))) - P_inv = GF(build_P_inv(read_privkey_p(p))) - msg = [int(i) for i in base64.b64decode(msg)] - msg = [msg[i - n : i] for i in range(n, len(msg) + n, n)] - msg = [decrypt_one(S_inv, P_inv, GF(i)) for i in msg] - msg = [i for j in msg for i in j] - msg = bytes(msg) - return msg - -def encrypt_one(G_, text): - msg = pad_message(text, k) - m = GF(msg) - c = m.T @ G_ - t = (n - k) // 2 - z = np.zeros(n, dtype = int) - p = [i for i in range(n)] - for i in range(t): - ind = p.pop(random.randint(0, n - 1 - i)) - z[ind] += random.randint(1, order - 1) - z[ind] %= order - c = c + GF(z) - return bytes(c) - -def decrypt_one(S_inv, P_inv, msg): - msg = msg @ P_inv - msg, e = rs.decode(msg, errors = True) - if e == -1: - #print("Too many erroneous values in message!") - raise Exception() - msg = msg @ S_inv - msg = [int(i) for i in msg] - msg = unpad_message(msg) - return msg - -def restore_G(s, p): - S = GF(read_privkey_s(s)) - G = rs.G - P = GF(build_P(read_privkey_p(p))) - G_ = S @ G @ P - return write_pubkey(G_) - -def break_S(key, p): - G_ = GF(read_pubkey(key)) - P_inv = GF(build_P_inv(read_privkey_p(p))) - S = G_ @ P_inv - S = S[:, : k] - return write_privkey_s(S) - -def break_P(key, s): - G_ = GF(read_pubkey(key)) - S_inv = np.linalg.inv(GF(read_privkey_s(s))) - G = rs.G - G = G.T - G = [[int(i) for i in j] for j in G] - GP = S_inv @ G_ - GP = GP.T - GP = [[int(i) for i in j] for j in GP] - p = [0 for i in range(n)] - f = False - for i in range(n): - f = False - for j in range(n): - if G[i] == GP[j]: - p[i] = j - f = True - break - if f: - continue - #print("Wrong pubkey and privkey_s combination!") - raise Exception() - return write_privkey_p(p) - -if __name__ == "__main__": - main() diff --git a/app_local/icon.ico b/app_local/icon.ico deleted file mode 100644 index c7a31c2d50eb1800007dae9166d8cf8c8cab7a12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15027 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 QUONS8s_Lp#E7^wsAJKSLn*aa+ diff --git a/app_local/old_portable.py b/app_local/old_portable.py deleted file mode 100644 index 53ae408..0000000 --- a/app_local/old_portable.py +++ /dev/null @@ -1,350 +0,0 @@ -#pip install pyinstaller -#pyinstaller -F -i "icon.ico" portable.py -#exe into dist folder - -import numpy as np -import galois -import random -import getpass - -def main(): - safe_start() - -def safe_start(): - try: - start_menu() - except: - print("\nUnknown error, maybe ctrl+c\n") - -def start_menu(): - f = True - print("\nA soldering iron is into a black hole.") - #thermorectal cryptanalysis - if myhash(getpass.getpass("Login: ")) != 1314399736851798576: - f = False - if myhash(getpass.getpass("Password: ")) != 192441972608755898: - f = False - if f: - print("Authorization successful, wait a bit.") - menu() - else: - print("Permission denied.") - print("\nPress ENTER to exit.", end = '') - input() - -def menu(): - order = 2 ** 8 - n = order - 1 - k = 210 - #print(galois.GF(2 ** 8).properties) - GF = galois.GF(2, 8, irreducible_poly = "x^8 + x^4 + x^3 + x^2 + 1", primitive_element = "x", verify = False) - rs = galois.ReedSolomon(n, k, field = GF) - print("\nMcEliece cryptosystem implementation by vovuas2003.\n") - print("All necessary txt files must be located in the directory with this exe program.\n") - info = "Menu numbers: 0 = exit, 1 = generate keys, 2 = encrypt, 3 = decrypt,\n4 = restore pubkey, 5 = break privkey_s, 6 = break privkey_p; h = help.\n" - err = "Error! Check command info and try again!\n" - ok = "Operation successful.\n" - inp = [str(i) for i in range(7)] + ['h'] + ['1337'] - print(info) - while True: - s = input("Menu number: ") - while s not in inp: - s = input("Wrong menu number, h = help: ") - if s == 'h': - print(info) - elif s == '0': - print("\nGood luck!") - break - elif s == '1': - print("This operation will rewrite pubkey.txt, privkey_s.txt and privkey_p.txt; are you sure?") - if(not get_yes_no()): - continue - try: - generate(n, k, GF, rs) - print(ok) - except: - print(err) - elif s == '2': - print("Write your text into text.txt; pubkey.txt is required, message.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - encrypt(n, k, order, GF) - print(ok) - except: - print(err) - elif s == '3': - print("You need message.txt, privkey_s.txt and privkey_p.txt; text.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - decrypt(n, GF, rs) - print(ok) - except: - print(err) - elif s == '4': - print("You need privkey_s.txt and privkey_p.txt; pubkey.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - restore_G_(n, GF, rs) - print(ok) - except: - print(err) - elif s == '5': - print("You need pubkey.txt and privkey_p.txt; privkey_s.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - break_S(n, k, GF) - print(ok) - except: - print(err) - elif s == '6': - print("You need pubkey.txt and privkey_s.txt; privkey_p.txt will be rewritten.") - if(not get_yes_no()): - continue - try: - break_P(n, GF, rs) - print(ok) - except: - print(err) - elif s == '1337': - c = input("Move the soldering iron into the black hole number: ") - try: - PT(int(c)) - except: - print("Iron: 'I don't know this hole.'") - continue - else: - print("Impossible behaviour, mistake in source code!\nThe string allowed in the inp array is not bound to the call of any function!") - break - -def get_yes_no(): - s = input("Confirm (0 = go back, 1 = continue): ") - while s not in ['0', '1']: - s = input("Try again, 0 or 1: ") - return int(s) - -def myhash(s, m = 2**61 - 1, p = 257): - a = 0 - for i in range(len(s)): - a = ((a * p) % m + ord(s[i])) % m - return a - -def PT(m): - M = 5 - if m == 0: - print("Iron: 'OK, I will choose the number by myself.'") - while m == 0: - m = random.randint(-M, M) - s = "PT!" - p = " " - f = False - if m < 0: - s, p = p, s - m *= -1 - f = True - if m > M: - print("Iron: 'Are you sure to move me so far?'") - if(not get_yes_no()): - return - print() - if f: - print(p * (10 * m + 1)) - print(p + (s * 3 + p + s * 3 + p + s + p) * m) - print(p + (s + p + s + p * 2 + s + p * 2 + s + p) * m) - print(p + (s * 3 + p * 2 + s + p * 2 + s + p) * m) - print(p + (s + p * 4 + s + p * 4) * m) - print(p + (s + p * 4 + s + p * 2 + s + p) * m) - if f: - print(p * (10 * m + 1)) - print() - -def generate(n, k, GF, rs): - S = generate_S(k, GF) - G = rs.G - P, p = generate_P(n, GF) - G_ = S @ G @ P - write_pubkey(G_) - write_privkey(S, p) - -def generate_S(k, GF): - S = GF.Random((k, k)) - while np.linalg.det(S) == 0: - S = GF.Random((k, k)) - return S - -def generate_P(n, GF): - r = [i for i in range(n)] - p = [] - for i in range(n): - p.append(r.pop(random.randint(0, n - 1 - i))) - P = GF.Zeros((n, n)) - for i in range(n): - P[i, p[i]] = 1 - return P, p - -def write_pubkey(G_): - rows = [" ".join([str(int(cell)) for cell in row]) for row in G_] - output = "\n".join(rows) - with open("pubkey.txt", "w") as f: - f.write(output) - -def write_privkey(S, p): - output = " ".join([str(i) for i in p]) - with open("privkey_p.txt", "w") as f: - f.write(output) - rows = [" ".join([str(int(cell)) for cell in row]) for row in S] - output = "\n".join(rows) - with open("privkey_s.txt", "w") as f: - f.write(output) - -def read_pubkey(): - out = [] - tmp = [] - with open("pubkey.txt", "r") as f: - while True: - tmp = f.readline() - if not tmp: - break - out.append([int(i) for i in tmp.split()]) - return out - -def read_privkey_s(): - out = [] - tmp = [] - with open("privkey_s.txt", "r") as f: - while True: - tmp = f.readline() - if not tmp: - break - out.append([int(i) for i in tmp.split()]) - return out - -def read_privkey_p(): - with open("privkey_p.txt", "r") as f: - out = f.readline().split() - return [int(i) for i in out] - -def build_P(n, GF, p): - P = GF.Zeros((n, n)) - for i in range(n): - P[i, p[i]] = 1 - return P - -def build_P_inv(n, GF, p): - P = GF.Zeros((n, n)) - for i in range(n): - P[p[i], i] = 1 - return P - -def pad_message(msg: bytes, pad_size: int) -> list[int]: - padding = pad_size - (len(msg) % pad_size) - return list(msg + padding.to_bytes() * padding) - -def unpad_message(msg): - padding_byte = msg[-1] - for i in range(1, padding_byte + 1): - if msg[-i] != padding_byte: - print("Wrong privkey!") - raise Exception() - return msg[:-padding_byte] - -def encrypt(n, k, order, GF): - G_ = GF(read_pubkey()) - with open("text.txt", "r") as f: - text = f.read() - text = text.encode() - with open("message.txt", "w") as f: - while len(text) > k - 1: - tmp = text[: k - 1] - text = text[k - 1 :] - c = encrypt_one(n, k, order, GF, G_, tmp) - f.write(" ".join([str(i) for i in c])) - f.write("\n") - c = encrypt_one(n, k, order, GF, G_, text) - f.write(" ".join([str(i) for i in c])) - -def encrypt_one(n, k, order, GF, G_, text): - msg = pad_message(text, k) - m = GF(msg) - c = m.T @ G_ - t = (n - k) // 2 - z = np.zeros(n, dtype = int) - p = [i for i in range(n)] - for i in range(t): - ind = p.pop(random.randint(0, n - 1 - i)) - z[ind] += random.randint(1, order - 1) - z[ind] %= order - return c + GF(z) - -def decrypt(n, GF, rs): - S_inv = np.linalg.inv(GF(read_privkey_s())) - P_inv = GF(build_P_inv(n, GF, read_privkey_p())) - s = [] - with open("message.txt", "r") as inp, open("text.txt", "w") as out: - while True: - msg = inp.readline() - if not msg: - break - msg = GF(list(map(int, msg.split()))) - s += decrypt_one(rs, S_inv, P_inv, msg) - out.write(bytes(s).decode()) - -def decrypt_one(rs, S_inv, P_inv, msg): - msg = msg @ P_inv - msg, e = rs.decode(msg, errors = True) - if e == -1: - print("Too many erroneous values in message!") - raise Exception() - msg = msg @ S_inv - msg = [int(i) for i in msg] - msg = unpad_message(msg) - return msg - -def restore_G_(n, GF, rs): - S = GF(read_privkey_s()) - G = rs.G - P = GF(build_P(n, GF, read_privkey_p())) - G_ = S @ G @ P - write_pubkey(G_) - -def break_S(n, k, GF): - G_ = GF(read_pubkey()) - P_inv = GF(build_P_inv(n, GF, read_privkey_p())) - S = G_ @ P_inv - S = S[:, : k] - rows = [" ".join([str(int(cell)) for cell in row]) for row in S] - output = "\n".join(rows) - with open("privkey_s.txt", "w") as f: - f.write(output) - -def break_P(n, GF, rs): - G_ = GF(read_pubkey()) - S_inv = np.linalg.inv(GF(read_privkey_s())) - G = rs.G - G = G.T - G = [[int(i) for i in j] for j in G] - GP = S_inv @ G_ - GP = GP.T - GP = [[int(i) for i in j] for j in GP] - p = [0 for i in range(n)] - f = False - for i in range(n): - f = False - for j in range(n): - if G[i] == GP[j]: - p[i] = j - f = True - break - if f: - continue - print("Wrong pubkey and privkey_s combination!") - raise Exception() - output = " ".join([str(i) for i in p]) - with open("privkey_p.txt", "w") as f: - f.write(output) - -if __name__ == "__main__": - main() diff --git a/app_local/cryptosystem_core_v2.py b/cryptosystem_core.py similarity index 100% rename from app_local/cryptosystem_core_v2.py rename to cryptosystem_core.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8809594 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +numpy +galois