function check_ElGMult_correctness($pk, $sk) { $group = $pk["group"]; foreach ($group["G"] as $m1) { foreach ($group["G"] as $m2) { if (_DEBUG >= 8) { echo "Checking ElGamal mult for {$m1} and {$m2}..."; } $c1 = ElG_Enc($m1, $pk); $c2 = ElG_Enc($m2, $pk); $cmult = ElG_Mult($c1, $c2, $pk); if (modular_mult($m1, $m2, $group["modulo"]) != ElG_Dec($cmult, $pk, $sk)) { if (_DEBUG >= 1) { echo "\nERROR : ElGamal homomorphic multiplication error for m1 = {$m1} and m2 = {$m2}\n"; } return false; } if (_DEBUG >= 8) { echo "\n"; } } } return true; }
$cumul["keygen"] += 1000 * ($end_time - $begin_time); list($pk, $sk) = array_values($keys); $group = $pk["group"]; $a = $group["G"][array_rand($group["G"])]; $b = $group["G"][array_rand($group["G"])]; $begin_time = microtime(true); $ca = ElG_Enc($a, $pk); $end_time = microtime(true); $cumul["enc"] += 1000 * ($end_time - $begin_time); $begin_time = microtime(true); ElG_Dec($ca, $pk, $sk); $end_time = microtime(true); $cumul["dec"] += 1000 * ($end_time - $begin_time); $cb = ElG_Enc($b, $pk); $begin_time = microtime(true); ElG_Mult($ca, $cb, $pk); $end_time = microtime(true); $cumul["mult"] += 1000 * ($end_time - $begin_time); $begin_time = microtime(true); ElG_PlainMult($ca, $b, $pk); $end_time = microtime(true); $cumul["plainmult"] += 1000 * ($end_time - $begin_time); $begin_time = microtime(true); ElG_ScalarExp($ca, $b, $pk); $end_time = microtime(true); $cumul["scexp"] += 1000 * ($end_time - $begin_time); $begin_time = microtime(true); ElG_Rerand($ca, $pk); $end_time = microtime(true); $cumul["rerand"] += 1000 * ($end_time - $begin_time); }