예제 #1
0
    def handleConnection(self, conn, addr):
        try:
            key = conn.recv(1024)
            username = Encryption().decryptMsg(conn.recv(1024), key)["msg"]

            roomId = 0

            while True:
                roomId = Encryption().decryptMsg(conn.recv(1024), key)["msg"]
                if roomId == 0:
                    room = Room(self)
                    roomId = room.roomId
                    self.rooms[roomId] = room
                    break
                elif roomId not in self.rooms:
                    # vet det er dumt, men for den første gangen må den gjøre det her, tror ikke det gjør så mye
                    conn.sendall(Encryption().encryptMsg(False, key))
                else:
                    break

            room = self.rooms[roomId]

            newCon = threading.Thread(target=serverConnection,
                                      args=(conn, addr, key, room, username))
            newCon.start()
        except:
            print("Det skjedde en feil, klient forlot mest sannsynlig")
            return
예제 #2
0
    def joinRoom(self, username="******", roomId="12346"):
        if self.connected:
            self.username = username
            try:

                self.sock.sendall(Encryption().encryptMsg(
                    self.username, self.key))

                self.sock.sendall(Encryption().encryptMsg(roomId, self.key))

                msg = self.sock.recv(1024)
                msg = Encryption().decryptMsg(msg, self.key)

                if msg["msg"] == False:
                    return False

                self.clientId, self.roomId = msg["msg"]

                return True

            except Exception as e:
                print(e)
                return False
        else:
            print("Not connected")
            return False
예제 #3
0
    def handleConnection(self, conn, addr):
        key = conn.recv(1024)

        while True:
            try:
                username = Encryption().decryptMsg(conn.recv(1024), key)["msg"]

                roomId = int(Encryption().decryptMsg(conn.recv(1024),
                                                     key)["msg"])

                if roomId == 0:
                    room = Room(self)
                    roomId = room.roomId
                    self.rooms[roomId] = room
                    break
                elif roomId not in self.rooms:
                    conn.sendall(Encryption().encryptMsg(False, key))
                else:
                    break
            except:
                print("Klient forlot")
                return
                # conn.close()

        print("startet new con")
        room = self.rooms[roomId]

        newCon = threading.Thread(target=serverConnection,
                                  args=(conn, addr, key, room, username))
        newCon.start()
예제 #4
0
    def __joinRoom(self):
        print("0 betyr nytt rom")
        roomId = int(input("RoomId: "))
        self.sock.sendall(Encryption().encryptMsg(roomId, self.key))

        msg = self.sock.recv(1024)
        msg = Encryption().decryptMsg(msg, self.key)
        return msg, roomId
예제 #5
0
    def test_encrypt1(self):
        self.enc1 = Encryption(b"HELLO RED BULL ALL DAY IPA", "fee fi fo")
        hash1 = self.enc.encrypt()

        self.enc2 = Encryption(b"HELLO RED BULL ALL DAY IPA", "fee fi fo")
        hash2 = self.enc2.encrypt()

        self.assertNotEqual(hash1, hash2)
예제 #6
0
    def sendMsg(self, msg, username=None, senderId=None):
        if username == None and senderId == None:
            username = self.username
            senderId = self.clientId

        msg = Encryption().encryptMsg(msg, self.key, username=username, senderId=senderId)
        self.conn.sendall(msg)
