<?php
require_once('../include/bcmath.php');
$handle = fopen("keypair.js", "w");
fputs($handle, 'var phprpc_keypair = Array(100);' . "\r\n");
for ($i = 0; $i < 100; $i++) {
$f = false;
while (!$f) {
// P1. 利用素性验证算法,生成一个大素数 q;
$q = bcnextprime(bcrand(127, 1));
// P2. 令 p = q * 2 + 1;
$p = bcadd(bcmul($q, '2'), '1');
// P3. 利用素性验证算法,验证 p 是否是素数,如果 p 是合数,则跳转到 P1;
if (bcisprime($p)) $f = true;
}
while ($f) {
// P4. 生成一个随机数 g,1 < g < p - 1;
$g = bcrand(127, 1);
// P5. 验证 g^2 mod p 和 g^q mod p 都不等于 1,否则跳转到 P4;
if ((bcpowmod($g, '2', $p) <> '1') and
(bcpowmod($g, $q, $p) <> '1')) {
$f = false;
}
}
// P6. g 是大素数 p 的本原根。
echo "p = $p\n";
echo "g = $g\n";
fputs($handle, "phprpc_keypair[$i] = [];\r\n");
fputs($handle, "phprpc_keypair[$i]['p'] = '$p';\r\n");
fputs($handle, "phprpc_keypair[$i]['g'] = '$g';\r\n");
}
fclose($handle);
?>