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()) p_public_key = unpack_array(buff) p_verify_token = unpack_array(buff) if not self.factory.profile.logged_in: 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 = auth.join( self.factory.auth_timeout, digest, self.factory.profile.access_token, self.factory.profile.uuid) deferred.addCallbacks(self.auth_ok, self.auth_failed)
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()) p_public_key = unpack_array(buff) p_verify_token = unpack_array(buff) if not self.factory.profile.logged_in: 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 = auth.join(self.factory.auth_timeout, digest, self.factory.profile.access_token, self.factory.profile.uuid) deferred.addCallbacks(self.auth_ok, self.auth_failed)
def packet_login_encryption_response(self, buff): if self.login_expecting != 1: raise ProtocolError("Out-of-order login") # 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()) p_shared_secret = unpack_array(buff) p_verify_token = unpack_array(buff) shared_secret = crypto.decrypt_secret( self.factory.keypair, p_shared_secret) verify_token = crypto.decrypt_secret( self.factory.keypair, p_verify_token) self.login_expecting = None if verify_token != self.verify_token: raise ProtocolError("Verify token incorrect") # enable encryption self.cipher.enable(shared_secret) self.logger.debug("Encryption enabled") # make digest digest = crypto.make_digest( self.server_id.encode('ascii'), shared_secret, self.factory.public_key) # do auth deferred = auth.has_joined( self.factory.auth_timeout, digest, self.username) deferred.addCallbacks(self.auth_ok, self.auth_failed)