在 GnuPG 中从 C/C++ 和参数生成公钥/私钥

Generating public/private keys in GnuPG from C/C++ and arguments

本文关键字:公钥 私钥 参数 C++ GnuPG 中从      更新时间:2023-10-16

新版本的 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"?

您只能通过回调机制设置密码。您必须将引脚输入模式设置为环回,然后设置密码回调。

至于子项类型,这不会公开。GnuPG 将根据能力做出决定。如果要控制它,请生成仅具有"认证"功能的密钥,然后使用"gpgme_op_createsubkey"添加显式子项。

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

gpgme_op_createkey最终使用"gpg --quick-gen-key",因此您可能需要阅读该命令的手册页。

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