aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--g10/ChangeLog3
-rw-r--r--g10/keyid.c63
2 files changed, 41 insertions, 25 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 034ae75d0..010a150fe 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,5 +1,8 @@
2004-03-05 David Shaw <[email protected]>
+ * keyid.c (keyid_from_sk): Minor performance boost by caching
+ secret key keyids so we don't have to calculate them each time.
+
* getkey.c (merge_selfsigs_subkey): Do not mark subkeys valid if
we do not support their pk algorithm. This allows for early
(during get_*) rejection of a subkey, and selection of another.
diff --git a/g10/keyid.c b/g10/keyid.c
index a2153ad76..899e334b1 100644
--- a/g10/keyid.c
+++ b/g10/keyid.c
@@ -204,37 +204,50 @@ keystr(u32 *keyid)
u32
keyid_from_sk( PKT_secret_key *sk, u32 *keyid )
{
- u32 lowbits;
- u32 dummy_keyid[2];
+ u32 lowbits;
+ u32 dummy_keyid[2];
- if( !keyid )
- keyid = dummy_keyid;
+ if( !keyid )
+ keyid = dummy_keyid;
- if( sk->version < 4 )
- {
- if( is_RSA(sk->pubkey_algo) )
+ if( sk->keyid[0] || sk->keyid[1] )
+ {
+ keyid[0] = sk->keyid[0];
+ keyid[1] = sk->keyid[1];
+ lowbits = keyid[1];
+ }
+ else if( sk->version < 4 )
+ {
+ if( is_RSA(sk->pubkey_algo) )
+ {
lowbits = pubkey_get_npkey(sk->pubkey_algo) ?
mpi_get_keyid( sk->skey[0], keyid ) : 0; /* take n */
- else
- keyid[0]=keyid[1]=lowbits=0;
- }
- else {
- const byte *dp;
- MD_HANDLE md;
- md = do_fingerprint_md_sk(sk);
- if(md)
- {
- dp = md_read( md, 0 );
- keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
- keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
- lowbits = keyid[1];
- md_close(md);
- }
- else
- keyid[0]=keyid[1]=lowbits=0;
+ sk->keyid[0]=keyid[0];
+ sk->keyid[1]=keyid[1];
+ }
+ else
+ sk->keyid[0]=sk->keyid[1]=keyid[0]=keyid[1]=lowbits=0;
+ }
+ else
+ {
+ const byte *dp;
+ MD_HANDLE md;
+ md = do_fingerprint_md_sk(sk);
+ if(md)
+ {
+ dp = md_read( md, 0 );
+ keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
+ keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
+ lowbits = keyid[1];
+ md_close(md);
+ sk->keyid[0] = keyid[0];
+ sk->keyid[1] = keyid[1];
+ }
+ else
+ sk->keyid[0]=sk->keyid[1]=keyid[0]=keyid[1]=lowbits=0;
}
- return lowbits;
+ return lowbits;
}