示例#1
0
    def test_loop(self):
        # Setup
        packet = b'test_packet'
        queues = gen_queue_dict()
        gateway = Gateway()

        def queue_delayer():
            """Place packets into queue after delay."""
            time.sleep(0.015)
            queues[DST_COMMAND_QUEUE].put(packet)
            time.sleep(0.015)
            queues[DST_MESSAGE_QUEUE].put(packet)
            time.sleep(0.015)
            queues[UNIT_TEST_QUEUE].put(EXIT)

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

        # Test
        side_effects = [EOFError, KeyboardInterrupt, None] + [None] * 100_000
        with unittest.mock.patch('time.sleep', side_effect=side_effects):
            self.assertIsNone(dst_outgoing(queues, gateway, unit_test=True))
        self.assertEqual(packet, gateway.packets[0])

        # Teardown
        tear_queues(queues)
示例#2
0
    def test_file_queue_short_traffic_masking(self):
        # Setup
        input_data = os.urandom(5)
        with open('testfile.txt', 'wb+') as f:
            f.write(input_data)

        window = TxWindow(name='Alice',
                          type=WIN_TYPE_CONTACT,
                          type_print='contact',
                          uid='*****@*****.**',
                          log_messages=True)
        settings = Settings(session_traffic_masking=True,
                            disable_gui_dialog=True)
        gateway = Gateway(txm_inter_packet_delay=0.02)

        input_list = ['./testfile.txt', 'Yes']
        gen = iter(input_list)
        builtins.input = lambda _: str(next(gen))

        # Test
        self.assertIsNone(queue_file(window, settings, self.f_queue, gateway))
        time.sleep(0.1)

        self.assertEqual(self.f_queue.qsize(), 1)

        q_data, log_messages, log_as_ph = self.f_queue.get()
        self.assertIsInstance(q_data, bytes)
        self.assertTrue(log_messages)
        self.assertTrue(log_as_ph)
示例#3
0
    def test_autonick_ecdhe_kex(self):
        # Setup
        input_list = [
            '*****@*****.**', '*****@*****.**', '', '',
            '2QJL5gVSPEjMTaxWPfYkzG9UJxzZDNSx6PPeVWdzS5CFN7knZy', 'Yes'
        ]
        gen = iter(input_list)

        def mock_input(_):
            return str(next(gen))

        builtins.input = mock_input

        contact_list = ContactList()
        group_list = GroupList()
        gateway = Gateway()
        settings = Settings()
        queues = {COMMAND_PACKET_QUEUE: Queue(), KEY_MANAGEMENT_QUEUE: Queue()}

        # Test
        self.assertIsNone(
            add_new_contact(contact_list, group_list, settings, queues,
                            gateway))

        contact = contact_list.get_contact('*****@*****.**')
        self.assertEqual(contact.nick, 'Alice')
        self.assertNotEqual(
            contact.tx_fingerprint,
            bytes(32))  # Indicates that PSK function was not called
示例#4
0
 def setUp(self) -> None:
     """Pre-test actions."""
     self.l_queue       = Queue()
     self.key_list      = KeyList(nicks=['Alice'])
     self.settings      = Settings()
     self.gateway       = Gateway()
     self.onion_service = OnionService()
示例#5
0
文件: test_files.py 项目: barleyj/tfc
    def test_aborted_file(self):
        # Setup
        input_data = os.urandom(5)
        with open('testfile.txt', 'wb+') as f:
            f.write(input_data)

        settings = Settings(session_trickle=True, disable_gui_dialog=True)
        window = Window(name='Alice', type='contact', uid='*****@*****.**')
        gateway = Gateway(delay=0.02)
        f_queue = Queue()
        input_list = ['./testfile.txt', 'No']
        gen = iter(input_list)

        def mock_input(_):
            return str(next(gen))

        builtins.input = mock_input

        # Test
        self.assertFR("File selection aborted.", queue_file, window, settings,
                      f_queue, gateway)

        # Teardown
        os.remove('testfile.txt')
        time.sleep(0.2)
        f_queue.close()
