‪TYPO3CMS  ‪main
Pbkdf2PasswordHashTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\Test;
22 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
23 
24 final class ‪Pbkdf2PasswordHashTest extends UnitTestCase
25 {
26  #[Test]
28  {
29  $this->expectException(\InvalidArgumentException::class);
30  $this->expectExceptionCode(1533903544);
31  new ‪Pbkdf2PasswordHash(['hash_count' => 999]);
32  }
33 
34  #[Test]
36  {
37  $this->expectException(\InvalidArgumentException::class);
38  $this->expectExceptionCode(1533903544);
39  new ‪Pbkdf2PasswordHash(['hash_count' => 10000001]);
40  }
41 
42  #[Test]
44  {
45  $password = '';
46  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
47  self::assertNull($subject->getHashedPassword($password));
48  }
49 
50  #[Test]
52  {
53  $password = 'a';
54  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
55  self::assertNotNull($subject->getHashedPassword($password));
56  }
57 
58  #[Test]
59  public function ‪getHashedPasswordValidates(): void
60  {
61  $password = 'password';
62  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
63  $saltedHashPassword = $subject->getHashedPassword($password);
64  self::assertTrue($subject->isValidSaltedPW($saltedHashPassword));
65  }
66 
73  #[Test]
75  {
76  $password = 'password';
77  $saltedHashPassword = '$pbkdf2-sha256$1000$woPhT0yoWm3AXJXSjuxJ3w$iZ6EvTulMqXlzr0NO8z5EyrklFcJk5Uw2Fqje68FfaQ';
78  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
79  self::assertTrue($subject->checkPassword($password, $saltedHashPassword));
80  }
81 
85  #[Test]
87  {
88  $password = 'password';
89  $saltedHashPassword = '$pbkdf2-sha256$1000$woPhT0yoWm3AXJXSjuxJ3w$iZ6EvTulMqXlzr0NO8z5EyrklFcJk5Uw2Fqje68Ffa';
90  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
91  self::assertFalse($subject->checkPassword($password, $saltedHashPassword));
92  }
93 
100  #[Test]
102  {
103  $password = 'aEjOtY';
104  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
105  $saltedHashPassword = $subject->getHashedPassword($password);
106  self::assertTrue($subject->checkPassword($password, $saltedHashPassword));
107  }
108 
115  #[Test]
117  {
118  $password = '01369';
119  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
120  $saltedHashPassword = $subject->getHashedPassword($password);
121  self::assertTrue($subject->checkPassword($password, $saltedHashPassword));
122  }
123 
130  #[Test]
132  {
133  $password = ' !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~';
134  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
135  $saltedHashPassword = $subject->getHashedPassword($password);
136  self::assertTrue($subject->checkPassword($password, $saltedHashPassword));
137  }
138 
145  #[Test]
147  {
148  $password = '';
149  for ($i = 160; $i <= 191; $i++) {
150  $password .= chr($i);
151  }
152  $password .= chr(215) . chr(247);
153  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
154  $saltedHashPassword = $subject->getHashedPassword($password);
155  self::assertTrue($subject->checkPassword($password, $saltedHashPassword));
156  }
157 
164  #[Test]
166  {
167  $password = '';
168  for ($i = 192; $i <= 214; $i++) {
169  $password .= chr($i);
170  }
171  for ($i = 216; $i <= 246; $i++) {
172  $password .= chr($i);
173  }
174  for ($i = 248; $i <= 255; $i++) {
175  $password .= chr($i);
176  }
177  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
178  $saltedHashPassword = $subject->getHashedPassword($password);
179  self::assertTrue($subject->checkPassword($password, $saltedHashPassword));
180  }
181 
182  #[Test]
184  {
185  $password = 'password';
186  $password1 = $password . 'INVALID';
187  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
188  $saltedHashPassword = $subject->getHashedPassword($password);
189  self::assertFalse($subject->checkPassword($password1, $saltedHashPassword));
190  }
191 
192  #[Test]
194  {
195  $password = 'password';
196  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
197  $saltedHashPassword = $subject->getHashedPassword($password);
198  self::assertFalse($subject->isHashUpdateNeeded($saltedHashPassword));
199  }
200 
201  #[Test]
203  {
204  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
205  $saltedHashPassword = $subject->getHashedPassword('password');
206  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1001]);
207  self::assertTrue($subject->isHashUpdateNeeded($saltedHashPassword));
208  }
209 
210  #[Test]
212  {
213  $passlibSaltedHash = '$pbkdf2-sha256$6400$.6UI/S.nXIk8jcbdHx3Fhg$98jZicV16ODfEsEZeYPGHU3kbrUrvUEXOPimVSQDD44';
214  $subject = new ‪Pbkdf2PasswordHash(['hash_count' => 1000]);
215  self::assertTrue($subject->checkPassword('password', $passlibSaltedHash));
216  }
217 }
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\checkPasswordReturnsTrueWithValidAlphaCharClassPasswordAndFixedHash
‪checkPasswordReturnsTrueWithValidAlphaCharClassPasswordAndFixedHash()
Definition: Pbkdf2PasswordHashTest.php:74
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest
Definition: Pbkdf2PasswordHashTest.php:25
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\checkPasswordReturnsFalseWithBrokenHash
‪checkPasswordReturnsFalseWithBrokenHash()
Definition: Pbkdf2PasswordHashTest.php:86
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\constructorThrowsExceptionIfHashCountIsTooHigh
‪constructorThrowsExceptionIfHashCountIsTooHigh()
Definition: Pbkdf2PasswordHashTest.php:35
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\checkPasswordReturnsTrueWithValidLatin1UmlautCharClassPassword
‪checkPasswordReturnsTrueWithValidLatin1UmlautCharClassPassword()
Definition: Pbkdf2PasswordHashTest.php:165
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\checkPasswordReturnsTrueWithValidAsciiSpecialCharClassPassword
‪checkPasswordReturnsTrueWithValidAsciiSpecialCharClassPassword()
Definition: Pbkdf2PasswordHashTest.php:131
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\checkPasswordReturnsTrueWithValidAlphaCharClassPassword
‪checkPasswordReturnsTrueWithValidAlphaCharClassPassword()
Definition: Pbkdf2PasswordHashTest.php:101
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\isHashUpdateNeededReturnsFalseForValidSaltedPassword
‪isHashUpdateNeededReturnsFalseForValidSaltedPassword()
Definition: Pbkdf2PasswordHashTest.php:193
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\checkPasswordReturnsTrueWithValidNumericCharClassPassword
‪checkPasswordReturnsTrueWithValidNumericCharClassPassword()
Definition: Pbkdf2PasswordHashTest.php:116
‪TYPO3\CMS\Core\Crypto\PasswordHashing\Pbkdf2PasswordHash
Definition: Pbkdf2PasswordHash.php:28
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\getHashedPasswordReturnsNotNullWithNullPassword
‪getHashedPasswordReturnsNotNullWithNullPassword()
Definition: Pbkdf2PasswordHashTest.php:51
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\checkPasswordReturnsFalseWithNonValidPassword
‪checkPasswordReturnsFalseWithNonValidPassword()
Definition: Pbkdf2PasswordHashTest.php:183
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\getHashedPasswordValidates
‪getHashedPasswordValidates()
Definition: Pbkdf2PasswordHashTest.php:59
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\checkPasswordIsCompatibleWithPythonPasslibHashes
‪checkPasswordIsCompatibleWithPythonPasslibHashes()
Definition: Pbkdf2PasswordHashTest.php:211
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\constructorThrowsExceptionIfHashCountIsTooLow
‪constructorThrowsExceptionIfHashCountIsTooLow()
Definition: Pbkdf2PasswordHashTest.php:27
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\isHashUpdateNeededReturnsTrueWithChangedHashCount
‪isHashUpdateNeededReturnsTrueWithChangedHashCount()
Definition: Pbkdf2PasswordHashTest.php:202
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\checkPasswordReturnsTrueWithValidLatin1SpecialCharClassPassword
‪checkPasswordReturnsTrueWithValidLatin1SpecialCharClassPassword()
Definition: Pbkdf2PasswordHashTest.php:146
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing\Pbkdf2PasswordHashTest\getHashedPasswordReturnsNullWithEmptyPassword
‪getHashedPasswordReturnsNullWithEmptyPassword()
Definition: Pbkdf2PasswordHashTest.php:43
‪TYPO3\CMS\Core\Tests\Unit\Crypto\PasswordHashing
Definition: Argon2idPasswordHashTest.php:18