open((string) $this->argument('path')) !== true) { $this->error('Datei ist kein lesbares ZIP.'); return self::FAILURE; } $payload = $zip->getFromName('payload.zip'); $signature = $zip->getFromName('signature.txt'); $metadata = json_decode((string) $zip->getFromName('metadata.json'), true); $zip->close(); $hash = is_array($metadata) ? (string) ($metadata['payload_sha256'] ?? '') : ''; if (! is_string($payload) || ! is_string($signature) || $hash === '' || ! hash_equals($hash, hash('sha256', $payload))) { $this->error('Export ungültig: payload.zip passt nicht zum Hash in metadata.json.'); return self::FAILURE; } if (! $archive->verifyExportSignature($hash, $signature)) { $this->error('Signatur ungültig oder mit keinem bekannten Schlüssel prüfbar.'); return self::FAILURE; } $this->info('Export gültig: Hash und Signatur stimmen.'); return self::SUCCESS; } }