def route(self, handler, msg): logger.debug('routing msg: {}'.format(msg)) try: msg = decompress_buff(msg) logger.debug('decompressed msg: {}'.format(msg)) if not handler.handshaked: msg = decode(msg) logger.debug('decoded msg: {}'.format(msg)) # at this point we can only expect PubKeyReply self.do_handshake(handler, msg) else: msg = handler.box.decrypt(msg) request = decode(msg) logger.debug('decrypted and decoded msg: {}'.format(request)) # TODO treat client requests here routes.talk_server(handler, request) except Exception as err: logger.info('ignoring request [bad key] {}'.format(err)) raise
def do_handshake(self, handler, msg): logger.debug('do_handshake()') # expect server to send secret key to init_box handler.init_box = CryptoBox(self.keyobj) handler.init_box.box_with(self.server_pub_key) # receive server secretkey msg = handler.init_box.decrypt(msg) msg = decode(msg) handler.box = SecretBox(key=msg.key) handler.handshaked = True logger.debug('HANDSHAKED2') # XXX send first command msg logger.debug('sending command msg') self.send_command(handler)