Пример #1
0
/**
    returns RSA key pair with length $bit_len
*/
function generate_key_pair($bit_len)
{
    // generate two primes p and q
    $p_len = (int) ($bit_len / 2) + 1;
    $q_len = $bit_len - $p_len;
    $p = get_prime($p_len);
    $q = get_prime($q_len);
    // $n - is shared modulus
    $n = bi_mul($p, $q);
    // generate public ($e) and private ($d) keys
    $pq = bi_mul(bi_dec($p), bi_dec($q));
    do {
        $e = bi_rand($q_len, 'microtime_generator');
    } while (!bi_is_zero(bi_dec(bi_gcd($e, $pq))));
    $d = bi_invmod($e, $pq);
    return array('n' => bi_serialize($n), 'public_key' => bi_serialize($e), 'private_key' => bi_serialize($d));
}
Пример #2
0
 /**
  * Finds inverse number $inv for $num by modulus $mod, such as:
  *     $inv * $num = 1 (mod $mod)
  *
  * @param big_int resource $num
  * @param big_int resource $mod
  * @return big_int resource
  * @access public
  */
 function invmod($num, $mod)
 {
     return bi_invmod($num, $mod);
 }
Пример #3
0
echo '$modulus = next_prime($c) = [', bi_to_str($modulus), "]<br/>\n";
$c = bi_addmod($a, $b, $modulus);
echo '$a + $b (mod $modulus) = [', bi_to_str($c), "]<br/>\n";
$c = bi_submod($a, $b, $modulus);
echo '$a - $b (mod $modulus) = [', bi_to_str($c), "]<br/>\n";
$c = bi_mulmod($a, $b, $modulus);
echo '$a * $b (mod $modulus) = [', bi_to_str($c), "]<br/>\n";
$c = bi_divmod($a, $b, $modulus);
echo '$a / $b (mod $modulus) = [', bi_to_str($c), "]<br/>\n";
$c = bi_powmod($a, $b, $modulus);
echo 'pow($a, $b) (mod $modulus) = [', bi_to_str($c), "]<br/>\n";
$c = bi_factmod(1000, $modulus);
echo '1000! (mod $modulus) = [', bi_to_str($c), "]<br/>\n";
$c = bi_absmod(-1, $modulus);
echo '-1 (mod $modulus) = [', bi_to_str($c), "]<br/>\n";
$c = bi_invmod($a, $modulus);
echo '1 / $a (mod $modulus) = [', bi_to_str($c), "]<br/>\n";
$c = bi_sqrmod($a, $modulus);
echo 'sqr($a) (mod $modulus) = [', bi_to_str($c), "]<br/>\n";
echo 'cmp($a, $b) (mod $modulus) = ', bi_cmpmod($a, $b, $modulus), "<br/>\n";
/*
    other functions
*/
echo '<h3>other functions</h3>' . "\n";
/*
    attention: second parameter of bi_pow() must have 
    integer type (not BIG_INT!)
*/
$c = bi_pow($a, 4);
echo 'pow($a, 4) = [', bi_to_str($c), "]<br/>\n";
// argument of bi_fact() must have integer type (not BIG_INT)