Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F26765928
D570.id1548.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
3 KB
Subscribers
None
D570.id1548.diff
View Options
Index: src/engine-gpg.c
===================================================================
--- src/engine-gpg.c
+++ src/engine-gpg.c
@@ -2855,6 +2855,34 @@
}
+static gpgme_error_t
+gpg_addadsk (engine_gpg_t engine, gpgme_key_t key, const char *adskfpr)
+{
+ engine_gpg_t gpg = engine;
+ gpgme_error_t err;
+
+ if (!key || !key->fpr)
+ return gpg_error (GPG_ERR_INV_ARG);
+
+ if (!adskfpr || !*adskfpr)
+ return gpg_error (GPG_ERR_INV_ARG);
+
+ if (!have_gpg_version (gpg, "2.4.1"))
+ return gpg_error (GPG_ERR_NOT_SUPPORTED);
+
+ err = add_arg (gpg, "--quick-add-adsk");
+ if (!err)
+ err = add_arg (gpg, "--");
+ if (!err)
+ err = add_arg (gpg, key->fpr);
+ if (!err)
+ err = add_arg (gpg, adskfpr);
+ if (!err)
+ err = start (gpg);
+ return err;
+}
+
+
static gpgme_error_t
gpg_genkey (void *engine,
const char *userid, const char *algo,
@@ -2878,6 +2906,8 @@
* !USERID && KEY - Add a new subkey to KEY (gpg >= 2.1.14)
* USERID && KEY && !ALGO - Add a new user id to KEY (gpg >= 2.1.14).
* or set a flag on a user id.
+ * !USERID && KEY && ALGO
+ * && GPGME_CREATE_ADSK - Add ALGO as an ADSK to KEY.
*/
if (help_data)
{
@@ -2894,10 +2924,12 @@
err = gpg_error (GPG_ERR_NOT_SUPPORTED);
else if (userid && !key)
err = gpg_createkey (gpg, userid, algo, expires, flags, extraflags);
- else if (!userid && key)
+ else if (!userid && key && !(flags & GPGME_CREATE_ADSK))
err = gpg_addkey (gpg, algo, expires, key, flags, extraflags);
else if (userid && key && !algo)
err = gpg_adduid (gpg, key, userid, extraflags);
+ else if (!userid && key && algo && (flags & GPGME_CREATE_ADSK))
+ err = gpg_addadsk (gpg, key, algo);
else
err = gpg_error (GPG_ERR_INV_VALUE);
Index: src/genkey.c
===================================================================
--- src/genkey.c
+++ src/genkey.c
@@ -48,6 +48,9 @@
/* The key parameters passed to the crypto engine. */
gpgme_data_t key_parameter;
+
+ /* Flag to indicate that an ADSK is to be added. */
+ unsigned int adskmode : 1;
} *op_data_t;
@@ -180,7 +183,7 @@
case GPGME_STATUS_EOF:
if (opd->error_code)
return opd->error_code;
- else if (!opd->uidmode && !opd->result.primary && !opd->result.sub)
+ else if (!opd->uidmode && !opd->adskmode && !opd->result.primary && !opd->result.sub)
return gpg_error (GPG_ERR_GENERAL);
else if (opd->failure_code)
return opd->failure_code;
@@ -445,6 +448,9 @@
return err;
}
+ if (flags & GPGME_CREATE_ADSK)
+ opd->adskmode = 1;
+
return _gpgme_engine_op_genkey (ctx->engine,
NULL, algo, reserved, expires,
key, flags,
Index: src/gpgme.h.in
===================================================================
--- src/gpgme.h.in
+++ src/gpgme.h.in
@@ -1838,6 +1838,7 @@
#define GPGME_CREATE_WANTSEC (1 << 11) /* Return the secret key. */
#define GPGME_CREATE_FORCE (1 << 12) /* Force creation. */
#define GPGME_CREATE_NOEXPIRE (1 << 13) /* Create w/o expiration. */
+#define GPGME_CREATE_ADSK (1 << 14) /* Add an ADSK */
/* An object to return result from a key generation.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Aug 5, 8:58 PM (13 h, 23 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
66/9c/971b44e102879e74a073049b7d90
Attached To
D570: core: Implement adding ADSKs
Event Timeline
Log In to Comment