Пример #1
0
 def setUp(self):
     self.old_key       = MasterKey()
     self.new_key       = MasterKey(master_key=os.urandom(32))
     self.settings      = Settings()
     self.o_struct_pack = struct.pack
     self.time          = datetime.fromtimestamp(struct.unpack('<L', binascii.unhexlify('08ceae02'))[0]).strftime('%H:%M')
     struct.pack        = lambda *_: binascii.unhexlify('08ceae02')
Пример #2
0
 def setUp(self):
     self.unittest_dir = cd_unittest()
     self.old_key = MasterKey()
     self.new_key = MasterKey(master_key=os.urandom(SYMMETRIC_KEY_LENGTH))
     self.settings = Settings()
     self.tmp_file_name = f"{DIR_USER_DATA}{self.settings.software_operation}_logs_temp"
     self.time = STATIC_TIMESTAMP
Пример #3
0
 def setUp(self):
     self.master_key = MasterKey()
     self.settings = Settings()
     self.keylist = KeyList(MasterKey(), Settings())
     self.keylist.keysets = [
         create_keyset(n, store_f=self.keylist.store_keys)
         for n in ['Alice', 'Bob', 'Charlie']
     ]
     self.keylist.store_keys()
Пример #4
0
 def setUp(self) -> None:
     """Pre-test actions."""
     self.unit_test_dir  = cd_unit_test()
     self.old_master_key = MasterKey()
     self.new_master_key = MasterKey(master_key=os.urandom(SYMMETRIC_KEY_LENGTH))
     self.settings       = Settings()
     self.tmp_file_name  = f"{DIR_USER_DATA}{self.settings.software_operation}_logs_temp"
     self.time           = STATIC_TIMESTAMP
     self.log_file       = f'{DIR_USER_DATA}{self.settings.software_operation}_logs'
     self.message_log    = MessageLog(self.log_file, self.old_master_key.master_key)
Пример #5
0
    def test_invalid_group_message_header(self):
        # Setup
        message = b'testgroup'
        ts = datetime.datetime.now()
        apct_list = self.create_message_apct(ORIGIN_CONTACT_HEADER,
                                             message,
                                             header=GROUP_MESSAGE_HEADER)
        contact_list = ContactList(nicks=['Alice', 'Bob', 'local'])
        key_list = KeyList(nicks=['Alice', 'Bob', 'local'])
        keyset = key_list.get_keyset('*****@*****.**')
        keyset.rx_harac = 1
        keyset.rx_key = 32 * b'\x01'
        keyset.rx_hek = 32 * b'\x01'
        group_list = GroupList(groups=['testgroup'])
        settings = Settings()
        packet_list = PacketList(contact_list=contact_list, settings=settings)
        window_list = WindowList(contact_list=contact_list,
                                 group_list=group_list,
                                 packet_list=packet_list,
                                 settings=settings)
        master_key = MasterKey()

        # Test
        for p in apct_list:
            self.assertFR("Received an invalid group message.",
                          process_message, ts, p, window_list, packet_list,
                          contact_list, key_list, group_list, settings,
                          master_key)
Пример #6
0
    def test_group_remove_member_msg(self):
        # Setup
        message = b'testgroup' + US_BYTE + b'*****@*****.**' + US_BYTE + b'*****@*****.**'
        ts = datetime.datetime.now()
        apct_list = self.create_message_apct(ORIGIN_CONTACT_HEADER,
                                             message,
                                             header=GROUP_MSG_MEMBER_RM_HEADER)
        contact_list = ContactList(nicks=['Alice', 'Bob', 'local'])
        key_list = KeyList(nicks=['Alice', 'Bob', 'local'])
        keyset = key_list.get_keyset('*****@*****.**')
        keyset.rx_harac = 1
        keyset.rx_key = 32 * b'\x01'
        keyset.rx_hek = 32 * b'\x01'
        group_list = GroupList(groups=['testgroup'])
        settings = Settings()
        packet_list = PacketList(contact_list=contact_list, settings=settings)
        window_list = WindowList(contact_list=contact_list,
                                 group_list=group_list,
                                 packet_list=packet_list,
                                 settings=settings)
        master_key = MasterKey()

        # Test
        for p in apct_list:
            self.assertIsNone(
                process_message(ts, p, window_list, packet_list, contact_list,
                                key_list, group_list, settings, master_key))

        # Teardown
        cleanup()
