Overview

Namespaces

  • PHP
  • PHPassLib
    • Application
    • Exception
    • Hash
    • Test
      • Application
      • Hash

Classes

  • BCryptTest
  • BSDiCryptTest
  • DESCryptTest
  • MD5CryptTest
  • PBKDF2Test
  • PortableTest
  • SHA1CryptTest
  • SHA256CryptTest
  • SHA512CryptTest
  • Overview
  • Namespace
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * PHP Password Library
  4:  *
  5:  * @package PHPassLib\Tests
  6:  * @author Ryan Chouinard <rchouinard@gmail.com>
  7:  * @copyright Copyright (c) 2012, Ryan Chouinard
  8:  * @license MIT License - http://www.opensource.org/licenses/mit-license.php
  9:  * @version 3.0.0-dev
 10:  */
 11: 
 12: namespace PHPassLib\Test\Hash;
 13: 
 14: use PHPassLib\Hash\SHA256Crypt;
 15: 
 16: /**
 17:  * SHA-256 Crypt Module Tests
 18:  *
 19:  * @package PHPassLib\Tests
 20:  * @author Ryan Chouinard <rchouinard@gmail.com>
 21:  * @copyright Copyright (c) 2012, Ryan Chouinard
 22:  * @license MIT License - http://www.opensource.org/licenses/mit-license.php
 23:  */
 24: class SHA256CryptTest extends \PHPUnit_Framework_TestCase
 25: {
 26: 
 27:     /**
 28:      * Provide valid test vectors.
 29:      *
 30:      * @return array
 31:      */
 32:     public function validTestVectorProvider()
 33:     {
 34:         $vectors = array (
 35:             // http://www.akkadia.org/drepper/SHA-crypt.txt
 36:             array ("Hello world!", '$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5'),
 37:             array ("Hello world!", '$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2.opqey6IcA'),
 38:             array ("This is just a test", '$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8mGRcvxa5'),
 39:             array ("a very much longer text to encrypt.  This one even stretches over morethan one line.", '$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12oP84Bnq1'),
 40:             array ("we have a short salt string but not a short password", '$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/'),
 41:             array ("a short string", '$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/cZKmF/wJvD'),
 42:             array ("the minimum number is still observed", '$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL972bIC'),
 43:         );
 44: 
 45:         return $vectors;
 46:     }
 47: 
 48:     /**
 49:      * Provide invalid test vectors.
 50:      *
 51:      * @return array
 52:      */
 53:     public function invalidTestVectorProvider()
 54:     {
 55:         $vectors = array (
 56:             array ("", '*0', '*1'),
 57:             array ("", '*1', '*0'),
 58:         );
 59: 
 60:         return $vectors;
 61:     }
 62: 
 63:     /**
 64:      * Verify that the class produces correct results with valid test vectors.
 65:      *
 66:      * @test
 67:      * @dataProvider validTestVectorProvider
 68:      * @param string $password
 69:      * @param string $hash
 70:      */
 71:     public function validTestVectorsProduceExpectedResults($password, $hash)
 72:     {
 73:         $this->assertEquals($hash, SHA256Crypt::hash($password, $hash));
 74:         $this->assertTrue(SHA256Crypt::verify($password, $hash));
 75:     }
 76: 
 77:     /**
 78:      * Verify that the class produces correct results with invalid test vectors.
 79:      *
 80:      * @test
 81:      * @dataProvider invalidTestVectorProvider
 82:      * @param string $password
 83:      * @param string $hash
 84:      */
 85:     public function invalidTestVectorsProduceExpectedResults($password, $hash, $errorString)
 86:     {
 87:         $this->assertEquals($errorString, SHA256Crypt::hash($password, $hash));
 88:         $this->assertFalse(SHA256Crypt::verify($password, $hash));
 89:     }
 90: 
 91:     /**
 92:      * @test
 93:      */
 94:     public function genconfigAndParseconfigProduceMatchingResults()
 95:     {
 96:         $options = array (
 97:             'rounds' => 5000,
 98:             'salt' => 'CCCCCCC.',
 99:         );
100:         $config = SHA256Crypt::genConfig($options);
101: 
102:         $this->assertEquals('$5$CCCCCCC.', $config, $config);
103:         $this->assertSame($options, SHA256Crypt::parseConfig($config));
104: 
105:         $options = array (
106:             'rounds' => 8000,
107:             'salt' => 'CCCCCCC.',
108:         );
109:         $config = SHA256Crypt::genConfig($options);
110: 
111:         $this->assertEquals('$5$rounds=8000$CCCCCCC.', $config, $config);
112:         $this->assertSame($options, SHA256Crypt::parseConfig($config));
113:     }
114: 
115: }
116: 
PHP Password Library API documentation generated by ApiGen 2.8.0