aboutsummaryrefslogtreecommitdiffstats
path: root/sm/gpgsm.h
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2024-10-02 14:44:04 +0000
committerWerner Koch <[email protected]>2024-10-02 14:45:09 +0000
commit241971fac0fc52efc87ed5753a01d18b0672d900 (patch)
tree0811e77ec581ab80aa5cb7942a3253ca56eb2420 /sm/gpgsm.h
parentgpgsm: Use a cache for ISTRUSTED queries. (diff)
downloadgnupg-241971fac0fc52efc87ed5753a01d18b0672d900.tar.gz
gnupg-241971fac0fc52efc87ed5753a01d18b0672d900.zip
gpgsm: Implement a cache for the KEYINFO queries.
* sm/gpgsm.h (struct keyinfo_cache_item_s): New. (struct server_control_s): Add keyinfo_cache and keyinfo_cache_valid. * sm/call-agent.c (keyinfo_cache_disabled): New flag. (release_a_keyinfo_cache): New. (gpgsm_flush_keyinfo_cache): New. (struct keyinfo_status_parm_s): New. (keyinfo_status_cb): Implement a fill mode. (gpgsm_agent_keyinfo): Implement a cache. * sm/server.c (reset_notify): Flush the cache. * sm/gpgsm.c (gpgsm_deinit_default_ctrl): Ditto. -- In almost all cases we have just a few private keys in the agent and thus it is better to fetch them early. This does not work in a restricted connection but we take care and disable the cache in this case. This cache gives a a minor speed up. GnuPG-bug-id: 7308
Diffstat (limited to 'sm/gpgsm.h')
-rw-r--r--sm/gpgsm.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/sm/gpgsm.h b/sm/gpgsm.h
index 36d2fdc9a..142e7bb94 100644
--- a/sm/gpgsm.h
+++ b/sm/gpgsm.h
@@ -241,6 +241,15 @@ struct cert_cache_item_s
};
typedef struct cert_cache_item_s *cert_cache_item_t;
+/* On object used to keep a KEYINFO data from the agent. */
+struct keyinfo_cache_item_s
+{
+ struct keyinfo_cache_item_s *next;
+ char *serialno; /* Malloced serialnumber of a card. */
+ char hexgrip[1]; /* The keygrip in hexformat. */
+};
+typedef struct keyinfo_cache_item_s *keyinfo_cache_item_t;
+
/* Session control object. This object is passed down to most
functions. Note that the default values for it are set by
@@ -299,6 +308,10 @@ struct server_control_s
/* The cache used to find the parent cert. */
cert_cache_item_t parent_cert_cache;
+
+ /* Cache of recently gathered KEYINFO data. */
+ keyinfo_cache_item_t keyinfo_cache;
+ int keyinfo_cache_valid;
};
@@ -497,6 +510,7 @@ gpg_error_t gpgsm_qualified_consent (ctrl_t ctrl, ksba_cert_t cert);
gpg_error_t gpgsm_not_qualified_warning (ctrl_t ctrl, ksba_cert_t cert);
/*-- call-agent.c --*/
+void gpgsm_flush_keyinfo_cache (ctrl_t ctrl);
int gpgsm_agent_pksign (ctrl_t ctrl, const char *keygrip, const char *desc,
unsigned char *digest,
size_t digestlen,