* * Schreibt .sig neben das Paket. Beide Dateien (ZIP und .sig) werden als Anhänge des Releases * hochgeladen, mit genau diesen Namen: deskhub-.zip und deskhub-.zip.sig. * Verwendet wird derselbe private Schlüssel wie für Plugins und Themes (der öffentliche Teil steckt in * includes/catalog_defaults.php). Signiert wird: "deskhub-update\n\n" mit RSA und SHA-256. */ if (PHP_SAPI !== 'cli') { http_response_code(404); exit; } function fail(string $m): never { fwrite(STDERR, $m . PHP_EOL); exit(1); } $zip = $argv[1] ?? fail('Aufruf: php tools/release-sign.php '); $keyFile = $argv[2] ?? fail('Privater Schlüssel fehlt.'); $version = ltrim(trim($argv[3] ?? fail('Version fehlt (z. B. 1.0.7).')), 'vV'); if (!is_file($zip)) fail('ZIP-Datei nicht gefunden.'); if (!preg_match('/^\d+\.\d+\.\d+([\-+][0-9A-Za-z.\-]+)?$/', $version)) fail('Die Version muss wie 1.0.7 aussehen.'); if (basename($zip) !== "deskhub-{$version}.zip") fwrite(STDERR, "Hinweis: Der Dateiname sollte deskhub-{$version}.zip lauten, sonst findet DeskHub das Paket nicht.\n"); $private = openssl_pkey_get_private((string) @file_get_contents($keyFile)) ?: fail('Der private Schlüssel konnte nicht gelesen werden.'); $sha = hash_file('sha256', $zip); if (!openssl_sign("deskhub-update\n{$version}\n{$sha}", $signature, $private, OPENSSL_ALGO_SHA256)) fail('Signieren fehlgeschlagen: ' . openssl_error_string()); file_put_contents($zip . '.sig', base64_encode($signature)); echo "Fertig.\n Paket: {$zip}\n SHA-256: {$sha}\n Signatur: {$zip}.sig\nBeide Dateien als Anhänge ans Release {$version} hängen.\n";