Files
vojta 2b9a673912 Initial commit: AzerothCore registration site
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.
2026-08-05 11:41:24 +02:00

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);