Пример #7
0
 def setUp(self):
     self.unittest_dir = cd_unittest()
     self.win_name     = nick_to_pub_key("Alice")
     self.contact_list = ContactList()
     self.group_list   = GroupList()
     self.settings     = Settings()
     self.master_key   = MasterKey()
Пример #8
0
 def setUp(self):
     self.contact_list = ContactList(nicks=['Alice'])
     self.group_list = GroupList()
     self.settings = Settings()
     self.queues = gen_queue_dict()
     self.master_key = MasterKey()
     self.args = self.contact_list, self.group_list, self.settings, self.queues, self.settings
Пример #9
0
    def test_add_contact(self):
        tx_fingerprint = FINGERPRINT_LENGTH * b'\x03'
        rx_fingerprint = FINGERPRINT_LENGTH * b'\x04'

        self.assertIsNone(
            self.contact_list.add_contact(
                nick_to_pub_key('Faye'), 'Faye', tx_fingerprint,
                rx_fingerprint, KEX_STATUS_UNVERIFIED,
                self.settings.log_messages_by_default,
                self.settings.accept_files_by_default,
                self.settings.show_notifications_by_default))

        # Test new contact was stored by loading
        # the database from file to another object
        contact_list2 = ContactList(MasterKey(), Settings())
        faye = contact_list2.get_contact_by_pub_key(nick_to_pub_key('Faye'))

        self.assertEqual(len(self.contact_list),
                         len(self.real_contact_list) + 1)
        self.assertIsInstance(faye, Contact)

        self.assertEqual(faye.tx_fingerprint, tx_fingerprint)
        self.assertEqual(faye.rx_fingerprint, rx_fingerprint)
        self.assertEqual(faye.kex_status, KEX_STATUS_UNVERIFIED)

        self.assertEqual(faye.log_messages,
                         self.settings.log_messages_by_default)
        self.assertEqual(faye.file_reception,
                         self.settings.accept_files_by_default)
        self.assertEqual(faye.notifications,
                         self.settings.show_notifications_by_default)
Пример #10
0
    def setUp(self):
        self.unittest_dir = cd_unittest()

        self.msg = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean condimentum consectetur purus quis"
                    " dapibus. Fusce venenatis lacus ut rhoncus faucibus. Cras sollicitudin commodo sapien, sed bibendu"
                    "m velit maximus in. Aliquam ac metus risus. Sed cursus ornare luctus. Integer aliquet lectus id ma"
                    "ssa blandit imperdiet. Ut sed massa eget quam facilisis rutrum. Mauris eget luctus nisl. Sed ut el"
                    "it iaculis, faucibus lacus eget, sodales magna. Nunc sed commodo arcu. In hac habitasse platea dic"
                    "tumst. Integer luctus aliquam justo, at vestibulum dolor iaculis ac. Etiam laoreet est eget odio r"
                    "utrum, vel malesuada lorem rhoncus. Cras finibus in neque eu euismod. Nulla facilisi. Nunc nec ali"
                    "quam quam, quis ullamcorper leo. Nunc egestas lectus eget est porttitor, in iaculis felis sceleris"
                    "que. In sem elit, fringilla id viverra commodo, sagittis varius purus. Pellentesque rutrum loborti"
                    "s neque a facilisis. Mauris id tortor placerat, aliquam dolor ac, venenatis arcu.")

        self.ts         = datetime.now()
        self.master_key = MasterKey()
        self.settings   = Settings(log_file_masking=True)
        self.file_name  = f'{DIR_USER_DATA}{self.settings.software_operation}_logs'

        self.contact_list = ContactList(nicks=['Alice', 'Bob', 'Charlie', LOCAL_ID])
        self.key_list     = KeyList(    nicks=['Alice', 'Bob', 'Charlie', LOCAL_ID])
        self.group_list   = GroupList( groups=['test_group'])
        self.packet_list  = PacketList(contact_list=self.contact_list, settings=self.settings)
        self.window_list  = WindowList(contact_list=self.contact_list, settings=self.settings, 
                                       group_list=self.group_list, packet_list=self.packet_list)
        self.group_id     = group_name_to_group_id('test_group')
        self.file_keys    = dict()

        self.group_list.get_group('test_group').log_messages = True
        self.args = (self.window_list, self.packet_list, self.contact_list, self.key_list, 
                     self.group_list, self.settings, self.master_key, self.file_keys)

        ensure_dir(DIR_USER_DATA)
