#! /usr/bin/php
<?php

// argv[1] - bin file
// argv[2] - output file
// argv[3] - serial number
// argv[4] - validation key, computed by the programmer

if ($argc < 5) {
    fwrite(STDERR, "Usage: " . $argv[0] . " <in.bin> <out.bin> <serialNumber> <key>\n");
    exit(1);
}

$data = file_get_contents($argv[1]);
if ($data === false) {
    fwrite(STDERR, "Could not read " . $argv[1] . "\n");
    exit(1);
}

$serialNumber = pack("a16", $argv[3]);
$max = 16;
if (strlen($serialNumber) < 16) {
    $max = strlen($serialNumber);
}
for ($i = 0; $i < $max; $i++) {
    $data[$i + 42] = $serialNumber[$i];
}

$vid = $argv[4];
if (strlen($vid) != 22) {
    fwrite(STDERR, "Key must be 22 characters, got " . strlen($vid) . "\n");
    exit(1);
}
for ($i = 0; $i < 22; $i++) {
    $data[$i + 78] = $vid[$i];
}

$serialNumber = trim($serialNumber);
echo "SN: " . $serialNumber . "   Key: " . $vid . "\n";

file_put_contents($argv[2], $data);

$txt = $argv[1] . "\t" . $serialNumber . "\t" . $vid;
file_put_contents('serialNumbers.txt', $txt.PHP_EOL , FILE_APPEND | LOCK_EX);
?>