示例#6
0
文件: test_files.py 项目: barleyj/tfc
    def test_file_queue_short_trickle(self):
        # Setup
        input_data = os.urandom(5)
        with open('testfile.txt', 'wb+') as f:
            f.write(input_data)

        settings = Settings(session_trickle=True, disable_gui_dialog=True)
        window = Window(name='Alice', type='contact', uid='*****@*****.**')
        gateway = Gateway(delay=0.02)
        f_queue = Queue()
        input_list = ['./testfile.txt', 'Yes']
        gen = iter(input_list)

        def mock_input(_):
            return str(next(gen))

        builtins.input = mock_input

        # Test
        self.assertIsNone(queue_file(window, settings, f_queue, gateway))
        time.sleep(0.5)
        self.assertEqual(f_queue.qsize(), 1)
        q_data, l_d = f_queue.get()

        self.assertIsInstance(q_data, bytes)
        self.assertIsInstance(l_d, dict)

        # Teardown
        os.remove('testfile.txt')
        time.sleep(0.2)
        f_queue.close()
示例#7
0
    def test_loop(self):
        # Setup
        queues                 = gen_queue_dict()
        settings               = Settings(traffic_masking=True,
                                          tm_static_delay=0.001,
                                          tm_random_delay=0.001)
        gateway                = Gateway()
        key_list               = KeyList(nicks=['Alice', LOCAL_ID])
        window                 = TxWindow(log_messages=True)
        contact_list           = ContactList(nicks=['Alice', LOCAL_ID])
        window.contact_list    = contact_list
        window.window_contacts = [contact_list.get_contact_by_address_or_nick('Alice')]
        user_input             = UserInput(plaintext='test')

        def queue_delayer():
            """Place packets to queue after delay."""
            time.sleep(0.01)
            queues[WINDOW_SELECT_QUEUE].put(window.window_contacts)
            time.sleep(0.01)
            queue_command(b'test',            settings, queues)                                              # 1
            queue_message(user_input, window, settings, queues)                                              # 2
            queue_message(user_input, window, settings, queues)                                              # 3
            queue_command(b'test',            settings, queues)                                              # 4
            queues[TM_NOISE_COMMAND_QUEUE].put((C_N_HEADER + bytes(PADDING_LENGTH)))                         # 5
            queue_to_nc(UNENCRYPTED_DATAGRAM_HEADER + UNENCRYPTED_EXIT_COMMAND, queues[RELAY_PACKET_QUEUE])  # 6
            queue_to_nc(UNENCRYPTED_DATAGRAM_HEADER + UNENCRYPTED_WIPE_COMMAND, queues[RELAY_PACKET_QUEUE])  # 7
            queues[SENDER_MODE_QUEUE].put(settings)

        # Test
        threading.Thread(target=queue_delayer).start()
        self.assertIsInstance(traffic_masking_loop(queues, settings, gateway, key_list), Settings)
        self.assertEqual(len(gateway.packets), 7)

        # Teardown
        tear_queues(queues)
示例#8
0
    def test_standard_nick_psk_kex(self):
        # Setup
        o_getpass = getpass.getpass
        getpass.getpass = lambda x: 'test_password'
        input_list = [
            '*****@*****.**', '*****@*****.**', 'Alice_', 'psk', '.'
        ]
        gen = iter(input_list)

        def mock_input(_):
            return str(next(gen))

        builtins.input = mock_input

        contact_list = ContactList()
        group_list = GroupList()
        gateway = Gateway()
        settings = Settings(disable_gui_dialog=True)
        queues = {COMMAND_PACKET_QUEUE: Queue(), KEY_MANAGEMENT_QUEUE: Queue()}

        # Test
        self.assertIsNone(
            add_new_contact(contact_list, group_list, settings, queues,
                            gateway))
        contact = contact_list.get_contact('*****@*****.**')
        self.assertEqual(contact.nick, 'Alice_')
        self.assertEqual(contact.tx_fingerprint,
                         bytes(32))  # Indicates that PSK function was called

        # Teardown
        getpass.getpass = o_getpass
        os.remove('[email protected] - Give to [email protected]')