Пример #11
0
    def test_file(self):
        # Setup
        ts = datetime.datetime.now()
        apct_list = self.create_file_apct()
        contact_list = ContactList(nicks=['Alice', 'Bob', 'local'])
        key_list = KeyList(nicks=['Alice', 'Bob', 'local'])
        keyset = key_list.get_keyset('*****@*****.**')
        keyset.rx_harac = 1
        keyset.rx_key = 32 * b'\x01'
        keyset.rx_hek = 32 * b'\x01'
        group_list = GroupList(groups=['testgroup'])
        settings = Settings()
        packet_list = PacketList(contact_list=contact_list, settings=settings)
        window_list = WindowList(contact_list=contact_list,
                                 group_list=group_list,
                                 packet_list=packet_list,
                                 settings=settings)
        master_key = MasterKey()

        # Test
        for p in apct_list:
            self.assertIsNone(
                process_message(ts, p, window_list, packet_list, contact_list,
                                key_list, group_list, settings, master_key))

        # Teardown
        shutil.rmtree('received_files/')
Пример #12
0
    def test_function_logs_traffic_masking_data(self):
        # Setup
        settings   = Settings(log_file_placeholder_data=False,
                              logfile_masking=True,
                              session_traffic_masking=True)
        master_key = MasterKey()
        queues     = {LOG_PACKET_QUEUE: Queue(),
                      UNITTEST_QUEUE:   Queue()}

        def queue_delayer():
            """Place messages to queue one at a time."""
            for p in [(False, False, M_S_HEADER + bytes(PADDING_LEN), '*****@*****.**', settings, master_key),   # Do not log message (boolean)
                      (True,  False, C_S_HEADER + bytes(PADDING_LEN), None,               settings, master_key),   # Do not log command
                      (True,  True,  F_S_HEADER + bytes(PADDING_LEN), '*****@*****.**', settings, master_key),   # Log placeholder data
                      (True,  False, M_S_HEADER + bytes(PADDING_LEN), '*****@*****.**', settings, master_key)]:  # Log message (boolean)
                time.sleep(0.1)
                queues[LOG_PACKET_QUEUE].put(p)
            time.sleep(0.1)
            queues[UNITTEST_QUEUE].put(EXIT)
            time.sleep(0.1)
            queues[LOG_PACKET_QUEUE].put((True, True, P_N_HEADER + bytes(PADDING_LEN), '*****@*****.**', settings, master_key))  # Log noise packet

        # Test
        threading.Thread(target=queue_delayer).start()
        log_writer_loop(queues, unittest=True)

        self.assertEqual(os.path.getsize(f'{DIR_USER_DATA}ut_logs'), 3*LOG_ENTRY_LENGTH)

        # Teardown
        for key in queues:
            while not queues[key].empty():
                queues[key].get()
            time.sleep(0.1)
            queues[key].close()
