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\SHA512Crypt;
 15: 
 16: /**
 17:  * SHA-512 Crypt 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 SHA512CryptTest 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!", '$6$saltstring$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJuesI68u4OTLiBFdcbYEdFCoEOfaS35inz1'),
 37:             array ("Hello world!", '$6$rounds=10000$saltstringsaltst$OW1/O6BYHV6BcXZu8QVeXbDWra3Oeqh0sbHbbMCVNSnCM/UrjmM0Dp8vOuZeHBy/YTBmSK6H9qs/y3RnOaw5v.'),
 38:             array ("This is just a test", '$6$rounds=5000$toolongsaltstrin$lQ8jolhgVRVhY4b5pZKaysCLi0QBxGoNeKQzQ3glMhwllF7oGDZxUhx1yxdYcz/e1JSbq3y6JMxxl8audkUEm0'),
 39:             array ("a very much longer text to encrypt.  This one even stretches over morethan one line.", '$6$rounds=1400$anotherlongsalts$POfYwTEok97VWcjxIiSOjiykti.o/pQs.wPvMxQ6Fm7I6IoYN3CmLs66x9t0oSwbtEW7o7UmJEiDwGqd8p4ur1'),
 40:             array ("we have a short salt string but not a short password", '$6$rounds=77777$short$WuQyW2YR.hBNpjjRhpYD/ifIw05xdfeEyQoMxIXbkvr0gge1a1x3yRULJ5CCaUeOxFmtlcGZelFl5CxtgfiAc0'),
 41:             array ("a short string", '$6$rounds=123456$asaltof16chars..$BtCwjqMJGx5hrJhZywWvt0RLE8uZ4oPwcelCjmw2kSYu.Ec6ycULevoBK25fs2xXgMNrCzIMVcgEJAstJeonj1'),
 42:             array ("the minimum number is still observed", '$6$rounds=1000$roundstoolow$kUMsbe306n21p9R.FRkW3IGn.S9NPN0x50YhH1xhLsPuWGsUSklZt58jaTfF4ZEQpyUNGc0dqbpBYYBaHHrsX.'),
 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, SHA512Crypt::hash($password, $hash));
 74:         $this->assertTrue(SHA512Crypt::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, SHA512Crypt::hash($password, $hash));
 88:         $this->assertFalse(SHA512Crypt::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 = SHA512Crypt::genConfig($options);
101: 
102:         $this->assertEquals('$6$CCCCCCC.', $config);
103:         $this->assertSame($options, SHA512Crypt::parseConfig($config));
104: 
105:         $options = array (
106:             'rounds' => 8000,
107:             'salt' => 'CCCCCCC.',
108:         );
109:         $config = SHA512Crypt::genConfig($options);
110: 
111:         $this->assertEquals('$6$rounds=8000$CCCCCCC.', $config);
112:         $this->assertSame($options, SHA512Crypt::parseConfig($config));
113:     }
114: 
115: }
116: 
PHP Password Library API documentation generated by ApiGen 2.8.0