function check_ElGScalarExp_correctness($pk, $sk)
{
    $group = $pk["group"];
    $Zq = range(0, $group["order"] - 1);
    foreach ($group["G"] as $m) {
        foreach ($Zq as $scalar) {
            if (_DEBUG >= 8) {
                echo "Checking ElGamal scalar exp for {$m} and {$scalar}...";
            }
            $c = ElG_Enc($m, $pk);
            $cmult = ElG_ScalarExp($c, $scalar, $pk);
            if (modular_exp($m, $scalar, $group["modulo"]) != ElG_Dec($cmult, $pk, $sk)) {
                if (_DEBUG >= 1) {
                    echo "\nERROR : ElGamal homomorphic scalar exponentiation error for m = {$m} and scalar = {$scalar}\n";
                }
                return false;
            }
            if (_DEBUG >= 8) {
                echo "\n";
            }
        }
    }
    return true;
}
Пример #2
0
 //Note: now P takes the place of V, so V = P in the following
 $src_V = $src_P;
 //Simulation of the threshold homomorphic part of the protocol
 do {
     $r_tmp = $group["G"][array_rand($group["G"])];
 } while (gcd($r_tmp, $group["modulo"] - 1) != 1);
 $trap = $r_tmp * $dst_D;
 //Done by V (key generation is considered as done offline, prior to network setup)
 $keys_V = ElG_KeyGen_alt($r, $q);
 if ($keys_V == false) {
     echo "Error: Key Generation failed for V with lambda = {$lambda} and r = {$r}...\n";
     exit;
 }
 list($pk_V, $sk_V) = array_values($keys_V);
 $time_aux = microtime(true);
 $gpowdstDrtmpsrcV = modular_exp($group["gen"], modular_mult($trap, $src_V, $group["modulo"] - 1), $group["modulo"]);
 $cgpowdstDrtmpsrcV = ElG_Enc($gpowdstDrtmpsrcV, $pk_V);
 //Done by S
 $inv_rtmp_pmin1 = modular_inverse($r_tmp, $group["modulo"] - 1);
 $cgpowdstDsrcV = ElG_ScalarExp($cgpowdstDrtmpsrcV, $inv_rtmp_pmin1, $pk_V);
 $cLocalID_DV = ElG_PlainMult($cgpowdstDsrcV, $ID_D, $pk_V);
 $cLocalID_DV = ElG_Rerand($cLocalID_DV, $pk_V);
 //Done by V
 $LocalID_DV = ElG_Dec($cLocalID_DV, $pk_V, $sk_V);
 $total_time_init_route += microtime(true) - $time_aux;
 //Because V = P, we should have that the LocalID_DV found be equal to LocalID_DP_theoretic from above
 if ($LocalID_DV != $LocalID_DP_theoretic) {
     echo "Error in route initialization: for q = {$q}, p = ", $group["modulo"], ", ID_D = {$ID_D}, s_D = {$dst_D}, k_V = {$src_V}, r_tmp = {$r_tmp}, we have {$LocalID_DV} != {$LocalID_DP_theoretic}\n";
     exit;
 } elseif ($echo_when_OK) {
     echo "Route initialization test #{$i} OK: for q = {$q}, p = ", $group["modulo"], ", ID_D = {$ID_D}, s_D = {$dst_D}, k_V = {$src_V}, r_tmp = {$r_tmp},we have {$LocalID_DV} = {$LocalID_DP_theoretic}\n";