aboutsummaryrefslogtreecommitdiffstats
path: root/g10/call-agent.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2014-10-19 12:09:04 +0000
committerWerner Koch <[email protected]>2014-10-19 12:09:04 +0000
commit1b8decc4767f0c55867327bdf3113204efcd19a7 (patch)
treea1ab7854633185ea8dab122ab303967b876435eb /g10/call-agent.c
parentdirmngr: Allow building without LDAP support. (diff)
downloadgnupg-1b8decc4767f0c55867327bdf3113204efcd19a7.tar.gz
gnupg-1b8decc4767f0c55867327bdf3113204efcd19a7.zip
gpg: Make card key generation work again.
* g10/call-agent.c (agent_scd_learn): Rename from agent_learn. (agent_learn): New. * g10/keygen.c (gen_card_key): Call new agent-learn. -- Without a shadow key we can't create the self-signatures. Thus we need to issue the learn command after each key generation. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'g10/call-agent.c')
-rw-r--r--g10/call-agent.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/g10/call-agent.c b/g10/call-agent.c
index 080df1867..cadc02c6f 100644
--- a/g10/call-agent.c
+++ b/g10/call-agent.c
@@ -639,9 +639,9 @@ learn_status_cb (void *opaque, const char *line)
return 0;
}
-/* Call the agent to learn about a smartcard */
+/* Call the scdaemon to learn about a smartcard */
int
-agent_learn (struct agent_card_info_s *info)
+agent_scd_learn (struct agent_card_info_s *info)
{
int rc;
struct default_inq_parm_s parm;
@@ -677,6 +677,29 @@ agent_learn (struct agent_card_info_s *info)
}
+/* Call the agent to learn about the current smartcard. This is
+ currently only used to have the agent create the shadow key. */
+gpg_error_t
+agent_learn (void)
+{
+ gpg_error_t err;
+ struct default_inq_parm_s parm;
+
+ memset (&parm, 0, sizeof parm);
+
+ err = start_agent (NULL, 1);
+ if (err)
+ return err;
+
+ parm.ctx = agent_ctx;
+ err = assuan_transact (agent_ctx, "LEARN",
+ dummy_data_cb, NULL, default_inq_cb, &parm,
+ NULL, NULL);
+
+ return err;
+}
+
+
int
agent_keytocard (const char *hexgrip, int keyno, int force,
const char *serialno, const char *timestamp)