public function isValidResponse($ha1)
	{
		if($this->opaque === NULL)
		{
			return false;
		}
		
		if(!SecurityUtil::timingSafeEquals($this->auth->getOpaque(), $this->opaque))
		{
			return false;
		}
		
		$args = [
			$ha1,
			$this->nonce,
			$this->nc,
			$this->cnonce,
			$this->auth->getQualityOfProtection(),
			$this->ha2
		];
		
		return SecurityUtil::timingSafeEquals(md5(vsprintf('%s:%s:%s:%s:%s:%s', $args)), $this->response);
	}