Пример #13
0
    def setUp(self):
        self.msg = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean condimentum consectetur purus quis"
                    " dapibus. Fusce venenatis lacus ut rhoncus faucibus. Cras sollicitudin commodo sapien, sed bibendu"
                    "m velit maximus in. Aliquam ac metus risus. Sed cursus ornare luctus. Integer aliquet lectus id ma"
                    "ssa blandit imperdiet. Ut sed massa eget quam facilisis rutrum. Mauris eget luctus nisl. Sed ut el"
                    "it iaculis, faucibus lacus eget, sodales magna. Nunc sed commodo arcu. In hac habitasse platea dic"
                    "tumst. Integer luctus aliquam justo, at vestibulum dolor iaculis ac. Etiam laoreet est eget odio r"
                    "utrum, vel malesuada lorem rhoncus. Cras finibus in neque eu euismod. Nulla facilisi. Nunc nec ali"
                    "quam quam, quis ullamcorper leo. Nunc egestas lectus eget est porttitor, in iaculis felis sceleris"
                    "que. In sem elit, fringilla id viverra commodo, sagittis varius purus. Pellentesque rutrum loborti"
                    "s neque a facilisis. Mauris id tortor placerat, aliquam dolor ac, venenatis arcu.").encode()

        self.ts              = datetime.now()
        self.master_key      = MasterKey()
        self.settings        = Settings(logfile_masking=True)

        self.contact_list    = ContactList(nicks=['Alice', 'Bob', 'Charlie', LOCAL_ID])
        self.key_list        = KeyList(    nicks=['Alice', 'Bob', 'Charlie', LOCAL_ID])
        self.group_list      = GroupList( groups=['testgroup'])
        self.packet_list     = PacketList(contact_list=self.contact_list, settings=self.settings)
        self.window_list     = WindowList(contact_list=self.contact_list, settings=self.settings, group_list=self.group_list, packet_list=self.packet_list)
        self.group_list.get_group('testgroup').log_messages = True
        for account in self.contact_list.get_list_of_accounts():
            keyset          = self.key_list.get_keyset(account)
            keyset.tx_harac = 1
            keyset.rx_harac = 1
            keyset.tx_hek   = KEY_LENGTH * b'\x01'
            keyset.rx_hek   = KEY_LENGTH * b'\x01'
            keyset.tx_key   = KEY_LENGTH * b'\x01'
            keyset.rx_key   = KEY_LENGTH * b'\x01'

        self.message = b'testgroup' + US_BYTE + b'*****@*****.**' + US_BYTE + b'*****@*****.**'
Пример #14
0
    def test_function_logs_traffic_masking_data(self) -> None:
        # Setup
        settings   = Settings(log_file_masking=True,
                              traffic_masking=False)
        master_key = MasterKey()
        queues     = gen_queue_dict()

        queues[TRAFFIC_MASKING_QUEUE].put(True)

        def queue_delayer() -> None:
            """Place messages to the logging queue one at a time."""
            for p in [(nick_to_pub_key('Alice'), M_S_HEADER + bytes(PADDING_LENGTH), False, False, master_key),
                      (None,                     C_S_HEADER + bytes(PADDING_LENGTH), True,  False, master_key),
                      (nick_to_pub_key('Alice'), F_S_HEADER + bytes(PADDING_LENGTH), True,  True,  master_key),
                      (nick_to_pub_key('Alice'), M_S_HEADER + bytes(PADDING_LENGTH), True,  False, master_key)]:
                queues[LOG_PACKET_QUEUE].put(p)
                time.sleep(SLEEP_DELAY)

            queues[UNIT_TEST_QUEUE].put(EXIT)
            time.sleep(SLEEP_DELAY)

            queues[LOG_PACKET_QUEUE].put(
                (nick_to_pub_key('Alice'), P_N_HEADER + bytes(PADDING_LENGTH), True, True, master_key))
            time.sleep(SLEEP_DELAY)

        # Test
        threading.Thread(target=queue_delayer).start()
        self.assertIsNone(log_writer_loop(queues, settings, self.message_log, unit_test=True))

        # Teardown
        tear_queues(queues)
Пример #15
0
    def setUp(self):
        self.masterkey = MasterKey()
        self.settings  = Settings()
        self.window    = RxWindow(type=WIN_TYPE_CONTACT, uid='*****@*****.**', name='Alice')

        self.contact_list          = ContactList(self.masterkey, self.settings)
        self.contact_list.contacts = list(map(create_contact, ['Alice', 'Charlie']))

        self.time = datetime.fromtimestamp(struct.unpack('<L', binascii.unhexlify('08ceae02'))[0]).strftime('%H:%M')

        self.group_list = GroupList(groups=['test_group'])
        group           = self.group_list.get_group('test_group')
        group.members   = self.contact_list.contacts

        self.o_struct = struct.pack
        struct.pack   = lambda *_: binascii.unhexlify('08ceae02')

        self.msg = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean condimentum consectetur purus quis"
                    " dapibus. Fusce venenatis lacus ut rhoncus faucibus. Cras sollicitudin commodo sapien, sed bibendu"
                    "m velit maximus in. Aliquam ac metus risus. Sed cursus ornare luctus. Integer aliquet lectus id ma"
                    "ssa blandit imperdiet. Ut sed massa eget quam facilisis rutrum. Mauris eget luctus nisl. Sed ut el"
                    "it iaculis, faucibus lacus eget, sodales magna. Nunc sed commodo arcu. In hac habitasse platea dic"
                    "tumst. Integer luctus aliquam justo, at vestibulum dolor iaculis ac. Etiam laoreet est eget odio r"
                    "utrum, vel malesuada lorem rhoncus. Cras finibus in neque eu euismod. Nulla facilisi. Nunc nec ali"
                    "quam quam, quis ullamcorper leo. Nunc egestas lectus eget est porttitor, in iaculis felis sceleris"
                    "que. In sem elit, fringilla id viverra commodo, sagittis varius purus. Pellentesque rutrum loborti"
                    "s neque a facilisis. Mauris id tortor placerat, aliquam dolor ac, venenatis arcu.").encode()