示例#9
0
    def test_loops(self):
        queues = gen_queue_dict()
        window = TxWindow(log_messages=True)
        settings = Settings(traffic_masking=True,
                            tm_static_delay=0.001,
                            tm_random_delay=0.001)
        gateway = Gateway()
        key_list = KeyList(nicks=['Bob',
                                  LOCAL_ID])  # Output Bob as existing contact

        queues[TM_NOISE_COMMAND_QUEUE].put(
            (C_N_HEADER + bytes(PADDING_LENGTH)))
        queues[TM_NOISE_PACKET_QUEUE].put(
            (P_N_HEADER + bytes(PADDING_LENGTH), True, True))
        queues[WINDOW_SELECT_QUEUE].put(window.window_contacts)
        queues[SENDER_MODE_QUEUE].put(settings)
        queue_command(b'test', settings, queues)  # Output command
        self.assertIsNone(
            sender_loop(queues, settings, gateway, key_list, unittest=True))
        self.assertEqual(len(gateway.packets), 1)

        settings.traffic_masking = False
        queues[SENDER_MODE_QUEUE].put(settings)
        self.assertIsNone(
            sender_loop(queues, settings, gateway, key_list,
                        unittest=True))  # Output Alice and Bob again
        self.assertEqual(len(gateway.packets), 1)
示例#10
0
文件: test_client.py 项目: gtog/tfc
    def test_client_scheduler(self):
        queues = gen_queue_dict()
        gateway = Gateway()
        server_private_key = X448.generate_private_key()

        def queue_delayer():
            """Place messages to queue one at a time."""
            time.sleep(0.1)
            queues[TOR_DATA_QUEUE].put(
                ('1234', nick_to_onion_address('Alice')))
            queues[CONTACT_KEY_QUEUE].put(
                (RP_ADD_CONTACT_HEADER,
                 b''.join([nick_to_pub_key('Alice'),
                           nick_to_pub_key('Bob')]), True))
            time.sleep(0.1)
            queues[CONTACT_KEY_QUEUE].put(
                (RP_REMOVE_CONTACT_HEADER,
                 b''.join([nick_to_pub_key('Alice'),
                           nick_to_pub_key('Bob')]), True))
            time.sleep(0.1)
            queues[UNITTEST_QUEUE].put(EXIT)
            time.sleep(0.1)
            queues[CONTACT_KEY_QUEUE].put((EXIT, EXIT, EXIT))

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

        self.assertIsNone(
            client_scheduler(queues,
                             gateway,
                             server_private_key,
                             unittest=True))
        tear_queues(queues)
示例#11
0
 def setUp(self) -> None:
     """Pre-test actions."""
     self.contact_list  = ContactList()
     self.settings      = Settings()
     self.onion_service = OnionService()
     self.queues        = gen_queue_dict()
     self.gateway       = Gateway()
示例#12
0
 def setUp(self):
     """Pre-test actions."""
     self.contact_list = ContactList()
     self.settings = Settings()
     self.onion_service = OnionService()
     self.gateway = Gateway()
     self.args = self.contact_list, self.settings, self.onion_service, self.gateway
示例#13
0
    def test_raises_fr_during_fingerprint_mismatch(self):
        # Setup
        contact_list = ContactList()
        settings = Settings()
        queues = {COMMAND_PACKET_QUEUE: Queue(), KEY_MANAGEMENT_QUEUE: Queue()}
        gateway = Gateway()
        o_input = builtins.input

        input_list = [
            '2QJL5gVSPEjMTaxWPfYkzG9UJxzZDNSx6PPeVWdzS5CFN7knZ',  # Short key should fail
            '2QJL5gVSPEjMTaxWPfYkzG9UJxzZDNSx6PPeVWdzS5CFN7knZya',  # Long key should fail
            '2QJL5gVSPEjMTaxWPfYkzG9UJxzZDNSx6PPeVWdzS5CFN7knZa',  # Invalid key should fail
            '2QJL5gVSPEjMTaxWPfYkzG9UJxzZDNSx6PPeVWdzS5CFN7knZy',  # Correct key
            'No'
        ]  # Fingerprint mismatch

        gen = iter(input_list)

        def mock_input(_):
            return str(next(gen))

        builtins.input = mock_input

        # Test
        self.assertFR("Fingerprint mismatch", start_key_exchange,
                      '*****@*****.**', '*****@*****.**', 'Alice',
                      contact_list, settings, queues, gateway)

        # Teardown
        builtins.input = o_input
示例#14
0
 def test_client(self, _) -> None:
     onion_pub_key = nick_to_pub_key('Alice')
     onion_address = nick_to_onion_address('Alice')
     tor_port      = '1337'
     settings      = Gateway()
     sk            = TestClient.url_token_private_key
     self.assertIsNone(client(onion_pub_key, self.queues, sk, tor_port, settings, onion_address, unit_test=True))
     self.assertEqual(self.queues[URL_TOKEN_QUEUE].get(), (onion_pub_key, TestClient.url_token))