예제 #7
0
    def connect(self,
                username="******",
                roomId="12345",
                host="127.0.0.1",
                port="9001"):
        self.host = host
        self.port = int(port)
        self.key = fernet.Fernet.generate_key()
        try:
            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.sock.connect((self.host, self.port))
            self.connected = True

            self.sock.sendall(self.key)

            self.username = str(input("Username: "******"msg"] == False:
                print(f"Fant ikke rom med roomId {roomId}")
                msg, roomId = self.__joinRoom()

            self.clientId, self.roomId = msg["msg"]

            print(f"Din klientId: {self.clientId}\nDin romId: {self.roomId}")

            self.thread = threading.Thread(target=self.listen)
            self.thread.start()

        except Exception as e:
            print("Klarte ikke å koble til\n", e)
예제 #8
0
    def get_unique_words(self, file_path):
        all_unique_words = []

        files = glob.glob(file_path, recursive=True)

        for file in files:
            document_identifier = 'document' + str(self.document_number)
            self.document_number += 1
            unique_word_count = 0
            unique_words_in_document = set()
            f = open(file, 'r')
            for line in f:
                for word in line.split():
                    word = word.lower()
                    if word not in unique_words_in_document:
                        unique_words_in_document.add(word)
                        unique_word_count += 1
            f.close()

            if unique_word_count > self.unique_word_count:
                self.unique_word_count = unique_word_count+25

            all_unique_words.append((document_identifier, unique_words_in_document))

            # Create an encrypted file and store it in the encrypted files folder
            encrypt = Encryption(file, document_identifier)
            encrypt.encrypt()

        return all_unique_words
예제 #9
0
 def cryptography_choice(self):
     if self._cryptography == '1':
         encryption = Encryption(self.message)
         return encryption.transform(self.cipher, self.shift_num)
     elif self._cryptography == '2':
         decryption = Decryption(self.message)
         return decryption.transform(self.cipher)
예제 #10
0
    def handle_connection(self, client_socket, client_address):
        DH = GenerateKey(self.rollnumber)
        peerhash = int(client_socket.recv(4096).decode())
        client_socket.send(str(DH.hashkey).encode())
        DH.gen_key(peerhash)
        En = Encryption(DH.finalkey)

        data = client_socket.recv(4096)
        if not data:
            client_socket.close()
            return
        data = En.decrypt(data)
        print(data.decode())
        if 'sent a file' in data.decode():
            client_socket.send('ok'.encode())
            data = client_socket.recv(4096)
            filename = En.decrypt(data).decode()
            with open(filename, 'wb') as f:
                print('receiving data...', end="")
                while True:
                    data = client_socket.recv(4096)
                    data = En.decrypt(data)
                    if not data:
                        break
                    f.write(data)
                    client_socket.send('ok'.encode())
                print("done")
        client_socket.close()
예제 #11
0
    def listen(self):
        while True:
            msg = self.conn.recv(1024)

            if len(msg) == 0:
                self.room.newMsg(self.username + " left",
                                 username=self.username,
                                 senderId=self.clientId)
                self.room.removeClient(self.clientId)
                break

            if len(msg) > 0:
                try:
                    msg = Encryption().decryptMsg(msg, self.key)

                    self.room.newMsg(msg["msg"],
                                     username=self.username,
                                     senderId=self.clientId)

                except Exception as e:
                    print(e)
                    break

        self.conn.close()
        print(f"{str(self.adr)} stoppet")
예제 #12
0
def download(file):
    if "key" not in request.form:
        return "No key provided"

    key = request.form["key"]

    name = redis_cli.get(file)
    key_hash = redis_cli.get(f"{file}-key")
    iv = redis_cli.get(f"{file}-iv")

    if not name:
        return "No file with that ID exists"

    elif hashlib.sha512(key.encode()).hexdigest() != key_hash.decode():
        return "Invalid key"

    with open(os.path.join(app.config["UPLOAD_FOLDER"], name.decode()),
              "rb") as resp:
        encrypted_file_data = resp.read()
        os.remove(os.path.join(app.config["UPLOAD_FOLDER"], name.decode()))

        cipher = Encryption(key)
        file_data = cipher.decrypt(encrypted_file_data, iv)

        redis_cli.delete(file)
        redis_cli.delete(f"{file}-iv")
        redis_cli.delete(f"{file}-key")

        return send_file(BytesIO(file_data),
                         as_attachment=True,
                         attachment_filename=name.decode())
예제 #13
0
    def sendMsg(self, msg="TEST"):
        try:
            msg = Encryption().encryptMsg(msg, self.key)
            self.sock.sendall(msg)

        except Exception as e:
            print(e)
            print("Feil med å sende melding")
 def get_value(self, section, name):
   self.conf_par.read(self.filename)
   if name == 'password':
     decrypt = Encryption(self._get_serial())
     value = decrypt.decrypt_msg(self.conf_par.get(section, name))
   else:
     value = self.conf_par.get(section, name)
   return value
예제 #15
0
 def listen(self):
     while True:
         msg = self.sock.recv(1024)
         msg = Encryption().decryptMsg(msg, self.key)
         if msg["clientId"] == self.clientId:
             print("You: " + str(msg["msg"]))
         else:
             print(msg["username"] + ": " + msg["msg"])
 def set_value(self, section, name, value):
   if name == 'password':
     encrypt = Encryption(self._get_serial())
     self.conf_par.set(section, name, encrypt.encrypt_msg(value))
   else:
     conf_par.set(section, name, value)
   with open(self.filename, 'wb') as configfile:
     self.conf_par.write(configfile)
예제 #17
0
 def initEncryption(self, salt):
     self.encryption = Encryption(salt)
     # Validation
     secrets = self.storage.read()
     keys = list(secrets)
     if len(keys) > 0:
         return self.encryption.validate(secrets[keys[0]])
     return False
예제 #18
0
 def test_encryption(self):
     req_data = {
         "method": "get",
         "url": "http://127.0.0.1:9999/demo1.txt",
         "headers": None,
         "encoding": "base64"
     }
     ar = Encryption().send(req_data)
     print(ar)
예제 #19
0
    def post_checking(self, *kwargs):

        if (len(self.__user_entry.get()) == 0
                or len(self.__password_entry.get()) == 0):

            messagebox.showerror("Error", "Username or Password is Empty!")

        else:
            self.checker = Encryption()

            try:

                if self.__user_entry.get().rstrip(
                ) == self.credentials.find_one({
                        "user_name":
                        self.__user_entry.get().rstrip()
                }).get("user_name"):

                    if self.__password_entry.get() == self.checker.decrypt(
                            self.credentials.find_one({
                                "user_name":
                                self.__user_entry.get().rstrip()
                            }).get("password").encode()).decode():

                        messagebox.showinfo(
                            "WELCOME!",
                            (self.__user_entry.get().split("_")[0]).title())

                        self.main_page.canvases.update({
                            "info_page":
                            InfoPage(self.main_page.interface, self.main_page,
                                     self.__user_entry.get())
                        })

                        self.destroy()
                        self.__init__(self.parent, self.main_page)

                        self.main_page.show_canvas("info_page")

                    else:

                        messagebox.showerror(
                            "Error!",
                            "Incorrect Password!\nCheck for white space at the end!!"
                        )

                else:

                    messagebox.showerror("Error!",
                                         "No user found.\nCheck user name.")
                    self.__password_entry.delete(0, "end")

            except AttributeError:

                messagebox.showerror("Error", "Username doesn't exist.")
예제 #20
0
    def AutoLogin(self):
        Crf = File()
        Encrypt = Encryption()

        if(Crf.isFile()):
            data = Crf.Open()
            ra = data[0]
            password = data[1]
            Login = LoginUTF(Encrypt.Decrypt(ra),Encrypt.Decrypt(password))
            return Login.Login()
        return False
예제 #21
0
    def __init__(self, address: str):

        self.address = address
        self.url = f"http://{address}/app"
        logger.debug(f"Device url is: {self.url}")

        self.encryption = Encryption()
        self.key_pair: KeyPair
        self.cookie_token: str = ""
        self.token: str = ""

        self.tp_link_cipher: TpLinkCipher = None
    def __init__(self, config, mac, key):
        self.mac = mac
        self.config = config
        self.credentials = pika.PlainCredentials(config["rabbitmq_login"],
                                                 config["rabbitmq_password"])
        self.buffer = deque(maxlen=128)
        self.connected = False
        self.send_thread = Thread(target=self.send_messages_thread)

        self.send_thread.start()
        self.pooling_connect()
        self.encryption = Encryption(key)

        print(" [*] RabbitMQ client created.")
예제 #23
0
 def getKeys(self):
     if (len(sys.argv) > 2):
         cypher = Cypher(sys.argv[1], sys.argv[2])
         if (len(sys.argv) > 3):
             self.pubKey = sys.argv[3]
         return chyper
     #generate keys
     enc = Encryption(79, 83)
     print("priv:" + str(enc.private))
     print("pub:" + str(enc.pub))
     print("mod:" + str(enc.n))
     cypher = Cypher(enc.private, enc.n)
     self.pubKey = enc.pub
     return cypher
    def __init__(self, dispatcher, config, mac, key):
        self.mac = mac
        self.config = config
        self.dispatcher = dispatcher

        self.credentials = pika.PlainCredentials(config["rabbitmq_login"],
                                                 config["rabbitmq_password"])

        self.connected = False
        #self.message = messages_pb2.Code()

        self.encryption = Encryption(key)

        self._thread = Thread(target=self._receiver_thread)
        self._thread.start()
예제 #25
0
    def GetText(self, evt):
        text = ""
        ra = self.ra.GetValue()
        password = self.password.GetValue()

        Encrypt = Encryption()
        Crf = File()

        Crf.Save(Encrypt.Encrypt(ra), Encrypt.Encrypt(password))
        Login = LoginUTF(ra, password)
        if Login.Login():
            SM = wx.MessageBox("Login Successful", "Login", wx.OK)
            SM.ShowModal()
        else:
            FM = wx.MessageBox("Login Unsuccessful", "Login", wx.OK)
            FM.ShowModal()
예제 #26
0
 def __init__(self, address, display_message, start_new_server):
     """
     :param address: адресс сервера, например: ('127.0.0.1' , 25000)
     :param display_message: функция которая будет вызываться при получении сообщения
     :param start_new_server: функция которая будет вызываться когда нужно создать новый сервер
     """
     self.server_address = address
     self.display_message = display_message
     self._start_new_server = start_new_server
     self.connections_list = []
     self.connections_info = []
     self._encryption = Encryption()
     self.has_new_connections_info = True
     self._running = True
     self.sock = socket.socket()
     thread = Thread(target=self._receive_data)
     thread.daemon = True
     thread.start()
예제 #27
0
    def listen(self):
        while True:
            msg = self.sock.recv(1024)
            try:
                msgArr = Encryption().decryptMsg(msg, self.key)
                print(msgArr)
            except:
                print("Stopped listener")
                self.disconnect()
                break

            if msgArr["clientId"] == self.clientId:
                msg = str(msgArr["msg"])
                client = True
            else:
                msg = msgArr["username"] + ": " + msgArr["msg"]
                client = False

            self.gui.newMsg(msg, client, color=msgArr["color"])
예제 #28
0
 def __init__(self, ip, port, router):
     self.ip = ip
     self.port = port
     #init socket
     self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     self.sock.bind((self.ip, self.port))
     #init handlers
     self.handlers = {
         "bootstrap": self.bootstrap_handler,
         "ping": self.ping_handler,
         "search": self.search_handler,
         "store": self.store_hander,
         "app": self.app_handler,
         "encrypted": self.encryption_handler
     }
     self.router = router
     self.apps = {}
     self.enc = Encryption()
     self.flag = True
예제 #29
0
    def __init__(self, server_address):
        """
        :param server_address: например: ('127.0.0.1', 25000)
        """
        self.address = server_address
        self._sock = socket.socket()
        self._sock.bind(self.address)
        self._connections = {}
        self._main_client = None
        self._messages = []
        self._encryption = Encryption()
        self._running = True
        self._sock.listen(32)

        self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        thread = Thread(target=self._waiting_for_connections)
        thread.daemon = True
        thread.start()
        thread = Thread(target=self._send_to_all)
        thread.daemon = True
        thread.start()
예제 #30
0
def upload_file():
    if "file" not in request.files:
        return "No file provided"

    elif "key" not in request.form:
        return "No key provided"

    file = request.files["file"]
    key = request.form["key"]

    file_data = file.read()
    if len(file_data) <= 8:
        return "File is too small."
    elif len(key) < 4:
        return "Key is too short. Must be between 4 and 56 characters."
    elif len(key) > 56:
        return "Key is too long. Must be between 4 and 56 characters."

    cipher = Encryption(key)
    encrypted_file_data, iv = cipher.encrypt(file_data)

    name = file.filename.split(".")

    if len(name) == 1:
        extension = ""
    else:
        extension = ".".join(name[1:])

    file_id = f"{uuid.uuid4().hex}.{extension}"

    with open(os.path.join(app.config["UPLOAD_FOLDER"], file_id), "wb") as f:
        f.write(encrypted_file_data)

    id = generate_random_id()
    redis_cli.set(id, file_id)
    redis_cli.set(f"{id}-iv", iv)
    redis_cli.set(f"{id}-key", hashlib.sha512(key.encode()).hexdigest())

    return f"https://trimly.fm/{id}"