Пример #16
0
    def test_lw_process(self):
        # Setup
        cleanup()
        m_queue = multiprocessing.Queue()
        lwp     = multiprocessing.Process(target=log_writer, args=(m_queue,))
        lwp.start()
        time.sleep(0.1)

        settings   = Settings()
        master_key = MasterKey()

        m_queue.put((P_N_HEADER + bytes(255), '*****@*****.**', settings, master_key))
        m_queue.put((M_S_HEADER + bytes(255), '*****@*****.**', settings, master_key))
        m_queue.put((F_S_HEADER + bytes(255), '*****@*****.**', settings, master_key))

        time.sleep(0.2)
        lwp.terminate()

        # Test
        self.assertTrue(os.path.isfile(f'{DIR_USER_DATA}/ut_logs'))
        entry_size = 24 + 4 + 1 + 1024 + 1 + 255 + 16
        self.assertTrue(os.path.getsize(f'{DIR_USER_DATA}/ut_logs') % entry_size == 0)

        # Teardown
        cleanup()
Пример #17
0
    def test_invalid_window_raises_fr(self):
        # Setup
        message = b'testgroup'
        ts = datetime.datetime.now()
        timestamp = double_to_bytes(time.time() * 1000)
        header = GROUP_MESSAGE_HEADER + timestamp + b'test_group' + US_BYTE
        apct_list = self.create_message_apct(ORIGIN_CONTACT_HEADER,
                                             message,
                                             header=header)
        contact_list = ContactList(nicks=['Alice', 'Bob', 'local'])
        key_list = KeyList(nicks=['Alice', 'Bob', 'local'])
        keyset = key_list.get_keyset('*****@*****.**')
        keyset.rx_harac = 1
        keyset.rx_key = 32 * b'\x01'
        keyset.rx_hek = 32 * b'\x01'
        group_list = GroupList(groups=['testgroup'])
        settings = Settings()
        packet_list = PacketList(contact_list=contact_list, settings=settings)
        window_list = WindowList(contact_list=contact_list,
                                 group_list=group_list,
                                 packet_list=packet_list,
                                 settings=settings)
        master_key = MasterKey()

        # Test
        for p in apct_list:
            self.assertFR("Received message to unknown group.",
                          process_message, ts, p, window_list, packet_list,
                          contact_list, key_list, group_list, settings,
                          master_key)

        # Teardown
        cleanup()
