Start · Sprachen · PHP · Referenz · rnp_load_keys

rnp_load_keys

Funktion

Lädt kryptografische Schlüssel aus einem PHP-String in eine RNP-FFI-Instanz.

Kategorie: crypto

Signatur

rnp_load_keys(FFI\CData $ffi, string $format, string $input, int $flags): bool

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

Typ
bool
Beschreibung
Gibt 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);
Öffentlicher Schlüssel erfolgreich geladen.

Ö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);
Schlüsselring vollständig geladen. Öffentliche Schlüssel: 3, Geheime Schlüssel: 1

// 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.