Signatur
Beschreibung
rnp_dump_packets_to_json() analysiert einen rohen OpenPGP-Paketstrom (binär oder ASCII-armored) und liefert eine maschinenlesbare JSON-Darstellung aller enthaltenen Pakete zurück. Die Funktion gehört zur RNP-Erweiterung (librnp-Bindings) und setzt eine installierte ext-rnp-Erweiterung voraus.
Das Ergebnis eignet sich hervorragend für Diagnose- und Debugging-Zwecke: Man kann damit den genauen Aufbau eines PGP-Schlüssels, einer signierten Nachricht oder eines verschlüsselten Datenpakets inspizieren, ohne einen vollständigen Schlüsselspeicher aufzubauen. Gerade beim Troubleshooting von PGP-Interoperabilitätsproblemen ist diese Funktion wertvoll.
Über den Parameter flags lässt sich steuern, ob z. B. rohe Bytefolgen, MPI-Werte kryptografischer Parameter oder der Inhalt von Secret-Key-Paketen in die Ausgabe einbezogen werden sollen. Die verfügbaren Flag-Konstanten beginnen mit RNP_JSON_DUMP_*.
RNP_JSON_DUMP_MPI– gibt die MPI-Werte der Schlüsselparameter ausRNP_JSON_DUMP_RAW– gibt rohe Byte-Repräsentationen ausRNP_JSON_DUMP_GRIP– gibt Key-Grips aus
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $input Pflicht | string | Der rohe OpenPGP-Paketstrom als binärer String oder als ASCII-armored-Text (z. B. Inhalt einer .asc- oder .pgp-Datei). |
|
| $flags | int | 0 | Bitmaske aus RNP_JSON_DUMP_*-Konstanten, die steuert, welche zusätzlichen Details (MPI-Werte, Rohdaten, Key-Grips) in die JSON-Ausgabe einbezogen werden. Standard ist 0 (keine Zusatzdetails). |
Rückgabewert
false zurückgegeben.Beispiele
Öffentlichen Schlüssel analysieren und ausgeben
<?php
// Öffentlichen Schlüssel aus einer Datei laden
$pgpData = file_get_contents('/path/to/publickey.asc');
$json = rnp_dump_packets_to_json($pgpData);
if ($json === false) {
echo 'Fehler beim Verarbeiten des PGP-Paketstroms.' . PHP_EOL;
} else {
$packets = json_decode($json, true);
foreach ($packets as $packet) {
echo 'Pakettyp: ' . ($packet['header']['type'] ?? 'unbekannt') . PHP_EOL;
}
}
Pakete mit MPI-Werten und Key-Grips dumpen
<?php
// Erweiterte Ausgabe mit MPI-Werten und Key-Grips
$pgpData = file_get_contents('/path/to/publickey.asc');
$flags = RNP_JSON_DUMP_MPI | RNP_JSON_DUMP_GRIP;
$json = rnp_dump_packets_to_json($pgpData, $flags);
if ($json !== false) {
// Schön formatierte Ausgabe zur Inspektion
$decoded = json_decode($json, true);
echo json_encode($decoded, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
} else {
echo 'Analyse fehlgeschlagen.' . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Werden Secret-Key-Pakete übergeben und entsprechende Dump-Flags gesetzt, können sensible kryptografische Materialien (private Schlüsselparameter) im JSON-String erscheinen. Das Ergebnis sollte niemals ungeprüft an Endnutzer ausgegeben oder in Logs geschrieben werden.
Die Funktion setzt die PHP-Erweiterung ext-rnp voraus, die auf librnp basiert. Sie ist nicht Teil der PHP-Standarddistribution und muss separat installiert werden. Prüfe die Verfügbarkeit mit extension_loaded('rnp').
Bei sehr großen PGP-Paketströmen (z. B. Keyring-Dateien mit vielen Schlüsseln) kann die JSON-Ausgabe entsprechend umfangreich sein – plane den Speicherverbrauch ein.