/**
 * Turn a binary back into a long
 * @param string $b
 * @return integer
 * @url http://openidenabled.com Borrowed from PHP-OpenID
 */
function long($b)
{
    $bytes = array_merge(unpack('C*', $b));
    $n = 0;
    foreach ($bytes as $byte) {
        $n = bmmul($n, bmpow(2, 8));
        $n = bmadd($n, $byte);
    }
    return $n;
}
Example #2
0
function bmmul($l, $r)
{
    if (function_exists('bcmul')) {
        return bcmul($l, $r);
    }
    if (function_exists('gmp_mul')) {
        return gmp_strval(gmp_mul($l, $r));
    }
    $l = strval($l);
    $r = strval($r);
    $v = '0';
    $z = '';
    for ($i = strlen($r) - 1; $i >= 0; $i--) {
        $bd = (int) $r[$i];
        $carry = 0;
        $p = "";
        for ($j = strlen($l) - 1; $j >= 0; $j--) {
            $ad = (int) $l[$j];
            $pd = $ad * $bd + $carry;
            if ($pd <= 9) {
                $carry = 0;
            } else {
                $carry = (int) ($pd / 10);
                $pd = $pd % 10;
            }
            $p = (string) $pd . $p;
        }
        if ($carry > 0) {
            $p = (string) $carry . $p;
        }
        $p = $p . $z;
        $z .= "0";
        $v = bmadd($v, $p);
    }
    return $v;
}