mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
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
This commit is contained in:
parent
ef2be95258
commit
241971fac0
4 changed files with 154 additions and 20 deletions
14
sm/gpgsm.h
14
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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue