Start · Sprachen · PHP · Referenz · rnp_ffi_create

rnp_ffi_create

Funktion

Erzeugt ein übergeordnetes <code>RnpFFI</code>-Objekt als Einstiegspunkt für alle kryptografischen Operationen der RNP-Bibliothek.

seit PHP 8.3.0 Kategorie: crypto

Signatur

rnp_ffi_create(RnpFFI &$ffi, string $pub_format, string $sec_format): bool

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

Typ
bool
Beschreibung
Gibt 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);
RNP-FFI-Instanz erfolgreich erstellt.

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);
Schlüssel-Fingerprint: <generierter Fingerprint>

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