This commit was generated by cvs2svn to compensate for changes in r11022,
[freeside.git] / fs_selfservice / fri / includes / crypt.php
1 <?php
2
3 /*
4  * Allows encrypt and decrypt
5  */
6 class Crypt {
7
8   /**
9    * Gets a random value for encryption
10    * - From php.net docs
11    *
12    * @param $iv_len
13    *   length of random variable
14    */
15   function getRndIV($iv_len) {
16
17     $iv = '';
18     while ($iv_len-- > 0) {
19       $iv .= chr(mt_rand() & 0xff);
20     }
21     return $iv;
22   }
23
24   /**
25    * Encrypts string
26    * - From php.net docs
27    *
28    * @param $str
29    *   string to encrypt
30    * @param $salt
31    *   password to use for encryption
32    * @param $iv_len
33    *   length of random number
34    */
35   function encrypt($str, $salt, $iv_len = 16) {
36
37     $str .= "\x13";
38     $n = strlen($str);
39     if ($n % 16) $str .= str_repeat("\0", 16 - ($n % 16));
40     $i = 0;
41     $enc_text = $this->getRndIV($iv_len);
42     $iv = substr($salt ^ $enc_text, 0, 512);
43     while ($i < $n) {
44       $block = substr($str, $i, 16) ^ pack('H*', md5($iv));
45       $enc_text .= $block;
46       $iv = substr($block . $iv, 0, 512) ^ $salt;
47       $i += 16;
48     }
49     return urlencode(base64_encode($enc_text));
50   }
51
52   /**
53    * Decrypts string
54    * - From php.net docs
55    *
56    * @param $enc
57    *   encrypted string to decrypt
58    * @param $salt
59    *   password to use for encryption
60    * @param $iv_len
61    *   length of random number
62    */
63   function decrypt($enc, $salt, $iv_len = 16) {
64
65      $enc = urldecode(base64_decode($enc));
66      $n = strlen($enc);
67      $i = $iv_len;
68      $str = '';
69      $iv = substr($salt ^ substr($enc, 0, $iv_len), 0, 512);
70      while ($i < $n) {
71          $block = substr($enc, $i, 16);
72          $str .= $block ^ pack('H*', md5($iv));
73          $iv = substr($block . $iv, 0, 512) ^ $salt;
74          $i += 16;
75      }
76      return preg_replace('/\\x13\\x00*$/', '', $str);
77   }
78 }
79
80
81 ?>