* keyid.c (keyid_from_sk): Minor performance boost by caching secret key
authorDavid Shaw <dshaw@jabberwocky.com>
Sat, 6 Mar 2004 04:08:06 +0000 (04:08 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Sat, 6 Mar 2004 04:08:06 +0000 (04:08 +0000)
keyids so we don't have to calculate them each time.

g10/ChangeLog
g10/keyid.c

index 034ae75..010a150 100644 (file)
@@ -1,5 +1,8 @@
 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
        we do not support their pk algorithm.  This allows for early
        (during get_*) rejection of a subkey, and selection of another.
index a2153ad..899e334 100644 (file)
@@ -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;
 }