AW: Key generation with GPGME and GnuPG hangs at gpgme_op_genkey
Sandra Schreiner
sasc0041 at stud.hs-kl.de
Thu Jan 28 09:35:32 CET 2016
>Don't give up!
>So far we've cleared two major problems: the first was GnuPG taking ~15
>minutes to generate a certificate, and the second was GPGME not working
>with your callback. Two major problems solved in two days. Imagine
>what we can get solved by the end of the week.
>Programming is hard, but you're not stupid, and you're in a place where
>you can get help. Stick with it. Things will be okay.
Thank you for this encouraging words. In fact I got solved another problem.
It seems that the reason GnuPG was asking for the dummy password, was
that this user was set as a signer in my context (as default). Now I use
gpgme_signers_clear(mContext);
before I encrypt/sign my string. The request for the dummy password
disappeared. The only problem remaining is that the application still ignores my
own password callback and uses the GnuPG default:
gpgme_set_passphrase_cb(mContext, passphrase_cb, nullptr);
I replaced my callback with your code:
gpgme_error_t passphrase_cb(void *hook, const char *uid_hint, const char *passphrase_info,
int prev_was_bad, int fd){
std::string passphrase { "" };
size_t written { 0 };
std::cout << "Enter your passphrase: ";
std::getline(std::cin, passphrase);
if (passphrase.empty())
return GPG_ERR_CANCELED;
while (written < passphrase.size())
{
ssize_t bytesWritten = gpgme_io_write(fd,
&passphrase[0] + written,
passphrase.size() - written);
if (bytesWritten == 0)
break;
written += bytesWritten;
}
gpgme_io_write(fd, "\n", 1);
return GPG_ERR_NO_ERROR;
}
More information about the Gnupg-users
mailing list