从C / C ++和参数

时间:2017-10-26 09:06:37

标签: c++ c cryptography gnupg openpgp

较新版本的GnuPG 2.1版在库 GPGme 中具有“gpgme_op_createkey”功能。较老的一个:

gpgme_op_genkey(mContext, def.c_str(), NULL, NULL);

以这种格式接受数据:

char *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: joe3@foo.bar \n"
                " Expire-Date: 0 \n"
                " Passphrase: abc \n"
                " </GnupgKeyParms>";

但是,较新版本的GnuPG接受的参数较少:

  gpgme_op_createkey(gpgme_ctx_t ctx, const char *userid, const char *algo, unsigned long reserved, unsigned long expires,
                        gpgme_key_t certkey, unsigned int flags);

我如何提供更新的功能“gpgme_op_createkey”,比如说密码?子项型?

另外,如果是ECC,我该如何选择使用哪条曲线?例如“ed25519”?

1 个答案:

答案 0 :(得分:0)

您只能通过回调机制设置密码。您必须将pinentry-mode设置为loopback,然后设置密码短语回调。

至于subkey-type,这不会暴露。 GnuPG将根据功能做出决定。如果要控制它,只生成一个只有“Certify”功能的密钥,然后使用“gpgme_op_createsubkey”添加明确的子密钥。

可以通过算法名称设置曲线。如果你想要ECC,你可以使用“future-default”作为算法名称。这将创建一个cv25519 / ed25519密钥。

gpgme_op_createkey最终使用“gpg --quick-gen-key”,因此您可能需要阅读该命令的联机帮助页。

请注意,对于c ++,您还可以使用GPGME的c ++语言绑定,这有助于内存管理,并且可以更好地用于c ++黑客。