示例#15
0
文件: test_tcb.py 项目: gtog/tfc
 def setUp(self):
     self.settings = Settings()
     self.unittest_dir = cd_unittest()
     self.gateway = Gateway()
     self.rs = RSCodec(2 * self.gateway.settings.serial_error_correction)
     self.ts = datetime.now()
     self.queues = gen_queue_dict()
     self.args = self.queues, self.gateway
示例#16
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()
示例#17
0
    def test_import_file(self):
        # Setup
        settings = Settings()
        gateway = Gateway()

        # Test
        self.assertIsNone(import_file(settings, gateway))
        self.assertEqual(len(gateway.packets), 1)
示例#18
0
 def setUp(self):
     self.window = TxWindow()
     self.contact_list = ContactList()
     self.group_list = GroupList()
     self.settings = Settings()
     self.queues = gen_queue_dict()
     self.gateway = Gateway()
     self.args = self.window, self.contact_list, self.group_list, self.settings, self.queues, self.gateway
示例#19
0
文件: test_files.py 项目: barleyj/tfc
    def test_missing_file_raises_fr(self):
        # Setup
        settings = Settings()
        window = Window()
        gateway = Gateway(delay=0.02)

        # Test
        self.assertFR("Error: File not found.", File, './testfile.txt', window,
                      settings, gateway)
示例#20
0
    def test_no_new_local_key_during_trickle(self):
        # Setup
        contact_list = ContactList()
        settings = Settings(session_trickle=True)
        queues = {COMMAND_PACKET_QUEUE: Queue(), KEY_MANAGEMENT_QUEUE: Queue()}
        gateway = Gateway()

        self.assertFR("Command disabled during trickle connection.",
                      new_local_key, contact_list, settings, queues, gateway)
示例#21
0
 def setUp(self):
     self.ts           = datetime.now()
     self.window_list  = WindowList()
     self.contact_list = ContactList()
     self.group_list   = GroupList()
     self.key_list     = KeyList()
     self.settings     = Settings()
     self.gateway      = Gateway()
     self.args         = (self.ts, self.window_list, self.contact_list, self.group_list,
                          self.key_list, self.settings, self.gateway)
示例#22
0
 def setUp(self):
     self.contact_list = ContactList(nicks=['Alice'])
     self.group_list = GroupList()
     self.user_input = UserInput()
     self.window = TxWindow(self.contact_list, self.group_list)
     self.settings = Settings()
     self.queues = gen_queue_dict()
     self.onion_service = OnionService()
     self.gateway = Gateway()
     self.args = self.user_input, self.window, self.settings, self.queues, self.onion_service, self.gateway
示例#23
0
 def setUp(self) -> None:
     """Pre-test actions."""
     self.settings = Settings()
     self.unit_test_dir = cd_unit_test()
     self.gateway = Gateway()
     self.rs = RSCodec(2 * self.gateway.settings.serial_error_correction)
     self.ts = datetime.now()
     self.queues = gen_queue_dict()
     self.args = self.queues, self.gateway
     self.queues[TX_BUF_KEY_QUEUE].put(SYMMETRIC_KEY_LENGTH * b'a')
示例#24
0
    def test_successful_exchange(self):
        # Setup
        contact_list = ContactList()
        settings = Settings()
        queues = {COMMAND_PACKET_QUEUE: Queue(), KEY_MANAGEMENT_QUEUE: Queue()}
        gateway = Gateway()
        o_input = builtins.input
        input_list = [
            '2QJL5gVSPEjMTaxWPfYkzG9UJxzZDNSx6PPeVWdzS5CFN7knZy',  # Correct key
            'Yes'
        ]  # Fingerprint match

        gen = iter(input_list)

        def mock_input(_):
            return str(next(gen))

        builtins.input = mock_input

        # Test
        self.assertIsNone(
            start_key_exchange('*****@*****.**', '*****@*****.**', 'Alice',
                               contact_list, settings, queues, gateway))

        contact = contact_list.get_contact('*****@*****.**')

        self.assertEqual(contact.rx_account, '*****@*****.**')
        self.assertEqual(contact.tx_account, '*****@*****.**')
        self.assertEqual(contact.nick, 'Alice')
        self.assertIsInstance(contact.tx_fingerprint, bytes)
        self.assertIsInstance(contact.rx_fingerprint, bytes)
        self.assertEqual(len(contact.tx_fingerprint), 32)
        self.assertEqual(len(contact.rx_fingerprint), 32)
        self.assertFalse(contact.log_messages)
        self.assertFalse(contact.file_reception)
        self.assertFalse(contact.notifications)

        time.sleep(0.2)
        cmd, account, txkey, rxkey, txhek, rxhek = queues[
            KEY_MANAGEMENT_QUEUE].get()

        self.assertEqual(cmd, 'ADD')
        self.assertEqual(account, '*****@*****.**')
        self.assertEqual(len(txkey), 32)
        self.assertIsInstance(txkey, bytes)
        self.assertEqual(len(txhek), 32)
        self.assertIsInstance(txhek, bytes)
        self.assertEqual(rxkey, bytes(32))
        self.assertEqual(rxhek, bytes(32))

        self.assertEqual(queues[COMMAND_PACKET_QUEUE].qsize(), 1)

        # Teardown
        builtins.input = o_input
