/**
  * {@inheritdoc}
  */
 public function checkElement(DigestDataInterface $digest_data)
 {
     $opaque = base64_encode(hash_hmac($this->hash_algorithm, $digest_data->get('nonce') . $digest_data->get('realm'), $this->hash_key, true));
     if ($opaque !== $digest_data->get('opaque')) {
         throw new \InvalidArgumentException('Invalid "opaque" value.');
     }
 }
 /**
  * {@inheritdoc}
  */
 public function checkElement(DigestDataInterface $digest_data)
 {
     if (false === $digest_data->has('nonce')) {
         throw new \InvalidArgumentException('Missing mandatory digest value: "nonce".');
     }
     if (false === ($nonceAsPlainText = base64_decode($digest_data->get('nonce')))) {
         throw new \InvalidArgumentException(sprintf('Nonce is not encoded in Base64; received nonce "%s".', $digest_data->get('nonce')));
     }
     $nonceTokens = explode(':', $nonceAsPlainText);
     if (2 !== count($nonceTokens)) {
         throw new \InvalidArgumentException(sprintf('Nonce should have yielded two tokens but was "%s".', $nonceAsPlainText));
     }
     $nonce_expiry_time = $nonceTokens[0];
     $signature = $nonceTokens[1];
     $this->checkSignature($nonce_expiry_time, $signature);
     $this->checkExpired($nonce_expiry_time);
 }
 /**
  * {@inheritdoc}
  */
 public function checkElement(DigestDataInterface $digest_data)
 {
     if ($this->realm !== $digest_data->get('realm')) {
         throw new \InvalidArgumentException(sprintf('Response realm name "%s" does not match system realm name of "%s".', $digest_data->get('realm'), $this->realm));
     }
 }
 /**
  * @param \HttpDigest\DigestDataInterface $digest_data
  * @param bool                            $is_sess
  *
  * @return \HttpDigest\Algorithm\AlgorithmInterface
  */
 private function getAlgorithm(DigestDataInterface $digest_data, &$is_sess)
 {
     $algorithm_name = $digest_data->has('algorithm') ? $digest_data->get('algorithm') : 'MD5';
     if ('-sess' === substr($algorithm_name, 0, -5)) {
         $is_sess = true;
         $algorithm_name = substr($algorithm_name, 0, strlen($algorithm_name) - 5);
     } else {
         $is_sess = false;
     }
     return $this->getSchemeAlgorithm($algorithm_name);
 }
 private function checkSubElement(DigestDataInterface $digest_data, $element)
 {
     if (!$digest_data->has($element)) {
         throw new \InvalidArgumentException(sprintf('Missing mandatory digest value "%s".', $element));
     }
 }
 /**
  * {@inheritdoc}
  */
 public function checkElement(DigestDataInterface $digest_data)
 {
     if ($keys = array_diff(['realm', 'nonce', 'uri', 'response', 'opaque'], $digest_data->all())) {
         throw new \InvalidArgumentException(sprintf('Missing mandatory digest value(s): %s.', implode(', ', $keys)));
     }
 }
 private function checkUsername(DigestDataInterface $digest_data)
 {
     if (!$digest_data->has('username')) {
         throw new \InvalidArgumentException('Missing mandatory digest value "username".');
     }
 }