1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-03 22:56:33 +02:00

gpg: Store Link attributes for composite keys.

* g10/call-agent.c (agent_crosslink_keys): New.
* g10/keygen.c (common_gen): Store the Link attribute.
--

The Link attribute may be useful to quickly find the other part of a
composite private key.

GnuPG-bug-id: 6638
This commit is contained in:
Werner Koch 2025-02-07 11:10:09 +01:00
parent 00c31f8b04
commit 3738b0a99a
No known key found for this signature in database
GPG key ID: E3FDFF218E45B72B
3 changed files with 57 additions and 0 deletions

View file

@ -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)