/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to codeigniter/system/libraries/Sha1.php

  • Committer: elof.bigestans at gmail
  • Date: 2013-04-03 08:06:30 UTC
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: elof.bigestans@gmail.com-20130403080630-r721wlstq15mdjby
Added new folders to match new folder structure

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2
 
/**
3
 
 * CodeIgniter
4
 
 *
5
 
 * An open source application development framework for PHP 5.1.6 or newer
6
 
 *
7
 
 * @package             CodeIgniter
8
 
 * @author              ExpressionEngine Dev Team
9
 
 * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
10
 
 * @license             http://codeigniter.com/user_guide/license.html
11
 
 * @link                http://codeigniter.com
12
 
 * @since               Version 1.0
13
 
 * @filesource
14
 
 */
15
 
 
16
 
// ------------------------------------------------------------------------
17
 
 
18
 
/**
19
 
 * SHA1 Encoding Class
20
 
 *
21
 
 * Purpose: Provides 160 bit hashing using The Secure Hash Algorithm
22
 
 * developed at the National Institute of Standards and Technology. The 40
23
 
 * character SHA1 message hash is computationally infeasible to crack.
24
 
 *
25
 
 * This class is a fallback for servers that are not running PHP greater than
26
 
 * 4.3, or do not have the MHASH library.
27
 
 *
28
 
 * This class is based on two scripts:
29
 
 *
30
 
 * Marcus Campbell's PHP implementation (GNU license)
31
 
 * http://www.tecknik.net/sha-1/
32
 
 *
33
 
 * ...which is based on Paul Johnston's JavaScript version
34
 
 * (BSD license). http://pajhome.org.uk/
35
 
 *
36
 
 * I encapsulated the functions and wrote one additional method to fix
37
 
 * a hex conversion bug. - Rick Ellis
38
 
 *
39
 
 * @package             CodeIgniter
40
 
 * @subpackage  Libraries
41
 
 * @category    Encryption
42
 
 * @author              ExpressionEngine Dev Team
43
 
 * @link                http://codeigniter.com/user_guide/general/encryption.html
44
 
 */
45
 
class CI_SHA1 {
46
 
 
47
 
        public function __construct()
48
 
        {
49
 
                log_message('debug', "SHA1 Class Initialized");
50
 
        }
51
 
 
52
 
        /**
53
 
         * Generate the Hash
54
 
         *
55
 
         * @access      public
56
 
         * @param       string
57
 
         * @return      string
58
 
         */
59
 
        function generate($str)
60
 
        {
61
 
                $n = ((strlen($str) + 8) >> 6) + 1;
62
 
 
63
 
                for ($i = 0; $i < $n * 16; $i++)
64
 
                {
65
 
                        $x[$i] = 0;
66
 
                }
67
 
 
68
 
                for ($i = 0; $i < strlen($str); $i++)
69
 
                {
70
 
                        $x[$i >> 2] |= ord(substr($str, $i, 1)) << (24 - ($i % 4) * 8);
71
 
                }
72
 
 
73
 
                $x[$i >> 2] |= 0x80 << (24 - ($i % 4) * 8);
74
 
 
75
 
                $x[$n * 16 - 1] = strlen($str) * 8;
76
 
 
77
 
                $a =  1732584193;
78
 
                $b = -271733879;
79
 
                $c = -1732584194;
80
 
                $d =  271733878;
81
 
                $e = -1009589776;
82
 
 
83
 
                for ($i = 0; $i < count($x); $i += 16)
84
 
                {
85
 
                        $olda = $a;
86
 
                        $oldb = $b;
87
 
                        $oldc = $c;
88
 
                        $oldd = $d;
89
 
                        $olde = $e;
90
 
 
91
 
                        for ($j = 0; $j < 80; $j++)
92
 
                        {
93
 
                                if ($j < 16)
94
 
                                {
95
 
                                        $w[$j] = $x[$i + $j];
96
 
                                }
97
 
                                else
98
 
                                {
99
 
                                        $w[$j] = $this->_rol($w[$j - 3] ^ $w[$j - 8] ^ $w[$j - 14] ^ $w[$j - 16], 1);
100
 
                                }
101
 
 
102
 
                                $t = $this->_safe_add($this->_safe_add($this->_rol($a, 5), $this->_ft($j, $b, $c, $d)), $this->_safe_add($this->_safe_add($e, $w[$j]), $this->_kt($j)));
103
 
 
104
 
                                $e = $d;
105
 
                                $d = $c;
106
 
                                $c = $this->_rol($b, 30);
107
 
                                $b = $a;
108
 
                                $a = $t;
109
 
                        }
110
 
 
111
 
                        $a = $this->_safe_add($a, $olda);
112
 
                        $b = $this->_safe_add($b, $oldb);
113
 
                        $c = $this->_safe_add($c, $oldc);
114
 
                        $d = $this->_safe_add($d, $oldd);
115
 
                        $e = $this->_safe_add($e, $olde);
116
 
                }
117
 
 
118
 
                return $this->_hex($a).$this->_hex($b).$this->_hex($c).$this->_hex($d).$this->_hex($e);
119
 
        }
120
 
 
121
 