Пример #18
0
    def setUp(self):
        self.unittest_dir = cd_unittest()
        self.master_key = MasterKey()
        self.settings = Settings()
        self.window = RxWindow(type=WIN_TYPE_CONTACT,
                               uid=nick_to_pub_key('Alice'),
                               name='Alice',
                               type_print='contact')

        self.contact_list = ContactList(self.master_key, self.settings)
        self.contact_list.contacts = list(
            map(create_contact, ['Alice', 'Charlie']))

        self.time = STATIC_TIMESTAMP

        self.group_list = GroupList(groups=['test_group'])
        self.group = self.group_list.get_group('test_group')
        self.group.members = self.contact_list.contacts
        self.args = self.window, self.contact_list, self.group_list, self.settings, self.master_key

        self.msg = (
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean condimentum consectetur purus quis"
            " dapibus. Fusce venenatis lacus ut rhoncus faucibus. Cras sollicitudin commodo sapien, sed bibendu"
            "m velit maximus in. Aliquam ac metus risus. Sed cursus ornare luctus. Integer aliquet lectus id ma"
            "ssa blandit imperdiet. Ut sed massa eget quam facilisis rutrum. Mauris eget luctus nisl. Sed ut el"
            "it iaculis, faucibus lacus eget, sodales magna. Nunc sed commodo arcu. In hac habitasse platea dic"
            "tumst. Integer luctus aliquam justo, at vestibulum dolor iaculis ac. Etiam laoreet est eget odio r"
            "utrum, vel malesuada lorem rhoncus. Cras finibus in neque eu euismod. Nulla facilisi. Nunc nec ali"
            "quam quam, quis ullamcorper leo. Nunc egestas lectus eget est porttitor, in iaculis felis sceleris"
            "que. In sem elit, fringilla id viverra commodo, sagittis varius purus. Pellentesque rutrum loborti"
            "s neque a facilisis. Mauris id tortor placerat, aliquam dolor ac, venenatis arcu."
        )
Пример #19
0
    def test_group_msg(self):
        # Setup
        ts = datetime.datetime.now()
        apct_list = self.create_message_apct(ORIGIN_CONTACT_HEADER,
                                             b'testmessage',
                                             group_name=b'testgroup')
        contact_list = ContactList(nicks=['Alice', 'Bob', 'local'])
        key_list = KeyList(nicks=['Alice', 'Bob', 'local'])
        keyset = key_list.get_keyset('*****@*****.**')
        keyset.rx_harac = 1
        keyset.rx_key = 32 * b'\x01'
        keyset.rx_hek = 32 * b'\x01'
        group_list = GroupList(groups=['testgroup'])
        group = group_list.get_group('testgroup')
        group.log_messages = True
        settings = Settings()
        packet_list = PacketList(contact_list=contact_list, settings=settings)
        window_list = WindowList(contact_list=contact_list,
                                 group_list=group_list,
                                 packet_list=packet_list,
                                 settings=settings)
        master_key = MasterKey()

        # Test
        for p in apct_list:
            self.assertIsNone(
                process_message(ts, p, window_list, packet_list, contact_list,
                                key_list, group_list, settings, master_key))

        # Teardown
        cleanup()
Пример #20
0
 def setUp(self):
     self.c_queue = Queue()
     self.contact_list = ContactList(nicks=['Alice'])
     self.settings = Settings()
     self.master_key = MasterKey()
     self.o_input = builtins.input
     builtins.input = lambda _: 'Yes'
Пример #21
0
    def test_function(self):
        # Setup
        master_key = MasterKey()
        settings = Settings()
        ts = datetime.datetime.now()
        o_getpass = getpass.getpass
        window_list = WindowList()
        contact_list = ContactList()
        group_list = GroupList()
        key_list = KeyList()
        getpass.getpass = lambda x: 'a'

        write_log_entry(F_S_HEADER + bytes(255), '*****@*****.**', settings,
                        master_key)

        # Test
        self.assertEqual(master_key.master_key, bytes(32))
        self.assertIsNone(
            change_master_key(ts, window_list, contact_list, group_list,
                              key_list, settings, master_key))
        self.assertNotEqual(master_key.master_key, bytes(32))

        # Teardown
        getpass.getpass = o_getpass
        cleanup()
Пример #22
0
    def test_function_logs_traffic_masking_data(self):
        # Setup
        settings   = Settings(log_file_masking=True,
                              traffic_masking=False)
        master_key = MasterKey()
        queues     = gen_queue_dict()

        queues[TRAFFIC_MASKING_QUEUE].put(True)

        def queue_delayer():
            """Place messages to queue one at a time."""
            for p in [(nick_to_pub_key('Alice'), M_S_HEADER + bytes(PADDING_LENGTH), False, False, master_key), 
                      (None,                     C_S_HEADER + bytes(PADDING_LENGTH), True,  False, master_key), 
                      (nick_to_pub_key('Alice'), F_S_HEADER + bytes(PADDING_LENGTH), True,  True,  master_key), 
                      (nick_to_pub_key('Alice'), M_S_HEADER + bytes(PADDING_LENGTH), True,  False, master_key)]:
                queues[LOG_PACKET_QUEUE].put(p)
                time.sleep(0.02)

            queues[UNITTEST_QUEUE].put(EXIT)
            time.sleep(0.02)

            queues[LOG_PACKET_QUEUE].put(
                (nick_to_pub_key('Alice'), P_N_HEADER + bytes(PADDING_LENGTH), True, True, master_key))
            time.sleep(0.02)

        # Test
        threading.Thread(target=queue_delayer).start()
        log_writer_loop(queues, settings, unittest=True)
        self.assertEqual(os.path.getsize(f'{DIR_USER_DATA}{settings.software_operation}_logs'), 3*LOG_ENTRY_LENGTH)

        # Teardown
        tear_queues(queues)
