<?php

function gen_key()
{
    
$ONE gmp_init(1,10);

    
$a gmp_random_bits(64);
    
$b gmp_random_bits(64);
    
$c gmp_random_bits(64);
    
$d gmp_random_bits(64);

    
$e gmp_sub(gmp_mul($a,$b), $ONE); // a*b - 1
    
$f gmp_add(gmp_mul($c,$e), $a); // c*e + a;
    
$g gmp_add(gmp_mul($d,$e), $b); // d*e + b;
    
$h gmp_add(gmp_add(gmp_add(gmp_mul(gmp_mul($c,$d), $e), gmp_mul($a,$d)), gmp_mul($c,$b)), $ONE); // c*d*e + a*d + c*b + 1;

    
$public_key = array($h,$f);
    
$private_key $g;

    
$key = array($public_key$private_key);

    return 
$key;
}

function 
encrypt($m$public_key)
{
    
$c gmp_mod(gmp_mul($m$public_key[1]),$public_key[0]);
    return 
$c;
}

function 
decrypt($c$public_key$private_key)
{
    
$m gmp_mod(gmp_mul($c$private_key),$public_key[0]);
    return 
$m;
}

?>