|
<?php |
|
|
|
require "vendor/autoload.php"; |
|
|
|
$math = Mdanter\Ecc\EccFactory::getAdapter(); |
|
$g = \Mdanter\Ecc\EccFactory::getSecgCurves()->generator256k1(); |
|
|
|
/** |
|
* @var \Mdanter\Ecc\Primitives\GeneratorPoint[] |
|
*/ |
|
$generators = [ |
|
\Mdanter\Ecc\EccFactory::getSecgCurves()->generator256k1(), |
|
\Mdanter\Ecc\EccFactory::getNistCurves()->generator192(), |
|
\Mdanter\Ecc\EccFactory::getNistCurves()->generator256(), |
|
\Mdanter\Ecc\EccFactory::getNistCurves()->generator521(), |
|
]; |
|
|
|
$results = []; |
|
$runsPerCurve = 500; |
|
|
|
$signer = new \Mdanter\Ecc\Crypto\Signature\Signer($math); |
|
foreach ($generators as $g) { |
|
$n = $g->getOrder(); |
|
$name = $g->getCurve()->getName(); |
|
$random = \Mdanter\Ecc\Random\RandomGeneratorFactory::getRandomGenerator(); |
|
|
|
$keys = []; |
|
for ($i = 0; $i < $runsPerCurve; $i++) { |
|
$key = $g->getPrivateKeyFrom($random->generate($n)); |
|
$hash = $random->generate($n); |
|
$k = $random->generate($n); |
|
$public = $key->getPublicKey(); |
|
$sig = $signer->sign($key, $hash, $k); |
|
$keys[] = [$sig, $public, $hash]; |
|
} |
|
|
|
$start = microtime(true); |
|
foreach ($keys as $key) { |
|
list ($sig, $public, $hash) = $key; |
|
|
|
$signature = $signer->verify($public, $sig, $hash); |
|
} |
|
$total = microtime(true) - $start; |
|
$results[$name] = $total; |
|
} |
|
|
|
echo "# Signature verification benchmarks\n"; |
|
echo "Number of curves tested: ".count($generators).PHP_EOL; |
|
echo "Number of iterations per curve: ".$runsPerCurve.PHP_EOL; |
|
|
|
foreach ($results as $name => $result) { |
|
$avg = $result / $runsPerCurve; |
|
echo $name . " --- Total: " . $result . " / Avg run: " . $avg . PHP_EOL; |
|
} |