xref: /dokuwiki/_test/tests/inc/auth_password.test.php (revision 1831d8a0f848f2e0dd5ef195791b6beaa5d1acb7)
1f2ae886aSAndreas Gohr<?php
2f2ae886aSAndreas Gohr
3f2ae886aSAndreas Gohrrequire_once DOKU_INC.'inc/init.php';
4f2ae886aSAndreas Gohrrequire_once DOKU_INC.'inc/auth.php';
5f2ae886aSAndreas Gohr
6f2ae886aSAndreas Gohrclass auth_password_test extends PHPUnit_Framework_TestCase {
7f2ae886aSAndreas Gohr
8f2ae886aSAndreas Gohr    // hashes for the password foo$method, using abcdefgh as salt
9f2ae886aSAndreas Gohr    var $passes = array(
10f2ae886aSAndreas Gohr        'smd5'  => '$1$abcdefgh$SYbjm2AEvSoHG7Xapi8so.',
11f2ae886aSAndreas Gohr        'apr1'  => '$apr1$abcdefgh$C/GzYTF4kOVByYLEoD5X4.',
12f2ae886aSAndreas Gohr        'md5'   => '8fa22d62408e5351553acdd91c6b7003',
13f2ae886aSAndreas Gohr        'sha1'  => 'b456d3b0efd105d613744ffd549514ecafcfc7e1',
14f2ae886aSAndreas Gohr        'ssha'  => '{SSHA}QMHG+uC7bHNYKkmoLbNsNI38/dJhYmNk',
15f2ae886aSAndreas Gohr        'lsmd5' => '{SMD5}HGbkPrkWgy9KgcRGWlrsUWFiY2RlZmdo',
16f2ae886aSAndreas Gohr        'crypt' => 'ablvoGr1hvZ5k',
17f2ae886aSAndreas Gohr        'mysql' => '4a1fa3780bd6fd55',
18f2ae886aSAndreas Gohr        'my411' => '*e5929347e25f82e19e4ebe92f1dc6b6e7c2dbd29',
19f2ae886aSAndreas Gohr        'kmd5'  => 'a579299436d7969791189acadd86fcb716',
20f2ae886aSAndreas Gohr        'djangomd5'  => 'md5$abcde$d0fdddeda8cd92725d2b54148ac09158',
21f2ae886aSAndreas Gohr        'djangosha1' => 'sha1$abcde$c8e65a7f0acc9158843048a53dcc5a6bc4d17678',
22f2ae886aSAndreas Gohr    );
23f2ae886aSAndreas Gohr
24f2ae886aSAndreas Gohr
25f2ae886aSAndreas Gohr    function test_cryptPassword(){
26f2ae886aSAndreas Gohr        foreach($this->passes as $method => $hash){
27f2ae886aSAndreas Gohr            $info = "testing method $method";
28f2ae886aSAndreas Gohr            $this->assertEquals(auth_cryptPassword('foo'.$method, $method,'abcdefgh12345678912345678912345678'),
29f2ae886aSAndreas Gohr                $hash, $info);
30f2ae886aSAndreas Gohr        }
31f2ae886aSAndreas Gohr    }
32f2ae886aSAndreas Gohr
33f2ae886aSAndreas Gohr    function test_verifyPassword(){
34f2ae886aSAndreas Gohr        foreach($this->passes as $method => $hash){
35f2ae886aSAndreas Gohr            $info = "testing method $method";
36f2ae886aSAndreas Gohr            $this->assertTrue(auth_verifyPassword('foo'.$method, $hash), $info);
37*1831d8a0SAndreas Gohr            $this->assertFalse(auth_verifyPassword('bar'.$method, $hash), $info);
38f2ae886aSAndreas Gohr        }
39f2ae886aSAndreas Gohr    }
40f2ae886aSAndreas Gohr
41f2ae886aSAndreas Gohr    function test_verifySelf(){
42f2ae886aSAndreas Gohr        foreach($this->passes as $method => $hash){
43f2ae886aSAndreas Gohr            $info = "testing method $method";
44f2ae886aSAndreas Gohr            $hash = auth_cryptPassword('foo'.$method,$method);
45f2ae886aSAndreas Gohr            $this->assertTrue(auth_verifyPassword('foo'.$method, $hash), $info);
46f2ae886aSAndreas Gohr        }
47f2ae886aSAndreas Gohr    }
48f2ae886aSAndreas Gohr
49f2ae886aSAndreas Gohr    function test_bcrypt_self(){
50f2ae886aSAndreas Gohr        $hash = auth_cryptPassword('foobcrypt','bcrypt');
51f2ae886aSAndreas Gohr        $this->assertTrue(auth_verifyPassword('foobcrypt',$hash));
52f2ae886aSAndreas Gohr    }
53f2ae886aSAndreas Gohr
54f2ae886aSAndreas Gohr    function test_verifyPassword_fixedbcrypt(){
55f2ae886aSAndreas Gohr        $this->assertTrue(auth_verifyPassword('foobcrypt','$2a$12$uTWercxbq4sjp2xAzv3we.ZOxk51m5V/Bv5bp2H27oVFJl5neFQoC'));
56f2ae886aSAndreas Gohr    }
57f2ae886aSAndreas Gohr
58f2ae886aSAndreas Gohr    function test_verifyPassword_nohash(){
59f2ae886aSAndreas Gohr        $this->assertTrue(auth_verifyPassword('foo','$1$$n1rTiFE0nRifwV/43bVon/'));
60f2ae886aSAndreas Gohr    }
61f2ae886aSAndreas Gohr
62f2ae886aSAndreas Gohr    function test_verifyPassword_fixedpmd5(){
63f2ae886aSAndreas Gohr        $this->assertTrue(auth_verifyPassword('test12345','$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0'));
64f2ae886aSAndreas Gohr        $this->assertTrue(auth_verifyPassword('test12345','$H$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0'));
65f2ae886aSAndreas Gohr    }
66f2ae886aSAndreas Gohr
67*1831d8a0SAndreas Gohr    /**
68*1831d8a0SAndreas Gohr     * pmd5 checking should throw an exception when a hash with a too high
69*1831d8a0SAndreas Gohr     * iteration count is passed
70*1831d8a0SAndreas Gohr     */
71*1831d8a0SAndreas Gohr    function test_verifyPassword_pmd5Exception(){
72*1831d8a0SAndreas Gohr        $except = false;
73*1831d8a0SAndreas Gohr        try{
74*1831d8a0SAndreas Gohr            auth_verifyPassword('foopmd5', '$H$abcdefgh1ZbJodHxmeXVAhEzTG7IAp.');
75*1831d8a0SAndreas Gohr        }catch (Exception $e){
76*1831d8a0SAndreas Gohr            $except = true;
77*1831d8a0SAndreas Gohr        }
78*1831d8a0SAndreas Gohr        $this->assertTrue($except);
79*1831d8a0SAndreas Gohr    }
80*1831d8a0SAndreas Gohr
81f2ae886aSAndreas Gohr}
82f2ae886aSAndreas Gohr
83f2ae886aSAndreas Gohr//Setup VIM: ex: et ts=4 :
84