Start · Sprachen · PHP · Referenz · rnp_ffi_set_pass_provider

rnp_ffi_set_pass_provider

Funktion

Setzt eine Callback-Funktion, die bei Bedarf Passwörter für kryptografische Operationen mit dem RNP-FFI-Kontext bereitstellt.

seit PHP 8.0.0 Kategorie: crypto

Signatur

rnp_ffi_set_pass_provider(RnpFFI $ffi, callable $callback): bool

Beschreibung

rnp_ffi_set_pass_provider registriert eine PHP-Callable als Passwort-Provider für einen RnpFFI-Kontext. Immer wenn die RNP-Bibliothek ein Passwort benötigt – etwa beim Entschlüsseln einer verschlüsselten Nachricht oder beim Zugriff auf einen passwortgeschützten privaten Schlüssel – wird diese Callback-Funktion automatisch aufgerufen.

Der Callback erhält typischerweise Informationen über den Schlüssel und den Grund der Passwortabfrage und soll das Passwort als Zeichenkette zurückliefern. Auf diese Weise lässt sich die Passwortbereitstellung flexibel gestalten: z. B. interaktive Eingabe, Abruf aus einem sicheren Speicher oder Verwendung einer festen Zeichenkette in Tests.

Diese Funktion ist Teil der rnp-Erweiterung, die eine PHP-Anbindung an die RNP OpenPGP-Bibliothek bereitstellt. Sie wird typischerweise unmittelbar nach der Erstellung eines RnpFFI-Objekts aufgerufen, um den Kontext für passwortgeschützte Operationen vorzubereiten.

Ohne einen gesetzten Passwort-Provider schlagen Operationen, die ein Passwort erfordern, fehl. Daher ist das Setzen eines Providers essenziell für alle Workflows, die verschlüsselte Schlüssel oder Nachrichten verarbeiten.

Parameter

Name Typ Default Beschreibung
$ffi Pflicht RnpFFI Der RNP-FFI-Kontext, für den der Passwort-Provider gesetzt werden soll. Wird mit rnp_ffi_create() erstellt.
$callback Pflicht callable Eine PHP-Callable, die aufgerufen wird, wenn ein Passwort benötigt wird. Sie erhält Informationen über den Schlüssel und den Grund der Abfrage und soll das Passwort als string zurückgeben. Signatur: function(RnpFFI $ffi, mixed $key, string $pgp_context, string &$password): bool.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Passwort-Provider erfolgreich gesetzt wurde, andernfalls false – z. B. wenn der übergebene FFI-Kontext ungültig ist.

Beispiele

Einfacher Passwort-Provider für eine verschlüsselte Nachricht

<?php
// RNP-FFI-Kontext erstellen
$ffi = rnp_ffi_create('GPG', 'GPG');

// Passwort-Provider registrieren
$result = rnp_ffi_set_pass_provider($ffi, function (
    RnpFFI $ffi,
    mixed $key,
    string $pgp_context,
    string &$password
): bool {
    // Passwort je nach Kontext bereitstellen
    // In der Praxis: sicher aus einem Passwort-Manager oder Eingabe holen
    $password = 'mein-geheimes-passwort';
    return true; // true = Passwort wurde erfolgreich gesetzt
});

if ($result) {
    echo 'Passwort-Provider erfolgreich registriert.' . PHP_EOL;
} else {
    echo 'Fehler beim Registrieren des Passwort-Providers.' . PHP_EOL;
}

// Schlüsselring laden (Beispiel)
// rnp_load_keys($ffi, 'GPG', $keyringData, RNP_LOAD_SAVE_SECRET_KEYS);

// Jetzt können passwortgeschützte Operationen durchgeführt werden
// z. B. rnp_decrypt($ffi, $encryptedData, $decryptedOutput);

rnp_ffi_destroy($ffi);
Passwort-Provider erfolgreich registriert.

Passwort-Provider mit kontextabhängiger Passwortauswahl

<?php
$passwords = [
    'decrypt' => 'entschluesselungs-passwort',
    'protect' => 'schutz-passwort',
];

$ffi = rnp_ffi_create('GPG', 'GPG');

rnp_ffi_set_pass_provider($ffi, function (
    RnpFFI $ffi,
    mixed $key,
    string $pgp_context,
    string &$password
) use ($passwords): bool {
    // pgp_context enthält z. B. 'decrypt', 'protect', 'sign' etc.
    if (isset($passwords[$pgp_context])) {
        $password = $passwords[$pgp_context];
        return true;
    }
    // Kein passendes Passwort gefunden
    return false;
});

echo 'Kontextabhängiger Passwort-Provider gesetzt.' . PHP_EOL;

rnp_ffi_destroy($ffi);
Kontextabhängiger Passwort-Provider gesetzt.

// Wichtig · Fallstricke

Sicherheitshinweis: Passwörter sollten niemals hart kodiert im Quellcode stehen. Verwende stattdessen sichere Speicher wie Umgebungsvariablen, Vault-Systeme oder verschlüsselte Konfigurationsdateien.

Der Callback wird synchron im Kontext der jeweiligen RNP-Operation aufgerufen. Langwierige oder blockierende Operationen im Callback können die Ausführung verlangsamen. Exceptions, die im Callback geworfen werden, können zu unerwartetem Verhalten führen – fange sie daher innerhalb des Callbacks ab.

Gibt der Callback false zurück, bricht die RNP-Bibliothek die passwortpflichtige Operation ab. Dies kann genutzt werden, um Zugriff kontrolliert zu verweigern.

Die Funktion steht nur zur Verfügung, wenn die rnp-PHP-Erweiterung installiert und aktiviert ist.