2b9a673912
PHP registration page for AzerothCore with SRP6 salt/verifier generation, Cloudflare Turnstile + honeypot + rate limiting anti-spam, and a WoW-themed landing page with client setup instructions.
45 lines
1.4 KiB
PHP
45 lines
1.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Ruční self-test: ověří, že Srp6::makeRegistrationData() dává stejný
|
|
* výsledek jako nezávislá referenční implementace (ověřeno proti Python/
|
|
* Node.js reimplementaci algoritmu z azerothcore/ac-nodejs-srp6).
|
|
*
|
|
* Spusť na serveru: php includes/srp6_selftest.php
|
|
* Očekávaný výstup: "OK - shoduje se s referenční implementací."
|
|
*/
|
|
|
|
require_once __DIR__ . '/Srp6.php';
|
|
|
|
$reflection = new ReflectionClass(Srp6::class);
|
|
$method = $reflection->getMethod('gmpToLittleEndianBytes');
|
|
$method->setAccessible(true);
|
|
|
|
$username = 'TESTUSER';
|
|
$password = 'TESTPASS';
|
|
$fixedSalt = hex2bin('00112233445566778899aabbccddeeff00112233445566778899aabbccddee');
|
|
|
|
// Přepočítej ručně se stejnou fixní solí jako reference (obchází random_bytes).
|
|
$h1 = sha1(strtoupper($username) . ':' . strtoupper($password), true);
|
|
$xHash = sha1($fixedSalt . $h1, true);
|
|
$x = gmp_import($xHash, 1, GMP_LSW_FIRST | GMP_LITTLE_ENDIAN);
|
|
$n = gmp_init('894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7', 16);
|
|
$g = gmp_init(7, 10);
|
|
$v = gmp_powm($g, $x, $n);
|
|
$verifier = $method->invoke(null, $v, 32);
|
|
|
|
$expected = '0eac7840ff65c7e32dbbb3b173a1cc7ca7cde40f2c3d8423777da4f2929e9257';
|
|
$actual = bin2hex($verifier);
|
|
|
|
if ($actual === $expected) {
|
|
echo "OK - shoduje se s referenční implementací.\n";
|
|
exit(0);
|
|
}
|
|
|
|
echo "CHYBA: verifier se neshoduje!\n";
|
|
echo "Očekáváno: $expected\n";
|
|
echo "Spočteno: $actual\n";
|
|
exit(1);
|