AW: GnuPG Made Easy nicht interactive variante passowrtschutz für archiv

Schultschik, Sven sven.schultschik at siemens.com
Mo Apr 19 11:27:17 CEST 2021


Hallo zusammen,

die erste Nachricht hängt wahrscheinlich noch in der Schleife, da ich noch kein Mitglied war. ( Siehe unten)
Ich arbeite das erste Mal mit der GPGMe lib.
Ich bin mittlerweile so weit, dass ich eine CallBack Methode implementieren muss, damit ich mein eigenes Passworteingabeinterface erstellen kann.
Aber irgendwas muss ich übersehen, da er einfach nicht den CallBack aufruft. Wie folgt hab ich es mir aus der Doku herausgelesen.

gpgme_ctx_t ctx;
    gpgme_error_t err;
    gpgme_data_t in, out;
    gpgme_encrypt_result_t result;

    init_gpgme();

    err = gpgme_new(&ctx);
    fail_if_err(err);
    gpgme_set_armor(ctx, 1);

    FILE *instream;
    instream = fopen(infile.c_str(), "r");
err = gpgme_data_new_from_stream(&in, instream);
    fail_if_err(err);
FILE *outstream;
    outstream = fopen((infile.append(".gpg")).c_str(), "w");
    err = gpgme_data_new_from_stream(&out, outstream);
    fail_if_err(err);

err = gpgme_set_keylist_mode(ctx, GPGME_PINENTRY_MODE_LOOPBACK);
        fail_if_err(err);

gpgme_set_passphrase_cb(ctx, passphrase_cb, NULL);

err = gpgme_op_encrypt(ctx, NULL, GPGME_ENCRYPT_SYMMETRIC, in, out);

Hab ich einen part in der Doku übersehen? Ich stehe zur Zeit auf dem Schlauch warum da immer noch die Passwortabfrage auf der CLI kommt und der CallBack nicht aufgerufen wird.

Zur vervollständigung:

gpgme_error_t passphrase_cb(void *hook, const char *uid_hint, const char *passphrase_info, int prev_was_bad, int fd)
{
    const char *pw = _pw.c_str();
    int ret = gpgme_io_writen(fd, pw, strlen(pw));
    if (ret < 0)
    {
        gpgme_error_from_errno(errno);
    }
    return 0;
}

Danke

-----Ursprüngliche Nachricht-----
Von: Schultschik, Sven (DI PA DCP R&D 2)
Gesendet: Donnerstag, 15. April 2021 15:27
An: 'gnupg-de at gnupg.org' <gnupg-de at gnupg.org>
Betreff: GnuPG Made Easy nicht interactive variante passowrtschutz für archiv

Hallo zusammen,

ich bin der neue und hab mich zu der Liste subscribed, aber zur Sicherheit
wäre ein CC nett, falls es nicht geklappt hat.

Ich will in meiner Applikation ein Archiv mit einem Passwort per gpgme
verschlüsseln.

Die Implementierung mit gpgme_op_encrypt habe ich und funktioniert auch,
wenn ich das ganze per CLI aufrufe und im interaktiven cli prompt das
Passwort eingebe.

Jetzt sollte das Passwort aber auf einer eigenen Oberfläche eingegeben
werden und nicht per interaktiver cli.

Jetzt dachte ich ich kann gpgme_op_encrypt_ext benutzten und als recpstring
dann das Passwort in der Form "--\nPasswort12345" angeben. Allerdings kommt
immer noch die interaktive Passworteingabe hoch.

Daher die Frage, wie bekomme ich es hin, dass ich das Passwort direkt dem
gpgme_op_encrypt_ext übergeben kann?

Danke
Vg
Sven



Mehr Informationen über die Mailingliste Gnupg-de