diff --git a/lib_secure_server.py b/lib_secure_server.py index 1a14b71..ac13b0a 100644 --- a/lib_secure_server.py +++ b/lib_secure_server.py @@ -72,7 +72,7 @@ class Message: def _write(self): if self._send_buffer: - print("sending", repr(self._send_buffer), "to", self.addr) + # print("sending", repr(self._send_buffer), "to", self.addr) try: # Should be ready to write sent = self.sock.send(self._send_buffer) @@ -81,11 +81,12 @@ class Message: pass else: self._send_buffer = self._send_buffer[sent:] - if not self.handshake: - self._set_selector_events_mask("r") # Close when the buffer is drained. The response has been sent. - elif sent and not self._send_buffer: - self.close() + if sent and not self._send_buffer: + if self.handshake: + self.close() + else: + self._set_selector_events_mask("r") def _json_encode(self, obj, encoding): return json.dumps(obj, ensure_ascii=False).encode(encoding) @@ -165,15 +166,12 @@ class Message: if self.request is None: self.process_request() - if not self.handshake: - self._jsonheader_len = None - self.jsonheader = None - def write(self): if self.request: if not self.response_created: self.create_response() + print(f"Sending response to client.") self._write() def close(self): @@ -233,6 +231,11 @@ class Message: self._send_buffer += message print(f'Sending server public key, hash, session key, hash...') + def _reset_header(self): + # reset header for next request + self._jsonheader_len = None + self.jsonheader = None + def process_request(self): content_len = self.jsonheader["content-length"] if not len(self._recv_buffer) >= content_len: @@ -240,6 +243,7 @@ class Message: data = self._recv_buffer[:content_len] self._recv_buffer = self._recv_buffer[content_len:] if self.clientkey is None: # data is client public key plus hash + print(f"Receiving client key") key = data[:-128] keyhash = data[-128:] if hashlib.sha3_512(key).hexdigest().encode() == keyhash: @@ -248,8 +252,10 @@ class Message: self.sock.close() raise Exception('Client plublic key does not match key hash') self.send_my_secrets() + self._reset_header() self._set_selector_events_mask("w") elif not self.handshake: # data is passhass + sesshash + print(f"Receiving password") passphrase = self.key.decrypt(bytes(data)) sesshash = passphrase[-128:] passhash = passphrase[:-128] @@ -261,8 +267,10 @@ class Message: raise Exception('Session key hash mismatch') self.handshake = True print('Handshake Done.') + self._reset_header() self._set_selector_events_mask("r") else: + print(f"Receiving request (unencrypted yet)") if self.jsonheader["content-type"] == "text/json": encoding = self.jsonheader["content-encoding"] self.request = self._json_decode(data, encoding)