Hello, This is my first message to an e-mail list ever. I don't even know if this is the right e-mail list for me, please forgive me if I'm wrong, but unfortunately I didn't found a GPGME e-mail list. Currently I'm trying to use GPGME in my C++ application with GnuPG for key-management and encryption. Sadly I'm not able to create a new key, because my code hangs at gpgme_op_genkey. I have gpg 1.4.18 and gpg2 2.0.26 and GPGME 1.5.1 on my 64 bit Debian VM system (version Jesse) available. This is how I initialize the library:
gpgme_engine_info_t info; gpgme_error_t error; const char * CONFIG_DIR = "/"; // Initializes gpgme gpgme_check_version(NULL); // Initialize the locale environment. setlocale(LC_ALL, ""); gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL)); #ifdef LC_MESSAGES gpgme_set_locale(NULL, LC_MESSAGES, setlocale(LC_MESSAGES, NULL)); #endif error = gpgme_set_engine_info(GPGME_PROTOCOL_OpenPGP, NULL, CONFIG_DIR); if(error) return false; error = gpgme_new(&mContext); if(error) return false; // Check OpenPGP error = gpgme_engine_check_version(GPGME_PROTOCOL_OpenPGP); if(error) return false; // load engine info error = gpgme_get_engine_info(&info); if(error) return false; while(info && info->protocol != gpgme_get_protocol(mContext)) { info = info->next; } // set path to our config file error = gpgme_ctx_set_engine_info(mContext, GPGME_PROTOCOL_OpenPGP, NULL, CONFIG_DIR); if(error) return false; ----------------------------------------------------------------------------------------------------------------------------- Here I try to create the key: std::string def = "<GnupgKeyParms format=\"internal\"> \n" " Key-Type: default \n" " Subkey-Type: default \n" " Name-Real: Joe Tester3 \n" " Name-Comment: with stupid passphrase \n" " Name-Email: j...@foo.bar \n" " Expire-Date: 0 \n" " Passphrase: abc \n" " </GnupgKeyParms> \n"; gpgme_error_t error = gpgme_op_genkey(mContext, def.c_str(), NULL, NULL); if(GPG_ERR_INV_VALUE == gpgme_err_code(error)){ std::cout << "Value error"; } if(GPG_ERR_NOT_SUPPORTED == gpgme_err_code(error)){ std::cout << "Not supported error"; } if(GPG_ERR_GENERAL == gpgme_err_code(error)){ std::cout << "general error"; } if(error == gpgme_err_code(GPG_ERR_NO_ERROR)){ gpgme_genkey_result_t res = gpgme_op_genkey_result(mContext); if(res->primary && res->sub){ result = true; } } There is no error while initialising the library, so I don't know why it stops at gpgme_op_genkey. Maybe GnuPG is trying to collect entropie? If I generate a key using the GnuPG command line it tooks a very long time to collect entropie. But after ~15 minutes the key generation completes successfully (I didn't noticed that my program finished so far, even after 15 minutes+). I already tried to remove the \n in each line, but I received a general error in this case. Am I doing something wrong? Any help or hint is highly appreciated. Best regards, Sandra
_______________________________________________ Gnupg-users mailing list Gnupg-users@gnupg.org http://lists.gnupg.org/mailman/listinfo/gnupg-users