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;
}
Пример #2
0
     $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);
 }