Signatur
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
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 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);
// 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.