简体   繁体   English

使用gpgme在C ++中导出gpg公钥

[英]Export gpg Public Key in c++ using gpgme

I need to export public key via gpgme in c++. 我需要在C ++中通过gpgme导出公钥。 I have a problem with gpgme_get_key call where it returns a [NO DATA] error or and [END OF FILE] error. 我在gpgme_get_key调用中遇到问题,该调用返回[NO DATA]错误或[END OF FILE]错误。

I attempted gpgme_op_keylist_start and the call return [NO DATA] with fingerprint, uid and name as the pattern. 我尝试了gpgme_op_keylist_start,并使用指纹,uid和名称作为模式的呼叫返回[NO DATA]。

 gpgme_ctx_t ctx;
 gpgme_error_t err;
 gpgme_data_t  out;
 gpgme_key_t key[4] = {NULL,NULL,NULL,NULL};
  gpgme_key_t ekey[2] = {NULL,NULL};

 init_gpgme (GPGME_PROTOCOL_OpenPGP);

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

/* Might want to comment gpgme_ctx_set_engine_info() below. */
    err = gpgme_ctx_set_engine_info (ctx,GPGME_PROTOCOL_OpenPGP,
      "/usr/local/bin/gpg","/root/budger/.gnupg");
    fail_if_err (err);

  /* Generate test keys. */
      err = gpgme_get_key (ctx,"203EBE6AD4860CDB33A66BE8809C3C1548861E13",&key[0],1);
  fail_if_err (err);


   err = gpgme_data_new (&out);
    fail_if_err (err);

    /* Export key[2] only. */
    ekey[0] = key[0];
      err = gpgme_op_export_keys (ctx,ekey,0,out);
     fail_if_err (err);

    fflush (NULL);
    fputs ("Begin Result:\n", stdout);
  print_data (out);
     fputs ("End Result.\n", stdout);
     gpgme_data_release (out);


 gpgme_release (ctx);
 return 0;

budger@thaw:~/gpgme/ref$ ./export export.cpp:60: GPGME: End of file budger @ thaw:〜/ gpgme / ref $ ./export export.cpp:60:GPGME:文件结尾

gpgme_op_keylist_start (ctx, NULL, 0);
while (!(err = gpgme_op_keylist_next (ctx, &key[0]))){

   gpgme_op_export_keys(ctx, key, 0, out);
   print_data(out);

} }

budger@thaw:~/gpgme/ref$ ./export_new Segmentation fault (core dumped) budger @ thaw:〜/ gpgme / ref $ ./export_new分段错误(核心已转储)

I had to use gpgme_op_export() to search the keyring instead of acquiring the key in order to use gpgme_op_export_keys() which renders a seg fault. 我必须使用gpgme_op_export()搜索密钥环而不是获取密钥,才能使用gpgme_op_export_keys()来产生段错误。

  gpgme_key_t key[1]={NULL};
  gpgme_data_t out;
  gpgme_data_new(&out);

  gpgme_set_armor (ctx,1);
  gpgme_op_export(ctx, "joe@foo.bar", 0, out);
  print_data(out);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM