diff options
author | Werner Koch <[email protected]> | 2024-10-02 14:44:04 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-10-02 14:45:09 +0000 |
commit | 241971fac0fc52efc87ed5753a01d18b0672d900 (patch) | |
tree | 0811e77ec581ab80aa5cb7942a3253ca56eb2420 /sm/gpgsm.h | |
parent | gpgsm: Use a cache for ISTRUSTED queries. (diff) | |
download | gnupg-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.h | 14 |
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, |