/**
  * Set adapter options.
  *
  * Expects an associative array of option keys and values used to configure
  * this adapter.
  *
  * <dl>
  *   <dt>iterationCount</dt>
  *     <dd>Number of rounds to use when generating new hashes. Must be
  *     between 1 and 16777215. Defaults to 5001.</dd>
  * </dl>
  *
  * @param Array $options
  *   Associative array of adapter options.
  * @return self
  *   Returns an instance of self to support method chaining.
  * @throws InvalidArgumentException
  *   Throws an InvalidArgumentException if a provided option key contains
  *   an invalid value.
  * @see Base::setOptions()
  */
 public function setOptions(array $options)
 {
     parent::setOptions($options);
     $options = array_change_key_case($options, CASE_LOWER);
     foreach ($options as $key => $value) {
         switch ($key) {
             case 'iterationcountlog2':
                 $value = 1 << (int) $value;
                 // Fall through
             // Fall through
             case 'iterationcount':
                 $value = (int) $value;
                 if ($value < 1 || $value > (1 << 24) - 1) {
                     throw new InvalidArgumentException('Iteration count must be between 1 and 16777215');
                 }
                 $this->_iterationCount = $value;
                 break;
             default:
                 break;
         }
     }
     return $this;
 }
 /**
  * Set adapter options.
  *
  * Expects an associative array of option keys and values used to configure
  * the hash adapter instance.
  *
  * <dl>
  *   <dt>iterationCount</dt>
  *     <dd>An integer value between 1 and 4294967295, inclusive. This
  *     value determines the cost factor associated with generating a new
  *     hash value. A higher number means a higher cost. Defaults to
  *     40000.</dd>
  * </dl>
  *
  * @param Array $options
  *   Associative array of adapter options.
  * @return Bcrypt
  * @see Base::setOptions()
  */
 public function setOptions(array $options)
 {
     parent::setOptions($options);
     $options = array_change_key_case($options, CASE_LOWER);
     foreach ($options as $key => $value) {
         switch ($key) {
             case 'iterationcountlog2':
                 $value = (int) $value;
                 $value = bcpow(2, $value, 0);
                 // Fall through
             // Fall through
             case 'iterationcount':
                 $value = (double) $value;
                 if (!ctype_digit((string) $value) || $value < $this->_iterationCountMin || $value > $this->_iterationCountMax) {
                     throw new InvalidArgumentException("Iteration count must be an integer between {$this->_iterationCountMin} and {$this->_iterationCountMax}");
                 }
                 $this->_iterationCount = $value;
                 break;
             default:
                 break;
         }
     }
     return $this;
 }
 /**
  * Set adapter options.
  *
  * Expects an associative array of option keys and values used to configure
  * this adapter.
  *
  * <dl>
  *   <dt>iterationCountLog2</dt>
  *     <dd>Base-2 logarithm of the iteration count for the underlying
  *     Blowfish-based hashing algorithm. Must be in range 7 - 30.
  *     Defaults to 12.</dd>
  *   <dt>phpBBCompat</dt>
  *     <dd>If true, new hashes will use the phpBB identifier $H$ instead of
  *     the standard $P$. Defaults to false.</dd>
  * </dl>
  *
  * @param Array $options
  *   Associative array of adapter options.
  * @return self
  *   Returns an instance of self to support method chaining.
  * @throws InvalidArgumentException
  *   Throws an InvalidArgumentException if a provided option key contains
  *   an invalid value.
  * @see Base::setOptions()
  */
 public function setOptions(array $options)
 {
     parent::setOptions($options);
     $options = array_change_key_case($options, CASE_LOWER);
     foreach ($options as $key => $value) {
         switch ($key) {
             case 'iterationcountlog2':
                 $value = (int) $value;
                 if ($value < 7 || $value > 30) {
                     throw new InvalidArgumentException('Iteration count must be between 7 and 30');
                 }
                 $this->_iterationCountLog2 = $value;
                 break;
             case 'phpbbcompat':
                 $this->_phpBBCompat = (bool) $value;
                 break;
             default:
                 break;
         }
     }
     return $this;
 }
 /**
  * Set adapter options.
  *
  * Expects an associative array of option keys and values used to configure
  * this adapter.
  *
  * <dl>
  *   <dt>digest</dt>
  *     <dd>Hash digest to use when calculating the checksum. Must be one
  *     of sha1, sha256, or sha512. Defaults to sha512.</dd>
  *   <dt>iterationCount</dt>
  *     <dd>Iteration count for the underlying PBKDF2 hashing algorithm.
  *     Must be in range 1 - 4294967296. Defaults to 12000.</dd>
  * </dl>
  *
  * @param Array $options
  *   Associative array of adapter options.
  * @return self
  *   Returns an instance of self to support method chaining.
  * @throws InvalidArgumentException
  *   Throws an InvalidArgumentException if a provided option key contains
  *   an invalid value.
  * @see Base::setOptions()
  */
 public function setOptions(array $options)
 {
     parent::setOptions($options);
     $options = array_change_key_case($options, CASE_LOWER);
     foreach ($options as $key => $value) {
         switch ($key) {
             case 'digest':
                 $value = strtolower($value);
                 if (!in_array($value, array(self::DIGEST_SHA1, self::DIGEST_SHA256, self::DIGEST_SHA512))) {
                     throw new InvalidArgumentException('Digest must be one of sha1, sha256, or sha512');
                 }
                 $this->_algo = $value;
                 break;
             case 'iterationcount':
                 if ($value < 1 || $value > 4294967296) {
                     throw new InvalidArgumentException('Iteration count must be between 1 and 4294967296');
                 }
                 $this->_iterationCount = $value;
                 break;
             default:
                 break;
         }
     }
     return $this;
 }
 /**
  * Set adapter options.
  *
  * Expects an associative array of option keys and values used to configure
  * this adapter.
  *
  * <dl>
  *   <dt>iterationCountLog2</dt>
  *     <dd>Base-2 logarithm of the iteration count for the underlying
  *     Blowfish-based hashing algorithm. Must be in range 4 - 31.
  *     Defaults to 12.</dd>
  *   <dt>identifier</dt>
  *     <dd>Hash identifier to use when generating new hash values.
  *     Supported identifiers are 2a, 2x, and 2y. Defaults to 2y in PHP
  *     versions 5.3.7 and above, 2a otherwise.</dd>
  * </dl>
  *
  * @param Array $options
  *   Associative array of adapter options.
  * @return self
  *   Returns an instance of self to support method chaining.
  * @throws InvalidArgumentException
  *   Throws an InvalidArgumentException if a provided option key contains
  *   an invalid value.
  * @see Base::setOptions()
  */
 public function setOptions(array $options)
 {
     parent::setOptions($options);
     $options = array_change_key_case($options, CASE_LOWER);
     foreach ($options as $key => $value) {
         switch ($key) {
             case 'iterationcountlog2':
                 $value = (int) $value;
                 if ($value < 4 || $value > 31) {
                     throw new InvalidArgumentException('Iteration count must be between 4 and 31');
                 }
                 $this->_iterationCountLog2 = $value;
                 break;
             case 'identifier':
                 $value = strtolower($value);
                 if (!in_array($value, $this->_validIdentifiers)) {
                     throw new InvalidArgumentException('Invalid hash identifier');
                 }
                 $this->_identifier = $value;
                 break;
             default:
                 break;
         }
     }
     return $this;
 }