aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keygen.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/keygen.c')
-rw-r--r--g10/keygen.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/g10/keygen.c b/g10/keygen.c
index df6540273..33bdb64c0 100644
--- a/g10/keygen.c
+++ b/g10/keygen.c
@@ -1859,6 +1859,10 @@ common_gen (const char *keyparms, const char *keyparms2,
if (keyparms2)
{
+ unsigned char tmpgrip[KEYGRIP_LEN];
+ char hexgrip1[2*KEYGRIP_LEN+1];
+ char hexgrip2[2*KEYGRIP_LEN+1];
+
err = agent_genkey (NULL, NULL, NULL, keyparms2,
1 /* No protection */,
NULL, timestamp,
@@ -1870,6 +1874,31 @@ common_gen (const char *keyparms, const char *keyparms2,
gcry_sexp_release (s_key);
return err;
}
+
+ if (!gcry_pk_get_keygrip (s_key, tmpgrip))
+ {
+ log_error ("error computing keygrip for generated key\n");
+ gcry_sexp_release (s_key);
+ gcry_sexp_release (s_key2);
+ return gpg_error (GPG_ERR_GENERAL);
+ }
+ bin2hex (tmpgrip, KEYGRIP_LEN, hexgrip1);
+ if (!gcry_pk_get_keygrip (s_key2, tmpgrip))
+ {
+ log_error ("error computing keygrip for generated key\n");
+ gcry_sexp_release (s_key);
+ gcry_sexp_release (s_key2);
+ return gpg_error (GPG_ERR_GENERAL);
+ }
+ bin2hex (tmpgrip, KEYGRIP_LEN, hexgrip2);
+ err = agent_crosslink_keys (NULL, hexgrip1, hexgrip2);
+ if (err)
+ {
+ log_error ("error setting link attributes for generated keys\n");
+ gcry_sexp_release (s_key);
+ gcry_sexp_release (s_key2);
+ return gpg_error (GPG_ERR_GENERAL);
+ }
}
if (common_gen_cb && common_gen_cb_parm)