较新版本的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”?
答案 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 ++黑客。