summaryrefslogtreecommitdiffstats
path: root/Tests/Core/Encoder
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/Core/Encoder')
-rw-r--r--Tests/Core/Encoder/BCryptPasswordEncoderTest.php112
-rw-r--r--Tests/Core/Encoder/Pbkdf2PasswordEncoderTest.php45
2 files changed, 157 insertions, 0 deletions
diff --git a/Tests/Core/Encoder/BCryptPasswordEncoderTest.php b/Tests/Core/Encoder/BCryptPasswordEncoderTest.php
new file mode 100644
index 0000000..bfaf5fc
--- /dev/null
+++ b/Tests/Core/Encoder/BCryptPasswordEncoderTest.php
@@ -0,0 +1,112 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Security\Tests\Core\Encoder;
+
+use Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder;
+
+/**
+ * @author Elnur Abdurrakhimov <elnur@elnur.pro>
+ */
+class BCryptPasswordEncoderTest extends \PHPUnit_Framework_TestCase
+{
+ const PASSWORD = 'password';
+ const BYTES = '0123456789abcdef';
+ const VALID_COST = '04';
+
+ const SECURE_RANDOM_INTERFACE = 'Symfony\Component\Security\Core\Util\SecureRandomInterface';
+
+ /**
+ * @var \PHPUnit_Framework_MockObject_MockObject
+ */
+ private $secureRandom;
+
+ protected function setUp()
+ {
+ $this->secureRandom = $this->getMock(self::SECURE_RANDOM_INTERFACE);
+
+ $this->secureRandom
+ ->expects($this->any())
+ ->method('nextBytes')
+ ->will($this->returnValue(self::BYTES))
+ ;
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testCostBelowRange()
+ {
+ new BCryptPasswordEncoder($this->secureRandom, 3);
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testCostAboveRange()
+ {
+ new BCryptPasswordEncoder($this->secureRandom, 32);
+ }
+
+ public function testCostInRange()
+ {
+ for ($cost = 4; $cost <= 31; $cost++) {
+ new BCryptPasswordEncoder($this->secureRandom, $cost);
+ }
+ }
+
+ public function testResultLength()
+ {
+ $encoder = new BCryptPasswordEncoder($this->secureRandom, self::VALID_COST);
+ $result = $encoder->encodePassword(self::PASSWORD, null);
+ $this->assertEquals(60, strlen($result));
+ }
+
+ public function testValidation()
+ {
+ $encoder = new BCryptPasswordEncoder($this->secureRandom, self::VALID_COST);
+ $result = $encoder->encodePassword(self::PASSWORD, null);
+ $this->assertTrue($encoder->isPasswordValid($result, self::PASSWORD, null));
+ $this->assertFalse($encoder->isPasswordValid($result, 'anotherPassword', null));
+ }
+
+ public function testValidationKnownPassword()
+ {
+ $encoder = new BCryptPasswordEncoder($this->secureRandom, self::VALID_COST);
+ $prefix = '$'.(version_compare(phpversion(), '5.3.7', '>=')
+ ? '2y' : '2a').'$';
+
+ $encrypted = $prefix.'04$ABCDEFGHIJKLMNOPQRSTU.uTmwd4KMSHxbUsG7bng8x7YdA0PM1iq';
+ $this->assertTrue($encoder->isPasswordValid($encrypted, self::PASSWORD, null));
+ }
+
+ public function testSecureRandomIsUsed()
+ {
+ if (function_exists('mcrypt_create_iv')) {
+ return;
+ }
+
+ $this->secureRandom
+ ->expects($this->atLeastOnce())
+ ->method('nextBytes')
+ ;
+
+ $encoder = new BCryptPasswordEncoder($this->secureRandom, self::VALID_COST);
+ $result = $encoder->encodePassword(self::PASSWORD, null);
+
+ $prefix = '$'.(version_compare(phpversion(), '5.3.7', '>=')
+ ? '2y' : '2a').'$';
+ $salt = 'MDEyMzQ1Njc4OWFiY2RlZe';
+ $expected = crypt(self::PASSWORD, $prefix . self::VALID_COST . '$' . $salt);
+
+ $this->assertEquals($expected, $result);
+ }
+}
diff --git a/Tests/Core/Encoder/Pbkdf2PasswordEncoderTest.php b/Tests/Core/Encoder/Pbkdf2PasswordEncoderTest.php
new file mode 100644
index 0000000..2c98543
--- /dev/null
+++ b/Tests/Core/Encoder/Pbkdf2PasswordEncoderTest.php
@@ -0,0 +1,45 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Security\Tests\Core\Encoder;
+
+use Symfony\Component\Security\Core\Encoder\Pbkdf2PasswordEncoder;
+
+class Pbkdf2PasswordEncoderTest extends \PHPUnit_Framework_TestCase
+{
+ public function testIsPasswordValid()
+ {
+ $encoder = new Pbkdf2PasswordEncoder('sha256', false, 1, 40);
+
+ $this->assertTrue($encoder->isPasswordValid('c1232f10f62715fda06ae7c0a2037ca19b33cf103b727ba56d870c11f290a2ab106974c75607c8a3', 'password', ''));
+ }
+
+ public function testEncodePassword()
+ {
+ $encoder = new Pbkdf2PasswordEncoder('sha256', false, 1, 40);
+ $this->assertSame('c1232f10f62715fda06ae7c0a2037ca19b33cf103b727ba56d870c11f290a2ab106974c75607c8a3', $encoder->encodePassword('password', ''));
+
+ $encoder = new Pbkdf2PasswordEncoder('sha256', true, 1, 40);
+ $this->assertSame('wSMvEPYnFf2gaufAogN8oZszzxA7cnulbYcMEfKQoqsQaXTHVgfIow==', $encoder->encodePassword('password', ''));
+
+ $encoder = new Pbkdf2PasswordEncoder('sha256', false, 2, 40);
+ $this->assertSame('8bc2f9167a81cdcfad1235cd9047f1136271c1f978fcfcb35e22dbeafa4634f6fd2214218ed63ebb', $encoder->encodePassword('password', ''));
+ }
+
+ /**
+ * @expectedException LogicException
+ */
+ public function testEncodePasswordAlgorithmDoesNotExist()
+ {
+ $encoder = new Pbkdf2PasswordEncoder('foobar');
+ $encoder->encodePassword('password', '');
+ }
+}