Ejemplo n.º 1
0
    def read(self) -> bytes:
        """Read data via socket/serial interface."""
        if self.settings.local_testing_mode:
            while True:
                try:
                    return self.interface.recv()
                except KeyboardInterrupt:
                    pass
                except EOFError:
                    graceful_exit("IPC client disconnected.")
        else:
            while True:
                try:
                    start_time = 0.0
                    read_buffer = bytearray()
                    while True:
                        read = self.interface.read(1000)
                        if read:
                            start_time = time.monotonic()
                            read_buffer.extend(read)
                        else:
                            if read_buffer:
                                delta = time.monotonic() - start_time
                                if delta > self.timeout:
                                    return bytes(read_buffer)
                            else:
                                time.sleep(0.001)

                except KeyboardInterrupt:
                    pass
                except SerialException:
                    self.establish_serial()
                    self.read()
Ejemplo n.º 2
0
 def establish_serial(self):
     """Create new serial interface object."""
     try:
         serial_nh = self.search_serial_interface()
         self.interface = serial.Serial(serial_nh,
                                        self.settings.session_if_speed,
                                        timeout=0)
     except SerialException:
         graceful_exit("SerialException. Ensure $USER is in dialout group.")
Ejemplo n.º 3
0
    def __init__(self, operation: str, local_test: bool) -> None:
        """Create a new MasterKey object."""
        self.master_key = None  # type: bytes
        self.file_name = f'{DIR_USER_DATA}/{operation}_login_data'
        self.local_test = local_test

        try:
            if os.path.isfile(self.file_name):
                self.load_master_key()
            else:
                self.new_master_key()
        except KeyboardInterrupt:
            graceful_exit()
Ejemplo n.º 4
0
def exit_tfc(settings: 'Settings',
             c_queue:  'Queue',
             gateway:  'Gateway') -> None:
    """Exit TFC on TxM/RxM/NH."""
    queue_command(EXIT_PROGRAM_HEADER, settings, c_queue)
    time.sleep(0.5)

    transmit(UNENCRYPTED_PACKET_HEADER + UNENCRYPTED_EXIT_COMMAND, settings, gateway)

    if settings.local_testing_mode:
        time.sleep(0.8)
    if settings.data_diode_sockets:
        time.sleep(2.2)

    graceful_exit()
Ejemplo n.º 5
0
    def client_establish_socket(self) -> None:
        """Establish IPC client."""
        try:
            phase("Waiting for connection to NH", offset=11)
            while True:
                try:
                    socket_number = 5000 if self.settings.data_diode_sockets else 5001
                    self.interface = multiprocessing.connection.Client(
                        ('localhost', socket_number))
                    phase("Established", done=True)
                    break
                except socket.error:
                    time.sleep(0.1)

        except KeyboardInterrupt:
            graceful_exit()
Ejemplo n.º 6
0
 def test_graceful_exit(self):
     with self.assertRaises(SystemExit):
         graceful_exit('test message')
         graceful_exit('test message', clear=True)