/** * Vector tests for the Bonafide's bcrypt mechanism. * * @test * @dataProvider provider_bcrypt * @param string $password Plaintext password * @param string $salt Salt * @param int $iterations Iterations * @param string $expected Expected value */ public function test_bcrypt($password, $salt, $iterations, $expected) { $config = array('cost' => '4'); $hash = Bonafide::mechanism('bcrypt', $config)->hash($password, $salt, $iterations); $this->assertSame($hash, $expected); }
/** * Vector tests for the Bonafide's Pbkdf2 mechanism. * * @test * @dataProvider provider_pbkdf2 * @param string $password Plaintext password * @param string $salt Salt * @param int $iterations Iterations * @param int $key_length Key length * @param string $expected Expected value */ public function test_pbkdf2($password, $salt, $iterations, $key_length, $expected) { $config = array('type' => 'sha1', 'iterations' => $iterations, 'length' => $key_length); $hash = Bonafide::mechanism('PBKDF2', $config)->hash($password, $salt); $this->assertSame(bin2hex(base64_decode($hash)), $expected); }
/** * Apply configuration and register prefixes. * * @param array configuration settings */ public function __construct(array $config = array()) { if ($config) { // Overload config $this->config = $config; } if (isset($this->config['mechanisms'])) { foreach ($this->config['mechanisms'] as $prefix => $data) { if (isset($data[1])) { // Format: array(string $name, array $config) list($mechanism, $config) = $data; } else { // Supported format: array(string $name) // Supported format: string $name // Supported format: object $mechanism $mechanism = is_array($data) ? array_shift($data) : $data; // No configuration has been supplied $config = NULL; } if (!is_object($mechanism)) { // Load the mechanism and pass in config $mechanism = Bonafide::mechanism($mechanism, $config); } if (!$mechanism instanceof Bonafide_Mechanism) { throw new Bonafide_Exception('Mechanism class ":class" must extend Bonafide_Mechanism', array(':class' => get_class($mechanism))); } // Register the mechanism by its prefix $this->mechanisms[$prefix] = $mechanism; } } }
/** * Vector tests for the Bonafide's Hash mechanism. * * @test * @dataProvider provider_hash * @param string $password Plaintext password * @param string $salt Salt * @param int $iterations Iterations * @param string $expected Expected value */ public function test_hash($password, $salt, $iterations, $expected) { $config = array('type' => 'sha1', 'key' => 'Unit testing for Bonafide'); $hash = Bonafide::mechanism('hash', $config)->hash($password, $salt, $iterations); $this->assertSame($hash, $expected); }