Signatur
Beschreibung
rnp_op_verify gehört zur RNP-Erweiterung für PHP, welche die OpenPGP-Bibliothek librnp kapselt. Die Funktion initiiert eine Signaturprüfoperation auf einem Eingabe-Datenstrom ($input), der entweder eine eingebettete Signatur (Signed Message) oder eine Klartext-Signatur enthält. Das zurückgegebene Operationshandle wird anschließend mit rnp_op_verify_execute ausgeführt und mit rnp_op_verify_get_signature_at ausgewertet.
Der Parameter $output nimmt den Handle entgegen, in den der verifizierte Klartextinhalt geschrieben werden soll. Bei detached-Signaturen (getrennte Signatur) ist stattdessen rnp_op_verify_detached zu verwenden. Für eingebettete oder Klartext-Signaturen ist rnp_op_verify die korrekte Wahl.
Das Operationsobjekt muss nach der Verwendung mit rnp_op_verify_destroy freigegeben werden, um Speicherlecks zu vermeiden. Input- und Output-Handles werden separat über rnp_input_destroy bzw. rnp_output_destroy verwaltet.
- Unterstützt komprimierte und verschlüsselte Nachrichten mit eingebetteter Signatur.
- Erlaubt den Zugriff auf einzelne Signaturen und deren Status (gültig, abgelaufen, unbekannt).
- Für Batch-Verifizierung empfiehlt es sich, alle Signaturen mittels Schleife über
rnp_op_verify_get_signature_countzu prüfen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ffi Pflicht | FFI\CData | Das RNP-FFI-Handle, das mit rnp_ffi_create erzeugt wurde und den Keyring mit den Verifikationsschlüsseln enthält. |
|
| $input Pflicht | resource | Ein mit rnp_input_from_memory oder rnp_input_from_path erstelltes Input-Handle, das die zu prüfende Nachricht (eingebettete oder Klartext-Signatur) enthält. |
|
| $output | resource|null | null | Ein mit rnp_output_to_memory oder rnp_output_to_path erstelltes Output-Handle, in das der entschlüsselte/verifizierte Klartextinhalt geschrieben wird. Kann null sein, wenn der Inhalt nicht benötigt wird. |
Rückgabewert
rnp_op_verify_execute benötigt wird. Im Fehlerfall (z. B. ungültige Parameter oder interner Fehler) wird false zurückgegeben.Beispiele
Eingebettete OpenPGP-Signatur prüfen
<?php
// FFI-Kontext erstellen
$ffi = rnp_ffi_create('GPG', 'GPG');
// Öffentlichen Schlüssel laden
rnp_load_keys($ffi, 'GPG', rnp_input_from_path('/path/to/pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
// Eingabe: signierte Nachricht
$signedMessage = file_get_contents('/path/to/signed_message.gpg');
$input = rnp_input_from_memory($signedMessage);
$output = rnp_output_to_memory();
// Verifizierungs-Operation erstellen
$verify = rnp_op_verify($ffi, $input, $output);
if ($verify === false) {
die('Fehler beim Erstellen der Verifizierungs-Operation.');
}
// Operation ausführen
if (!rnp_op_verify_execute($verify)) {
die('Verifizierung fehlgeschlagen.');
}
// Signaturen auswerten
$count = rnp_op_verify_get_signature_count($verify);
for ($i = 0; $i < $count; $i++) {
$sig = rnp_op_verify_get_signature_at($verify, $i);
$status = rnp_op_verify_signature_get_status($sig);
echo "Signatur $i Status: $status\n";
}
// Klartextinhalt ausgeben
$plaintext = rnp_output_memory_get_buf($output);
echo "Inhalt: $plaintext\n";
// Ressourcen freigeben
rnp_op_verify_destroy($verify);
rnp_input_destroy($input);
rnp_output_destroy($output);
rnp_ffi_destroy($ffi);
Prüfung einer Klartext-Signatur (Cleartext-Signatur)
<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
rnp_load_keys(
$ffi,
'GPG',
rnp_input_from_path('/path/to/pubring.gpg'),
RNP_LOAD_SAVE_PUBLIC_KEYS
);
// Klartext-signierte Nachricht (ASCII-Armor-Format)
$clearSigned = file_get_contents('/path/to/message.asc');
$input = rnp_input_from_memory($clearSigned);
$output = rnp_output_to_memory();
$verify = rnp_op_verify($ffi, $input, $output);
if ($verify === false) {
die('Konnte Verifizierungs-Operation nicht erstellen.');
}
$result = rnp_op_verify_execute($verify);
$count = rnp_op_verify_get_signature_count($verify);
echo "Anzahl Signaturen: $count\n";
for ($i = 0; $i < $count; $i++) {
$sig = rnp_op_verify_get_signature_at($verify, $i);
$status = rnp_op_verify_signature_get_status($sig);
if ($status === 0) {
echo "Signatur $i ist GÜLTIG.\n";
} else {
echo "Signatur $i ist UNGÜLTIG (Statuscode: $status).\n";
}
}
rnp_op_verify_destroy($verify);
rnp_input_destroy($input);
rnp_output_destroy($output);
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Sicherheitshinweise:
- Eine erfolgreiche Ausführung von
rnp_op_verify_executeohne Fehler bedeutet nicht zwingend, dass alle Signaturen gültig sind. Jede Signatur muss mitrnp_op_verify_signature_get_statuseinzeln geprüft werden. - Stellen Sie sicher, dass der verwendete öffentliche Schlüssel aus einer vertrauenswürdigen Quelle stammt und korrekt in den Keyring geladen wurde. Andernfalls kann eine Signatur als unbekannt oder nicht prüfbar erscheinen.
- Für abgelaufene Schlüssel oder widerrufene Schlüssel liefert
rnp_op_verify_signature_get_statusentsprechende Fehlercodes, die nicht als gültig interpretiert werden dürfen. - Für detached Signaturen (Signatur in separater Datei) muss stattdessen
rnp_op_verify_detachedverwendet werden –rnp_op_verifyeignet sich nur für eingebettete und Klartext-Signaturen.