1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
5: *
6: * Licensed under The MIT License
7: * For full copyright and license information, please see the LICENSE.txt
8: * Redistributions of files must retain the above copyright notice.
9: *
10: * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11: * @link https://cakephp.org CakePHP(tm) Project
12: * @since 2.4.0
13: * @license https://opensource.org/licenses/mit-license.php MIT License
14: */
15: namespace Cake\Auth;
16:
17: use Cake\Core\InstanceConfigTrait;
18:
19: /**
20: * Abstract password hashing class
21: */
22: abstract class AbstractPasswordHasher
23: {
24: use InstanceConfigTrait;
25:
26: /**
27: * Default config
28: *
29: * These are merged with user-provided config when the object is used.
30: *
31: * @var array
32: */
33: protected $_defaultConfig = [];
34:
35: /**
36: * Constructor
37: *
38: * @param array $config Array of config.
39: */
40: public function __construct(array $config = [])
41: {
42: $this->setConfig($config);
43: }
44:
45: /**
46: * Generates password hash.
47: *
48: * @param string $password Plain text password to hash.
49: * @return string|false Either the password hash string or false
50: */
51: abstract public function hash($password);
52:
53: /**
54: * Check hash. Generate hash from user provided password string or data array
55: * and check against existing hash.
56: *
57: * @param string $password Plain text password to hash.
58: * @param string $hashedPassword Existing hashed password.
59: * @return bool True if hashes match else false.
60: */
61: abstract public function check($password, $hashedPassword);
62:
63: /**
64: * Returns true if the password need to be rehashed, due to the password being
65: * created with anything else than the passwords generated by this class.
66: *
67: * Returns true by default since the only implementation users should rely
68: * on is the one provided by default in php 5.5+ or any compatible library
69: *
70: * @param string $password The password to verify
71: * @return bool
72: */
73: public function needsRehash($password)
74: {
75: return password_needs_rehash($password, PASSWORD_DEFAULT);
76: }
77: }
78: