1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-02-08 17:43:04 +01:00

* keyid.c (keyid_from_sk): Minor performance boost by caching secret key

keyids so we don't have to calculate them each time.
This commit is contained in:
David Shaw 2004-03-06 04:08:06 +00:00
parent ea73c94bc6
commit efec599797
2 changed files with 41 additions and 25 deletions

View File

@ -1,5 +1,8 @@
2004-03-05 David Shaw <dshaw@jabberwocky.com> 2004-03-05 David Shaw <dshaw@jabberwocky.com>
* 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 * getkey.c (merge_selfsigs_subkey): Do not mark subkeys valid if
we do not support their pk algorithm. This allows for early we do not support their pk algorithm. This allows for early
(during get_*) rejection of a subkey, and selection of another. (during get_*) rejection of a subkey, and selection of another.

View File

@ -204,37 +204,50 @@ keystr(u32 *keyid)
u32 u32
keyid_from_sk( PKT_secret_key *sk, u32 *keyid ) keyid_from_sk( PKT_secret_key *sk, u32 *keyid )
{ {
u32 lowbits; u32 lowbits;
u32 dummy_keyid[2]; u32 dummy_keyid[2];
if( !keyid ) if( !keyid )
keyid = dummy_keyid; keyid = dummy_keyid;
if( sk->version < 4 ) if( sk->keyid[0] || sk->keyid[1] )
{ {
if( is_RSA(sk->pubkey_algo) ) 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) ? lowbits = pubkey_get_npkey(sk->pubkey_algo) ?
mpi_get_keyid( sk->skey[0], keyid ) : 0; /* take n */ mpi_get_keyid( sk->skey[0], keyid ) : 0; /* take n */
else sk->keyid[0]=keyid[0];
keyid[0]=keyid[1]=lowbits=0; sk->keyid[1]=keyid[1];
} }
else { else
const byte *dp; sk->keyid[0]=sk->keyid[1]=keyid[0]=keyid[1]=lowbits=0;
MD_HANDLE md; }
md = do_fingerprint_md_sk(sk); else
if(md) {
{ const byte *dp;
dp = md_read( md, 0 ); MD_HANDLE md;
keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ; md = do_fingerprint_md_sk(sk);
keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ; if(md)
lowbits = keyid[1]; {
md_close(md); dp = md_read( md, 0 );
} keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
else keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
keyid[0]=keyid[1]=lowbits=0; 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;
} }