示例#25
0
 def setUp(self):
     """Pre-test actions."""
     self.window = TxWindow()
     self.contact_list = ContactList()
     self.group_list = GroupList()
     self.settings = Settings()
     self.queues = gen_queue_dict()
     self.master_key = MasterKey()
     self.gateway = Gateway()
     self.args = (self.window, self.contact_list, self.group_list,
                  self.settings, self.queues, self.master_key, self.gateway)
示例#26
0
 def setUp(self):
     self.contact_list = ContactList(['Alice', 'Bob'])
     self.group_list = GroupList(groups=['test_group', 'test_group_2'])
     self.window = TxWindow(self.contact_list, self.group_list)
     self.window.group = self.group_list.get_group('test_group')
     self.window.type = WIN_TYPE_GROUP
     self.settings = Settings()
     self.queues = gen_queue_dict()
     self.onion_service = OnionService()
     self.gateway = Gateway()
     self.args = self.settings, self.queues, self.onion_service, self.gateway
示例#27
0
文件: test_tcb.py 项目: AJMartel/tfc
 def setUp(self):
     self.settings = Settings()
     self.gateway  = Gateway()
     self.rs       = RSCodec(2 * self.settings.serial_error_correction)
     self.queues   = {TXM_INCOMING_QUEUE: Queue(),
                      RXM_OUTGOING_QUEUE: Queue(),
                      TXM_TO_IM_QUEUE:    Queue(),
                      TXM_TO_NH_QUEUE:    Queue(),
                      TXM_TO_RXM_QUEUE:   Queue(),
                      NH_TO_IM_QUEUE:     Queue(),
                      EXIT_QUEUE:         Queue()}
示例#28
0
 def setUp(self):
     self.window = TxWindow()
     self.contact_list = ContactList()
     self.group_list = GroupList()
     self.settings = Settings()
     self.queues = gen_queue_dict()
     self.master_key = MasterKey()
     self.onion_service = OnionService()
     self.gateway = Gateway()
     self.args = (self.window, self.contact_list, self.group_list,
                  self.settings, self.queues, self.master_key,
                  self.onion_service, self.gateway)
示例#29
0
文件: test_files.py 项目: barleyj/tfc
    def test_empty_file_raises_fr(self):
        # Setup
        with open('testfile.txt', 'wb+') as f:
            f.write(b'')

        settings = Settings()
        window = Window()
        gateway = Gateway(delay=0.02)

        # Test
        self.assertFR("Error: Target file is empty. No file was sent.", File,
                      './testfile.txt', window, settings, gateway)
示例#30
0
    def test_valid_message_packet(self):
        # Setup
        gateway          = Gateway(serial_error_correction=5)
        key_list         = KeyList(master_key=bytes(SYMMETRIC_KEY_LENGTH))
        key_list.keysets = [create_keyset('Alice',
                                          tx_key=SYMMETRIC_KEY_LENGTH * b'\x02',
                                          tx_harac=8)]

        # Test
        self.assertIsNone(send_packet(key_list, gateway, self.l_queue,
                                      bytes(ASSEMBLY_PACKET_LENGTH), nick_to_pub_key("Alice"), True))
        self.assertEqual(len(gateway.packets), 1)
        time.sleep(0.01)
        self.assertFalse(self.l_queue.empty())