Пример #23
0
    def test_add_contact(self):
        # Setup
        contact1 = Contact('*****@*****.**', '*****@*****.**', 'Alice',
                           32 * b'\x01', 32 * b'\x02', True, True, True)
        contact2 = Contact('*****@*****.**', '*****@*****.**', 'Charlie',
                           32 * b'\x01', 32 * b'\x02', True, True, True)
        settings = Settings(software_operation='ut', m_number_of_accnts=20)
        master_k = MasterKey()
        contact_l = ContactList(master_k, settings)
        contact_l.contacts = [contact1, contact2]

        contact_l.add_contact('*****@*****.**', '*****@*****.**', 'Alice',
                              32 * b'\x03', 32 * b'\x04', True, True, True)
        contact_l.add_contact('*****@*****.**', '*****@*****.**', 'David',
                              32 * b'\x03', 32 * b'\x04', True, True, True)

        contact_l2 = ContactList(master_k, settings)
        c_alice = contact_l2.get_contact('Alice')
        c_david = contact_l2.get_contact('David')

        # Test
        self.assertIsInstance(c_alice, Contact)
        self.assertIsInstance(c_david, Contact)
        self.assertEqual(c_alice.tx_fingerprint, 32 * b'\x03')
        self.assertEqual(c_david.tx_fingerprint, 32 * b'\x03')
Пример #24
0
    def setUp(self) -> None:
        """Pre-test actions."""
        self.unit_test_dir = cd_unit_test()
        self.master_key = MasterKey()
        self.settings = Settings()
        self.time = STATIC_TIMESTAMP
        self.contact_list = ContactList(self.master_key, self.settings)
        self.group_list = GroupList(groups=['test_group'])
        self.file_name = f'{DIR_USER_DATA}{self.settings.software_operation}_logs'
        self.tmp_file_name = self.file_name + "_temp"
        self.tfc_log_database = MessageLog(self.file_name,
                                           self.master_key.master_key)
        self.args = self.contact_list, self.group_list, self.settings, self.master_key

        self.msg = (
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean condimentum consectetur purus quis"
            " dapibus. Fusce venenatis lacus ut rhoncus faucibus. Cras sollicitudin commodo sapien, sed bibendu"
            "m velit maximus in. Aliquam ac metus risus. Sed cursus ornare luctus. Integer aliquet lectus id ma"
            "ssa blandit imperdiet. Ut sed massa eget quam facilisis rutrum. Mauris eget luctus nisl. Sed ut el"
            "it iaculis, faucibus lacus eget, sodales magna. Nunc sed commodo arcu. In hac habitasse platea dic"
            "tumst. Integer luctus aliquam justo, at vestibulum dolor iaculis ac. Etiam laoreet est eget odio r"
            "utrum, vel malesuada lorem rhoncus. Cras finibus in neque eu euismod. Nulla facilisi. Nunc nec ali"
            "quam quam, quis ullamcorper leo. Nunc egestas lectus eget est porttitor, in iaculis felis sceleris"
            "que. In sem elit, fringilla id viverra commodo, sagittis varius purus. Pellentesque rutrum loborti"
            "s neque a facilisis. Mauris id tortor placerat, aliquam dolor ac, venenatis arcu."
        )
