Start · Sprachen · PHP · Referenz · rnp_locate_key

rnp_locate_key

Funktion

Sucht in einem RNP-Schlüsselspeicher nach einem Schlüssel anhand eines bestimmten Bezeichnertyps und -werts.

Kategorie: crypto

Signatur

rnp_locate_key(RnpFFI $ffi, string $identifier_type, string $identifier): RnpKey|false

Beschreibung

rnp_locate_key durchsucht den an die RnpFFI-Instanz gebundenen Schlüsselspeicher nach einem OpenPGP-Schlüssel, der dem angegebenen Bezeichner entspricht. Die Funktion ist Teil der RNP-Erweiterung (php-rnp), die eine PHP-Schnittstelle zur RNP-Bibliothek für OpenPGP-Operationen bietet.

Als Bezeichnertyp (identifier_type) werden typischerweise Werte wie userid, keyid, fingerprint, grip oder primary unterstützt. Der zugehörige identifier-Wert ist der konkrete Suchbegriff, z. B. eine E-Mail-Adresse, eine Schlüssel-ID oder ein Fingerabdruck-Hex-String.

Bei Erfolg gibt die Funktion ein RnpKey-Objekt zurück, das für weitere Operationen wie Verschlüsselung, Signierung oder Schlüsselinformationsabfragen genutzt werden kann. Wird kein passender Schlüssel gefunden oder tritt ein Fehler auf, wird false zurückgegeben.

Diese Funktion ist besonders nützlich, wenn man aus einem geladenen Schlüsselbund gezielt einen bestimmten Schlüssel herausfiltern möchte, bevor man ihn für kryptographische Operationen einsetzt.

Parameter

Name Typ Default Beschreibung
$ffi Pflicht RnpFFI Eine gültige RnpFFI-Instanz, die einen geladenen Schlüsselspeicher repräsentiert. Wird typischerweise mit rnp_ffi_create erzeugt und anschließend mit Schlüsseln befüllt.
$identifier_type Pflicht string Der Typ des Bezeichners, nach dem gesucht werden soll. Typische Werte: 'userid', 'keyid', 'fingerprint', 'grip'.
$identifier Pflicht string Der konkrete Suchwert passend zum gewählten identifier_type, z. B. eine E-Mail-Adresse wie 'alice@example.com' oder eine Schlüssel-ID wie '0x1234ABCD'.

Rückgabewert

Typ
RnpKey|false
Beschreibung
Gibt ein RnpKey-Objekt zurück, wenn ein passender Schlüssel gefunden wurde. Gibt false zurück, wenn kein Schlüssel gefunden wurde oder ein Fehler aufgetreten ist.

Beispiele

Schlüssel anhand einer User-ID (E-Mail) suchen

<?php
// FFI-Instanz für OpenPGP erstellen
$ffi = rnp_ffi_create('GPG', 'GPG');

// Schlüsselring aus einer Datei laden
$input = rnp_input_from_path('/pfad/zum/pubring.pgp');
rnp_load_keys($ffi, 'GPG', $input, RNP_LOAD_SAVE_PUBLIC_KEYS);
rnp_input_destroy($input);

// Schlüssel anhand der User-ID suchen
$key = rnp_locate_key($ffi, 'userid', 'alice@example.com');

if ($key !== false) {
    $keyid = rnp_key_get_keyid($key);
    echo 'Schlüssel gefunden, Key-ID: ' . $keyid . PHP_EOL;
    rnp_key_handle_destroy($key);
} else {
    echo 'Kein Schlüssel für diese User-ID gefunden.' . PHP_EOL;
}

rnp_ffi_destroy($ffi);
Schlüssel gefunden, Key-ID: 1234ABCD5678EF90

Schlüssel anhand des Fingerabdrucks suchen

<?php
$ffi = rnp_ffi_create('GPG', 'GPG');

$input = rnp_input_from_path('/pfad/zum/pubring.pgp');
rnp_load_keys($ffi, 'GPG', $input, RNP_LOAD_SAVE_PUBLIC_KEYS);
rnp_input_destroy($input);

$fingerprint = 'AABBCCDDEEFF00112233445566778899AABBCCDD';
$key = rnp_locate_key($ffi, 'fingerprint', $fingerprint);

if ($key !== false) {
    echo 'Schlüssel gefunden!' . PHP_EOL;
    // Weitere Operationen mit $key ...
    rnp_key_handle_destroy($key);
} else {
    echo 'Schlüssel mit diesem Fingerabdruck nicht vorhanden.' . PHP_EOL;
}

rnp_ffi_destroy($ffi);
Schlüssel gefunden!

// Wichtig · Fallstricke

Ressourcenverwaltung: Das zurückgegebene RnpKey-Objekt sollte nach der Verwendung mit rnp_key_handle_destroy freigegeben werden, um Speicherlecks zu vermeiden.

Groß-/Kleinschreibung: Je nach Bezeichnertyp kann die Suche case-sensitiv sein. Fingerabdrücke und Key-IDs werden üblicherweise als Hex-Strings (Groß- oder Kleinbuchstaben) angegeben – die Schreibweise sollte konsistent mit dem gespeicherten Wert sein.

Voraussetzung: Der Schlüsselspeicher muss vor dem Aufruf mit Schlüsseln befüllt worden sein (z. B. via rnp_load_keys oder rnp_import_keys), sonst wird stets false zurückgegeben.