Signatur
Beschreibung
rnp_ffi_create initialisiert eine neue RNP-FFI-Instanz, die als zentrales Handle für alle weiteren kryptografischen Operationen der RNP-Bibliothek dient. Die Bibliothek implementiert den OpenPGP-Standard (RFC 4880) und erlaubt Ver- und Entschlüsselung, Signierung sowie Schlüsselverwaltung.
Der Parameter $pub_format legt fest, in welchem Format der öffentliche Schlüsselbund intern verwaltet wird, während $sec_format das Format des privaten Schlüsselbundes bestimmt. Typische Werte sind GPG (klassisches GnuPG-Format) oder KBX (Keybox-Format). Das erzeugte Handle muss nach Gebrauch mit rnp_ffi_destroy freigegeben werden, um Ressourcenlecks zu vermeiden.
Diese Funktion sollte am Anfang jeder RNP-Session aufgerufen werden, bevor Schlüssel geladen, Nachrichten verschlüsselt oder Signaturen erstellt werden. Das zurückgegebene $ffi-Handle wird anschließend allen weiteren RNP-Funktionen übergeben.
Die RNP-Erweiterung steht als PECL-Paket zur Verfügung und bietet eine PHP-Schnittstelle zur nativen librnp-Bibliothek.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ffi Pflicht | RnpFFI | Ausgabe-Parameter, der nach erfolgreichem Aufruf das initialisierte RnpFFI-Objekt enthält. Dieses Handle wird an alle weiteren RNP-Funktionen übergeben. Wird als Referenz übergeben. |
|
| $pub_format Pflicht | string | Format des öffentlichen Schlüsselbundes. Gültige Werte sind GPG (GnuPG-Standardformat, empfohlen) und KBX (Keybox-Format). Der Wert beeinflusst, wie Schlüssel intern gespeichert und gelesen werden. |
|
| $sec_format Pflicht | string | Format des privaten Schlüsselbundes. Gültige Werte sind GPG und G10 (GnuPG-2.1-kompatibles Format für einzeln gespeicherte Schlüssel). Üblicherweise wird GPG verwendet. |
Rückgabewert
true zurück, wenn das FFI-Objekt erfolgreich erstellt wurde. Im Fehlerfall (ungültiges Format, fehlende Bibliothek) wird false zurückgegeben.Beispiele
Einfache Initialisierung einer RNP-FFI-Instanz
<?php
// RNP-FFI-Handle erstellen (GPG-Format für öffentliche und private Schlüssel)
$ffi = null;
if (!rnp_ffi_create($ffi, 'GPG', 'GPG')) {
throw new RuntimeException('Fehler beim Erstellen der RNP-FFI-Instanz.');
}
echo 'RNP-FFI-Instanz erfolgreich erstellt.' . PHP_EOL;
// ... weitere RNP-Operationen ...
// Ressourcen wieder freigeben
rnp_ffi_destroy($ffi);
Schlüsselgenerierung nach Initialisierung
<?php
// FFI-Instanz erstellen
$ffi = null;
if (!rnp_ffi_create($ffi, 'GPG', 'GPG')) {
throw new RuntimeException('RNP konnte nicht initialisiert werden.');
}
// Schlüsselpaar generieren (RSA, 2048 Bit)
$params = [
'type' => 'RSA',
'bits' => 2048,
'userid' => 'Beispiel Nutzer <nutzer@example.com>',
];
if (rnp_generate_key_json($ffi, json_encode($params), $keyJson)) {
$keyData = json_decode($keyJson, true);
echo 'Schlüssel-Fingerprint: ' . ($keyData['primary']['fingerprint'] ?? 'unbekannt') . PHP_EOL;
} else {
echo 'Schlüsselgenerierung fehlgeschlagen.' . PHP_EOL;
}
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Ressourcenverwaltung: Jede mit rnp_ffi_create erstellte Instanz muss nach Gebrauch explizit mit rnp_ffi_destroy freigegeben werden, da die Bibliothek nativen Speicher verwaltet, der vom PHP-Garbage-Collector nicht automatisch bereinigt wird.
Sicherheitshinweis: Private Schlüssel werden im Speicher der FFI-Instanz gehalten. Achten Sie darauf, die Instanz so früh wie möglich zu zerstören und sensible Schlüsseldaten nicht länger als nötig im Arbeitsspeicher zu halten.
Verfügbarkeit: Die RNP-Erweiterung ist nicht standardmäßig in PHP enthalten. Sie muss über PECL (pecl install rnp) installiert und die native librnp-Bibliothek muss auf dem System vorhanden sein.