def loop(self): self.socket_r, self.socket_w = yield from asyncio.open_connection( servidor, puerto, loop=self.main_loop) secreto = getRandomInteger(10) generado = pow(Cifrado.generador, secreto) % Cifrado.modulo self.socket_w.write( json.dumps({ 'gen-key': True, 'key': generado }).encode()) respuesta_servidor = yield from self.socket_r.read(100) respuesta_servidor = json.loads(respuesta_servidor.decode()) generado_servidor = respuesta_servidor['gen'] key = str(pow(generado_servidor, secreto) % Cifrado.modulo) key = Cifrado.normalizar_key(key) self.enigma = Cifrado.Enigma(key) while True: data = yield from self.socket_r.read(100) mensaje = self.enigma.decifrar(data) self.recibir_mensaje(mensaje)
def data_received(self, data): if self.estado == 'no-key': mensaje = json.loads(data.decode()) if mensaje['gen-key']: generado_cliente = mensaje['key'] if generado_cliente: secreto = getRandomInteger(10) key = str(pow(generado_cliente, secreto) % Cifrado.modulo) generado = pow(Cifrado.generador, secreto) % Cifrado.modulo key = Cifrado.normalizar_key(key) self.estado = 'key-ready' self.enigma = Cifrado.Enigma(key) self.transport.write(json.dumps({'gen': generado}).encode()) elif self.estado == 'key-ready': # Aqui enviamos el mensaje a todos los clientes conectados self.propagar('{}: {}'.format(self.nombre_cliente, self.enigma.decifrar(data)))
def data_received(self, data): if self.estado == 'no-key': mensaje = json.loads(data.decode()) if mensaje['gen-key']: generado_cliente = mensaje['key'] if generado_cliente: secreto = getRandomInteger(10) key = str(pow(generado_cliente, secreto) % Cifrado.modulo) generado = pow(Cifrado.generador, secreto) % Cifrado.modulo key = Cifrado.normalizar_key(key) self.estado = 'key-ready' self.enigma = Cifrado.Enigma(key) self.transport.write( json.dumps({ 'gen': generado }).encode()) elif self.estado == 'key-ready': # Aqui enviamos el mensaje a todos los clientes conectados self.propagar('{}: {}'.format(self.nombre_cliente, self.enigma.decifrar(data)))
def loop(self): self.socket_r, self.socket_w = yield from asyncio.open_connection(servidor, puerto, loop=self.main_loop) secreto = getRandomInteger(10) generado = pow(Cifrado.generador, secreto) % Cifrado.modulo self.socket_w.write(json.dumps({'gen-key': True, 'key': generado}).encode()) respuesta_servidor = yield from self.socket_r.read(100) respuesta_servidor = json.loads(respuesta_servidor.decode()) generado_servidor = respuesta_servidor['gen'] key = str(pow(generado_servidor, secreto) % Cifrado.modulo) key = Cifrado.normalizar_key(key) self.enigma = Cifrado.Enigma(key) while True: data = yield from self.socket_r.read(100) mensaje = self.enigma.decifrar(data) self.recibir_mensaje(mensaje)