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