def test_message(self): send_message = b"hello there to you my good friends how is it that you are doing today I really would like to know oh yes I would" signed_cipher_text = Node.construct_message(master_encryptor, master_def.name, send_message) # self.log_bytes_stats(signed_cipher_text) response = send_data(self.addr, signed_cipher_text) message, signature = master_encryptor.decrypt(response) sender, status, body = message.split(b"\n", 2) self.assertEqual(sender, self.node.name.encode()) self.assertEqual(status, b"ok") self.assertEqual(body, send_message.upper()) self.assertTrue(master_encryptor.verify_message(message, signature))
def send(self, body, *, encrypt=True): if encrypt: message = Node.construct_message(self.encryptor, self.name, body) else: message = body response = send_data(self.server_address, message) message_status, data = Node.deconstruct_message(self.encryptor, response) if message_status == MessageState.ok: sender, body, signature = data return (True, body) elif message_status == MessageState.invalid_data: return (False, data) else: message, signature = data return (False, message)
def connect(self): server_name, server_public_key = send_data(self.server_address, "identify").decode().split("\n", 1) self.encryptor = Encryptor(self.private_key, server_public_key) return self.register()
def ping(self): return send_data(self.server_address, "ping") == b"pong"
def test_special_handling(self): self.node.hooks = HooksOverride() response = send_data(self.addr, b"register") self.assertEqual(response, b"Registered!")
def test_identify(self): response = send_data(self.addr, b"identify") expected_pk = self.node.name.encode() + b"\n" + node_pk.publickey().exportKey("PEM") self.assertEqual(response, expected_pk)
def test_ping(self): response = send_data(self.addr, b"ping") self.assertEqual(response, b"pong")