Signatur
Beschreibung
rnp_load_keys ist Teil der PHP-RNP-Erweiterung (librnp-Bindings) und dient dazu, OpenPGP-Schlüssel aus einem binären oder ASCII-armierten String in eine zuvor erzeugte FFI\CData-RNP-Instanz zu laden. Die Schlüssel stehen danach für Verschlüsselungs-, Entschlüsselungs-, Signier- und Verifizierungsoperationen zur Verfügung.
Der Parameter format gibt an, in welchem Format die Schlüssel vorliegen – typischerweise "GPG" für binäre OpenPGP-Pakete oder "Armored" für ASCII-Armor (Base64-kodierte PGP-Blöcke, wie sie häufig in E-Mails oder Textdateien vorkommen). Mit dem Parameter flags lässt sich steuern, ob öffentliche Schlüssel (RNP_LOAD_SAVE_PUBLIC_KEYS), geheime Schlüssel (RNP_LOAD_SAVE_SECRET_KEYS) oder beide geladen werden sollen.
Diese Funktion ist besonders nützlich, wenn Schlüsselmaterial nicht aus einer Datei, sondern aus einer Datenbank, einer API-Antwort oder einer Session-Variable stammt und direkt im Arbeitsspeicher verarbeitet werden soll, ohne temporäre Dateien anzulegen.
Im Fehlerfall – z. B. wenn der übergebene String kein gültiges Schlüsselmaterial enthält oder das Format nicht übereinstimmt – gibt die Funktion false zurück. Es empfiehlt sich, den Rückgabewert stets zu prüfen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ffi Pflicht | FFI\CData | Eine gültige RNP-FFI-Instanz, die zuvor mit rnp_ffi_create() erzeugt wurde und den Schlüsselring repräsentiert, in den geladen wird. |
|
| $format Pflicht | string | Das Format des Schlüsselmaterials, z. B. "GPG" für binäre OpenPGP-Pakete oder "Armored" für ASCII-Armor-kodierte Schlüssel. |
|
| $input Pflicht | string | Der PHP-String, der das zu ladende Schlüsselmaterial enthält – entweder als rohe Binärdaten oder als ASCII-armierter PGP-Block. | |
| $flags Pflicht | int | Bitmaske, die angibt, welche Schlüsseltypen geladen werden sollen. Mögliche Werte sind RNP_LOAD_SAVE_PUBLIC_KEYS, RNP_LOAD_SAVE_SECRET_KEYS oder deren Kombination via |. |
Rückgabewert
true zurück, wenn die Schlüssel erfolgreich geladen wurden, andernfalls false – etwa bei ungültigem Format, leerem Input oder inkompatiblen Flags.Beispiele
Öffentlichen ASCII-Armor-Schlüssel aus einer Variablen laden
<?php
// RNP-FFI-Instanz für OpenPGP erzeugen
$ffi = rnp_ffi_create('GPG', 'GPG');
// ASCII-armierter öffentlicher Schlüssel (z. B. aus Datenbank oder API)
$pubkeyArmored = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\n...Base64...
-----END PGP PUBLIC KEY BLOCK-----";
// Schlüssel in die FFI-Instanz laden
$result = rnp_load_keys($ffi, 'Armored', $pubkeyArmored, RNP_LOAD_SAVE_PUBLIC_KEYS);
if ($result) {
echo "Öffentlicher Schlüssel erfolgreich geladen.\n";
} else {
echo "Fehler beim Laden des Schlüssels.\n";
}
rnp_ffi_destroy($ffi);
Öffentliche und geheime Schlüssel gleichzeitig laden
<?php
// RNP-FFI-Instanz erzeugen
$ffi = rnp_ffi_create('GPG', 'GPG');
// Schlüsselmaterial aus einer Datei lesen (kein temporäres Schreiben nötig)
$keyringData = file_get_contents('/pfad/zum/keyring.gpg');
if ($keyringData === false) {
die("Schlüsseldatei konnte nicht gelesen werden.\n");
}
// Sowohl öffentliche als auch geheime Schlüssel laden
$flags = RNP_LOAD_SAVE_PUBLIC_KEYS | RNP_LOAD_SAVE_SECRET_KEYS;
$result = rnp_load_keys($ffi, 'GPG', $keyringData, $flags);
if ($result) {
echo "Schlüsselring vollständig geladen.\n";
// Schlüsselanzahl ausgeben
$pubCount = rnp_get_public_key_count($ffi);
$secCount = rnp_get_secret_key_count($ffi);
echo "Öffentliche Schlüssel: {$pubCount}, Geheime Schlüssel: {$secCount}\n";
} else {
echo "Fehler beim Laden des Schlüsselrings.\n";
}
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Sicherheitshinweis: Geheime Schlüssel (RNP_LOAD_SAVE_SECRET_KEYS) sollten niemals aus nicht vertrauenswürdigen Quellen geladen werden. Stellen Sie sicher, dass der übergebene String authentisch ist und nicht manipuliert werden konnte (z. B. durch MITM-Angriffe oder unsichere Speicherorte).
Schlüsselmaterial sollte nach Verwendung sicher aus dem Speicher entfernt werden. Rufen Sie nach Abschluss aller Operationen stets rnp_ffi_destroy() auf, um Ressourcen freizugeben.
Die Funktion ist Teil der PECL-Erweiterung rnp (librnp PHP bindings) und erfordert, dass librnp auf dem System installiert ist. Sie steht nicht in einer Standard-PHP-Installation zur Verfügung.