Более новая версия GnuPG версии 2.1 имеет функцию «gpgme_op_createkey» в библиотеке GPGme. Старшее это:
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: [email protected] \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»?
Вы можете установить пароль только через механизм обратного вызова. Вы должны установить pinentry-mode на loopback, а затем установить обратный вызов парольной фразы.
Что касается типа подключа, это не выставлено. GnuPG будет принимать решение в зависимости от возможностей. Если вы хотите управлять им, сгенерируйте ключ только с возможностью «Сертифицировать», а затем используйте «gpgme_op_createsubkey», чтобы добавить подключи к экспликации.
Кривая может быть установлена через имя алгоритма. Если вы хотите ECC, вы можете просто использовать «future-default» в качестве имени алгоритма. Это создаст ключ cv25519 / ed25519.
gpgme_op_createkey заканчивается использованием «gpg —quick-gen-key», так что вы можете прочитать man-страницу этой команды.
Обратите внимание, что для c ++ вы также можете использовать привязки языка c ++ в GPGME, которые помогают в управлении памятью и немного лучше использовать для хакеров c ++.
Других решений пока нет …