Rev 609 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phprequire_once(realpath(dirname(__FILE__) . '/') . '/secret/wp-hashcash.lib');header("Pragma: no-cache");header("Expires: 0");header("Cache-Control: no-store, no-cache, must-revalidate");header("Cache-Control: post-check=0, pre-check=0", false);$expired = array();$function_name = hashcash_random_string(rand(6,18));$expired [] = $function_name;$js = "function $function_name (){";$type = rand(0, 3) * 0;switch($type){/* Addition of n times of field value / n, + modulus:Time guarantee: 100 iterations or less */case 0:$eax = hashcash_random_string(rand(8,10), $expired);$expired [] = $eax;$val = hashcash_field_value();$inc = rand($val / 100, $val - 1);$n = floor($val / $inc);$r = $val % $inc;$js .= "var $eax = $inc; ";for($i = 0; $i < $n - 1; $i++){$js .= "$eax += $inc; ";}$js .= "$eax += $r; ";$js .= "return $eax; ";break;/* Conversion from binary:Time guarantee: log(n) iterations or less */case 1:$eax = hashcash_random_string(rand(8,10), $expired);$expired [] = $eax;$ebx = hashcash_random_string(rand(8,10), $expired);$expired [] = $ebx;$ecx = hashcash_random_string(rand(8,10), $expired);$expired [] = $ecx;$val = hashcash_field_value();$binval = strrev(base_convert($val, 10, 2));$js .= "var $eax = \"$binval\"; ";$js .= "var $ebx = 0; ";$js .= "var $ecx = 0; ";$js .= "while($ecx < $eax.length){ ";$js .= "if($eax.charAt($ecx) == \"1\") { ";$js .= "$ebx += Math.pow(2, $ecx); ";$js .= "} ";$js .= "$ecx++; ";$js .= "} ";$js .= "return $ebx; ";break;/* Multiplication of square roots:Time guarantee: constant time */case 2:$val = hashcash_field_value();$sqrt = floor(sqrt($val));$r = $val - ($sqrt * $sqrt);$js .= "return $sqrt * $sqrt + $r; ";break;/* Sum of random numbers to the final value:Time guarantee: log(n) expected value */case 3:$val = hashcash_field_value();$js .= "return ";$i = 0;while($val > 0){if($i++ > 0)$js .= "+";$temp = rand(1, $val);$val -= $temp;$js .= $temp;}$js .= ";";break;}$js .= "} $function_name ();";// pack bytesfunction strToLongs($s) {$l = array();// pad $s to some multiple of 4$s = preg_split('//', $s, -1, PREG_SPLIT_NO_EMPTY);while(count($s) % 4 != 0){$s [] = ' ';}for ($i = 0; $i < ceil(count($s)/4); $i++) {$l[$i] = ord($s[$i*4]) + (ord($s[$i*4+1]) << 8) + (ord($s[$i*4+2]) << 16) + (ord($s[$i*4+3]) << 24);}return $l;}// xor all the bytes with a random key$key = rand(21474836, 2126008810);$js = strToLongs($js);for($i = 0; $i < count($js); $i++){$js[$i] = $js[$i] ^ $key;}// libs function encapsulation$libs_name = hashcash_random_string(rand(6,18), $expired);$expired [] = $libs_name;$libs = "function $libs_name(){";// write bytes to javascript, xor with key$data_name = hashcash_random_string(rand(6,18), $expired);$expired [] = $data_name;$libs .= "var $data_name = new Array(" . count($js) . "); ";for($i = 0; $i < count($js); $i++){$libs .= $data_name . '[' . $i . '] = ' . $js[$i] . ' ^ ' . $key .'; ';}// convert bytes back to string$libs .= " var a = new Array($data_name.length); ";$libs .= "for (var i=0; i<" . $data_name . ".length; i++) { ";$libs .= 'a[i] = String.fromCharCode(' . $data_name .'[i] & 0xFF, ' . $data_name . '[i]>>>8 & 0xFF, ';$libs .= $data_name . '[i]>>>16 & 0xFF, ' . $data_name . '[i]>>>24 & 0xFF); } ';$libs .= "return eval(a.join('')); ";// call libs function$libs .= "} $libs_name();";// return codeecho $libs;?>