Mit gpgme (der Entwicklungsbibliothek für gpg / gnupg) versuche ich einige Daten zu signieren. Im Schlüsselbund habe ich mehr als 1 privaten Schlüssel, also möchte ich den auswählen richtig eins. Dies schlägt fehl mit: "Unusable secret key (117440566)". Der Schlüssel wurde mit gnupg2 selbst generiert. Bei Verwendung von gnupg tritt auch das Problem auf.
%Vor%Zuerst überprüfe ich, ob es einen privaten Schlüssel für den ausgewählten Schlüssel gibt:
%Vor%Mache die Unterzeichnung:
%Vor%Nun schlägt gpgme_op_encrypt_sign immer mit dem Fehler "Unusable secret key (117440566)" fehl. Irgendwelche Tipps / Hinweise?
Softwareversionen:
%Vor%Ich habe Debug-Tracing aktiviert, aber es hilft mir nicht viel:
%Vor%BEARBEITEN
Wie von @kylehuff angefordert, ist hier der Code für die Schlüsselauswahl:
%Vor%Dann im Konstruktor mache ich:
%Vor%und wenn es Zeit ist zu unterschreiben:
%Vor%@kylehuff, hast du das verlangt? Danke
BEARBEITEN
Hier ist die Liste für 20CD3FF80DA6C1E46CD9F135CC73A8A60BF38589:
%Vor%BEARBEITEN
folkert @ travemate: ~ $ gpg2 --local-benutzer 14B7E8E6 --zeichen bla.txt
folkert @ travemate: ~ $ gpg --verify bla.txt.gpg gpg: Unterschrift wurde am 18. Juni 2015 07:18:17 UTC mit der RSA-Schlüssel-ID 74D6F5C6 erstellt gpg: Gute Signatur von "testkey2 (testkey2)"
und mit der Bearbeitungs-Taste kann ich sehen, dass 74d6f5c6 tatsächlich der Unterschlüssel des Zeichens ist:
sub 1024R / 74D6F5C6 erstellt: 2015-05-31 läuft ab: nie Verwendung: S
Ich bin also etwas überrascht, dass dies nicht für gpgme funktioniert. Wenn Sie den Fund nicht direkt ausführen, gibt gpgme_get_key () denselben Fehler.
Es ist schwierig zu sagen, was vor sich geht, sogar mit der Probe, aber hier sind einige mögliche Szenarien -
Etwas, das in der Methode my_gpgme_new(&ctx, false, error)
ausgeführt wird, kann eigensinnig sein. Was macht diese Funktion genau? Warum nicht die Standardmethode gpgme_new
verwenden?
Im Beispiel verwenden Sie die Funktion search_key_result_t gpgme::find_key()
; Gibt es einen Bedarf für mehrere Unterzeichner? wenn ja, zumindest zum Testen, warum nicht vereinfachen und einfach gpgme_get_key()
verwenden? d. h.
Zusätzlich zu dieser Methode scheint es, dass Sie diese Methode zu gpgme namesapce hinzufügen. Ist es möglich, die eingebaute Methode auch im gpgme-Namespace zu trampeln?
Wie ist das für das Empfängerobjekt aufgebaut? Es sollte eine null-beendete gpgme_key_t
-Struktur von gpgme_key_t
s sein, auch wenn es sich nur um einen einzelnen Empfänger handelt. d. h.
Alternativ, wenn die Empfänger als Array bereitgestellt werden:
%Vor%