Пример #25
0
    def setUp(self):
        self.unittest_dir = cd_unittest()
        self.master_key = MasterKey()
        self.settings = Settings()
        self.file_name = f'{DIR_USER_DATA}{self.settings.software_operation}_groups'
        self.contact_list = ContactList(self.master_key, self.settings)
        self.group_list = GroupList(self.master_key, self.settings,
                                    self.contact_list)
        self.nicks = [
            'Alice', 'Bob', 'Charlie', 'David', 'Eric', 'Fido', 'Guido',
            'Heidi', 'Ivan', 'Joana', 'Karol'
        ]
        self.group_names = [
            'test_group_1', 'test_group_2', 'test_group_3', 'test_group_4',
            'test_group_5', 'test_group_6', 'test_group_7', 'test_group_8',
            'test_group_9', 'test_group_10', 'test_group_11'
        ]
        members = list(map(create_contact, self.nicks))

        self.contact_list.contacts = members

        self.group_list.groups = \
            [Group(name         =name,
                   group_id     =group_name_to_group_id(name),
                   log_messages =False,
                   notifications=False,
                   members      =members,
                   settings     =self.settings,
                   store_groups =self.group_list.store_groups)
             for name in self.group_names]

        self.single_member_data_len = (
            GROUP_STATIC_LENGTH + self.settings.max_number_of_group_members *
            ONION_SERVICE_PUBLIC_KEY_LENGTH)
Пример #26
0
 def setUp(self):
     self.master_key = MasterKey()
     self.settings = Settings()
     self.contact_list = ContactList(self.master_key, self.settings)
     self.contact_list.contacts = list(
         map(create_contact,
             ['Alice', 'Benny', 'Charlie', 'David', 'Eric']))
Пример #27
0
    def test_txm_command(self):
        # Setup
        user_input = UserInput("passwd tx")
        contact_list = ContactList()
        group_list = GroupList()
        settings = Settings()
        queues = {COMMAND_PACKET_QUEUE: Queue(), KEY_MANAGEMENT_QUEUE: Queue()}
        master_key = MasterKey()
        o_getpass = getpass.getpass
        getpass.getpass = lambda x: 'a'

        # Test
        self.assertIsNone(
            change_master_key(user_input, contact_list, group_list, settings,
                              queues, master_key))

        # Teardown
        while not queues[COMMAND_PACKET_QUEUE].empty():
            queues[COMMAND_PACKET_QUEUE].get()

        while not queues[KEY_MANAGEMENT_QUEUE].empty():
            queues[KEY_MANAGEMENT_QUEUE].get()

        getpass.getpass = o_getpass
        time.sleep(0.2)
        cleanup()
Пример #28
0
    def test_change_master_key(self, _: Any) -> None:
        # Setup
        key = SYMMETRIC_KEY_LENGTH * b'\x01'
        master_key2 = MasterKey(master_key=key)
        queues = gen_queue_dict()

        def queue_delayer() -> None:
            """Place packet to the key management queue after timer runs out."""
            time.sleep(0.1)
            queues[KEY_MANAGEMENT_QUEUE].put(master_key2.master_key)

        threading.Thread(target=queue_delayer).start()

        # Test that the new key is different from the existing one
        self.assertNotEqual(key, self.master_key.master_key)

        # Change the master key
        self.assertIsNone(self.keylist.change_master_key(queues))

        # Test that the master key was changed
        self.assertEqual(self.keylist.master_key.master_key, key)
        self.assertEqual(self.keylist.database.database_key, key)

        self.assertEqual(queues[KEY_MGMT_ACK_QUEUE].get(), KDB_HALT_ACK_HEADER)
        self.assertEqual(queues[KEY_MGMT_ACK_QUEUE].get(), key)
Пример #29
0
 def setUp(self) -> None:
     """Pre-test actions."""
     self.unit_test_dir    = cd_unit_test()
     self.master_key       = MasterKey()
     self.settings         = Settings()
     self.log_file         = f'{DIR_USER_DATA}{self.settings.software_operation}_logs'
     self.tfc_log_database = MessageLog(self.log_file, self.master_key.master_key)
Пример #30
0
 def setUp(self):
     self.settings = Settings(disable_gui_dialog=True)
     self.gateway = Gateway()
     self.contact_list = ContactList()
     self.group_list = GroupList()
     self.master_key = MasterKey()
     self.onion_service = OnionService()
     self.queues = gen_queue_dict()