Update lib_secure_server.py 1st working file. synchronous encryption to be added.
This commit is contained in:
parent
e0625b87a9
commit
309eb3f439
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user