def packet_login_encryption_request(self, buff): p_server_id = buff.unpack_string() # 1.7.x if self.protocol_version <= 5: unpack_array = lambda b: b.read(b.unpack('h')) # 1.8.x else: unpack_array = lambda b: b.read(b.unpack_varint(max_bits=16)) p_public_key = unpack_array(buff) p_verify_token = unpack_array(buff) if not self.factory.profile.online: raise ProtocolError("Can't log into online-mode server while using" " offline profile") self.shared_secret = crypto.make_shared_secret() self.public_key = crypto.import_public_key(p_public_key) self.verify_token = p_verify_token # make digest digest = crypto.make_digest( p_server_id.encode('ascii'), self.shared_secret, p_public_key) # do auth deferred = self.factory.profile.join(digest) deferred.addCallbacks(self.auth_ok, self.auth_failed)