        // --------------------------------------------------------------------
122
 
 
123
 
        /**
124
 
         * Convert a decimal to hex
125
 
         *
126
 
         * @access      private
127
 
         * @param       string
128
 
         * @return      string
129
 
         */
130
 
        function _hex($str)
131
 
        {
132
 
                $str = dechex($str);
133
 
 
134
 
                if (strlen($str) == 7)
135
 
                {
136
 
                        $str = '0'.$str;
137
 
                }
138
 
 
139
 
                return $str;
140
 
        }
141
 
 
142
 
        // --------------------------------------------------------------------
143
 
 
144
 
        /**
145
 
         *  Return result based on iteration
146
 
         *
147
 
         * @access      private
148
 
         * @return      string
149
 
         */
150
 
        function _ft($t, $b, $c, $d)
151
 
        {
152
 
                if ($t < 20)
153
 
                        return ($b & $c) | ((~$b) & $d);
154
 
                if ($t < 40)
155
 
                        return $b ^ $c ^ $d;
156
 
                if ($t < 60)
157
 
                        return ($b & $c) | ($b & $d) | ($c & $d);
158
 
 
159
 
                return $b ^ $c ^ $d;
160
 
        }
161
 
 
162
 
        // --------------------------------------------------------------------
163
 
 
164
 
        /**
165
 
         * Determine the additive constant
166
 
         *
167
 
         * @access      private
168
 
         * @return      string
169
 
         */
170
 
        function _kt($t)
171
 
        {
172
 
                if ($t < 20)
173
 
                {
174
 
                        return 1518500249;
175
 
                }
176
 
                else if ($t < 40)
177
 
                {
178
 
                        return 1859775393;
179
 
                }
180
 
                else if ($t < 60)
181
 
                {
182
 
                        return -1894007588;
183
 
                }
184
 
                else
185
 
                {
186
 
                        return -899497514;
187
 
                }
188
 
        }
189
 
 
190
 
        // --------------------------------------------------------------------
191
 
 
192
 
        /**
193
 
         * Add integers, wrapping at 2^32
194
 
         *
195
 
         * @access      private
196
 
         * @return      string
197
 
         */
198
 
        function _safe_add($x, $y)
199
 
        {
200
 
                $lsw = ($x & 0xFFFF) + ($y & 0xFFFF);
201
 
                $msw = ($x >> 16) + ($y >> 16) + ($lsw >> 16);
202
 
 
203
 
                return ($msw << 16) | ($lsw & 0xFFFF);
204
 
        }
205
 
 
206
 
        // --------------------------------------------------------------------
207
 
 
208
 
        /**
209
 
         * Bitwise rotate a 32-bit number
210
 
         *
211
 
         * @access      private
212
 
         * @return      integer
213
 
         */
214
 
        function _rol($num, $cnt)
215
 
        {
216
 
                return ($num << $cnt) | $this->_zero_fill($num, 32 - $cnt);
217
 
        }
218
 
 
219
 
        // --------------------------------------------------------------------
220
 
 
221
 
        /**
222
 
         * Pad string with zero
223
 
         *
224
 
         * @access      private
225
 
         * @return      string
226
 
         */
227
 
        function _zero_fill($a, $b)
228
 
        {
229
 
                $bin = decbin($a);
230
 
 
231
 
                if (strlen($bin) < $b)
232
 
                {
233
 
                        $bin = 0;
234
 
                }
235
 
                else
236
 
                {
237
 
                        $bin = substr($bin, 0, strlen($bin) - $b);
238
 
                }
239
 
 
240
 
                for ($i=0; $i < $b; $i++)
241
 
                {
242
 
                        $bin = "0".$bin;
243
 
                }
244
 
 
245
 
                return bindec($bin);
246
 
        }
247
 
}
248
 
// END CI_SHA
249
 
 
250
 
/* End of file Sha1.php */
251
 
/* Location: ./system/libraries/Sha1.php */
 
 
b'\\ No newline at end of file'