<?php

error_reporting(E_ALL);

if ($argc != 3) {
    echo "Usage: \n";
    echo "{$argv[0]} <crc32> <file>\n";
    exit();
}

define("CRCPOLY",    0xEDB88320);
define("CRCINV",    0x5B358FD3);
define("FINALXOR",    0xFFFFFFFF);

$f_crc = $argv[1];
$file = $argv[2];

$f_crc = hexdec($f_crc);
$o_file = file_get_contents($file);
$f_file = substr($o_file, 0, -4);
$t_crc = crc32($f_file);

$n_cont = 0;
$f_crc ^= FINALXOR;

for ($i = 0; $i < 32; ++$i) {
    if ($n_cont & 1) {
        $n_cont = ($n_cont >> 1) ^ CRCPOLY;
    } else {
        $n_cont >>= 1;
    }

    if ($f_crc & 1) {
        $n_cont ^= CRCINV;
    }
    $f_crc >>= 1;
}
$n_cont ^= $t_crc;

for ($i = 0; $i < 4; ++$i) {
    $tmp = ($n_cont >> $i*8) & 0xFF;
    $f_file .= chr($tmp);
}

printf("Old CRC32: %x\nNew CRC32: %x\n", crc32($o_file), crc32($f_file));