From 3738b0a99a45c09fa5f66e80110dbdff185bbf7c Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 7 Feb 2025 11:10:09 +0100 Subject: 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 --- g10/call-agent.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'g10/call-agent.c') diff --git a/g10/call-agent.c b/g10/call-agent.c index 54d8f62f1..bdde9b053 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -2673,6 +2673,30 @@ agent_genkey (ctrl_t ctrl, char **cache_nonce_addr, char **passwd_nonce_addr, } +/* Add the Link attribute to both given keys. */ +gpg_error_t +agent_crosslink_keys (ctrl_t ctrl, const char *hexgrip1, const char *hexgrip2) +{ + gpg_error_t err; + char line[ASSUAN_LINELENGTH]; + + err = start_agent (ctrl, 0); + if (err) + goto leave; + + snprintf (line, sizeof line, "KEYATTR %s Link: %s", hexgrip1, hexgrip2); + err = assuan_transact (agent_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); + if (err) + goto leave; + + snprintf (line, sizeof line, "KEYATTR %s Link: %s", hexgrip2, hexgrip1); + err = assuan_transact (agent_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); + + leave: + return err; +} + + /* Call the agent to read the public key part for a given keygrip. * Values from FROMCARD: -- cgit v1.2.3