[Pkg-gnupg-commit] [gnupg2] 131/241: gpg: Simplify the tofu interface by using the public key packet.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Wed Dec 9 20:32:06 UTC 2015


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch master
in repository gnupg2.

commit e7d7160ab7cd4e6b460bfe36fd3a7275adadb4e2
Author: Werner Koch <wk at gnupg.org>
Date:   Fri Nov 13 16:42:59 2015 +0100

    gpg: Simplify the tofu interface by using the public key packet.
    
    * g10/tofu.c (fingerprint_str): Remove.
    (tofu_register): Take a public key instead of a fingerprint as arg.
    Use hexfingerprint() to get a fpr from the PK.
    (tofu_get_validity): Ditto.
    (tofu_set_policy, tofu_get_policy): Simplify by using hexfingerprint.
    * g10/trustdb.c (tdb_get_validity_core): Pass the primary key PK to
    instead of the fingerprint to the tofu functions.
    --
    
    This change has the advantage that we are not bound to a specific
    fingerprint length and will thus helps us to implement rfc4880bis.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>
---
 g10/gpg.h     |  4 +++-
 g10/tofu.c    | 37 +++++++++----------------------------
 g10/tofu.h    |  9 ++++-----
 g10/trustdb.c | 10 ++--------
 4 files changed, 18 insertions(+), 42 deletions(-)

diff --git a/g10/gpg.h b/g10/gpg.h
index accec24..6f92abd 100644
--- a/g10/gpg.h
+++ b/g10/gpg.h
@@ -37,7 +37,9 @@
 /* Number of bits we accept when reading or writing MPIs. */
 #define MAX_EXTERN_MPI_BITS 16384
 
-/* The maximum length of a binary fingerprints.
+/* The maximum length of a binary fingerprints.  This is used to
+   provide a static buffer and will be increased if we need to support
+   longer fingerprints.
    Warning: At some places we still use 20 instead of this macro. */
 #define MAX_FINGERPRINT_LEN 20
 
diff --git a/g10/tofu.c b/g10/tofu.c
index e60ee54..5501cee 100644
--- a/g10/tofu.c
+++ b/g10/tofu.c
@@ -168,15 +168,6 @@ tofu_cache_dump (struct db *db)
 #  define TIME_AGO_UNIT_LARGE_NAME_PLURAL _("months")
 #endif
 

-static char *
-fingerprint_str (const byte *fingerprint_bin)
-{
-  char *fingerprint = bin2hex (fingerprint_bin, MAX_FINGERPRINT_LEN, NULL);
-  if (! fingerprint)
-    log_fatal ("bin2hex failed: %s\n",
-               gpg_strerror (gpg_error_from_syserror()));
-  return fingerprint;
-}
 
 /* Pretty print a MAX_FINGERPRINT_LEN-byte binary fingerprint into a
    malloc'd string.  */
@@ -2543,8 +2534,8 @@ email_from_user_id (const char *user_id)
   return email;
 }
 
-/* Register the signature with the binding <FINGERPRINT_BIN, USER_ID>.
-   FINGERPRINT must be MAX_FINGERPRINT_LEN bytes long.
+/* Register the signature with the binding <fingerprint, USER_ID>.
+   The fingerprint is taken from the primary key packet PK.
 
    SIG_DIGEST_BIN is the binary representation of the message's
    digest.  SIG_DIGEST_BIN_LEN is its length.
@@ -2563,7 +2554,7 @@ email_from_user_id (const char *user_id)
    This function returns the binding's trust level on return.  If an
    error occurs, this function returns TRUST_UNKNOWN.  */
 int
-tofu_register (const byte *fingerprint_bin, const char *user_id,
+tofu_register (PKT_public_key *pk, const char *user_id,
 	       const byte *sig_digest_bin, int sig_digest_bin_len,
 	       time_t sig_time, const char *origin, int may_ask)
 {
@@ -2588,7 +2579,7 @@ tofu_register (const byte *fingerprint_bin, const char *user_id,
       goto die;
     }
 
-  fingerprint = fingerprint_str (fingerprint_bin);
+  fingerprint = hexfingerprint (pk);
   fingerprint_pp = fingerprint_format (fingerprint);
 
   if (! *user_id)
@@ -2780,7 +2771,7 @@ tofu_wot_trust_combine (int tofu_base, int wot_base)
 /* Return the validity (TRUST_NEVER, etc.) of the binding
    <FINGERPRINT, USER_ID>.
 
-   FINGERPRINT must be a MAX_FINGERPRINT_LEN-byte fingerprint.
+   PK is the primary key packet.
 
    If MAY_ASK is 1 and the policy is TOFU_POLICY_ASK, then the user
    will be prompted to choose a different policy.  If MAY_ASK is 0 and
@@ -2788,7 +2779,7 @@ tofu_wot_trust_combine (int tofu_base, int wot_base)
 
    Returns TRUST_UNDEFINED if an error occurs.  */
 int
-tofu_get_validity (const byte *fingerprint_bin, const char *user_id,
+tofu_get_validity (PKT_public_key *pk, const char *user_id,
 		   int may_ask)
 {
   struct dbs *dbs;
@@ -2803,7 +2794,7 @@ tofu_get_validity (const byte *fingerprint_bin, const char *user_id,
       goto die;
     }
 
-  fingerprint = fingerprint_str (fingerprint_bin);
+  fingerprint = hexfingerprint (pk);
 
   if (! *user_id)
     {
@@ -2843,8 +2834,6 @@ tofu_set_policy (kbnode_t kb, enum tofu_policy policy)
 {
   struct dbs *dbs;
   PKT_public_key *pk;
-  char fingerprint_bin[MAX_FINGERPRINT_LEN];
-  size_t fingerprint_bin_len = sizeof (fingerprint_bin);
   char *fingerprint = NULL;
 
   assert (kb->pkt->pkttype == PKT_PUBLIC_KEY);
@@ -2864,10 +2853,7 @@ tofu_set_policy (kbnode_t kb, enum tofu_policy policy)
 	 && pk->main_keyid[1] == pk->keyid[1]))
     log_bug ("%s: Passed a subkey, but expecting a primary key.\n", __func__);
 
-  fingerprint_from_pk (pk, fingerprint_bin, &fingerprint_bin_len);
-  assert (fingerprint_bin_len == sizeof (fingerprint_bin));
-
-  fingerprint = fingerprint_str (fingerprint_bin);
+  fingerprint = hexfingerprint (pk);
 
   for (; kb; kb = kb->next)
     {
@@ -2925,8 +2911,6 @@ tofu_get_policy (PKT_public_key *pk, PKT_user_id *user_id,
 		 enum tofu_policy *policy)
 {
   struct dbs *dbs;
-  char fingerprint_bin[MAX_FINGERPRINT_LEN];
-  size_t fingerprint_bin_len = sizeof (fingerprint_bin);
   char *fingerprint;
   char *email;
 
@@ -2941,10 +2925,7 @@ tofu_get_policy (PKT_public_key *pk, PKT_user_id *user_id,
       return gpg_error (GPG_ERR_GENERAL);
     }
 
-  fingerprint_from_pk (pk, fingerprint_bin, &fingerprint_bin_len);
-  assert (fingerprint_bin_len == sizeof (fingerprint_bin));
-
-  fingerprint = fingerprint_str (fingerprint_bin);
+  fingerprint = hexfingerprint (pk);
 
   email = email_from_user_id (user_id->name);
 
diff --git a/g10/tofu.h b/g10/tofu.h
index 2d23e86..7ee1083 100644
--- a/g10/tofu.h
+++ b/g10/tofu.h
@@ -71,14 +71,14 @@ const char *tofu_policy_str (enum tofu_policy policy);
    (e.g., TRUST_BAD) in light of the current configuration.  */
 int tofu_policy_to_trust_level (enum tofu_policy policy);
 
-/* Register the binding <FINGERPRINT, USER_ID> and the signature
+/* Register the binding <PK, USER_ID> and the signature
    described by SIGS_DIGEST and SIG_TIME, which it generated.  Origin
    describes where the signed data came from, e.g., "email:claws"
    (default: "unknown").  If MAY_ASK is 1, then this function may
    interact with the user in the case of a conflict or if the
    binding's policy is ask.  This function returns the binding's trust
    level.  If an error occurs, it returns TRUST_UNKNOWN.  */
-int tofu_register (const byte *fingerprint, const char *user_id,
+int tofu_register (PKT_public_key *pk, const char *user_id,
 		   const byte *sigs_digest, int sigs_digest_len,
 		   time_t sig_time, const char *origin, int may_ask);
 
@@ -88,11 +88,10 @@ int tofu_register (const byte *fingerprint, const char *user_id,
 int tofu_wot_trust_combine (int tofu, int wot);
 
 /* Determine the validity (TRUST_NEVER, etc.) of the binding
-   <FINGERPRINT, USER_ID>.  If MAY_ASK is 1, then this function may
+   <PK, USER_ID>.  If MAY_ASK is 1, then this function may
    interact with the user.  If not, TRUST_UNKNOWN is returned.  If an
    error occurs, TRUST_UNDEFINED is returned.  */
-int tofu_get_validity (const byte *fingerprint, const char *user_id,
-		       int may_ask);
+int tofu_get_validity (PKT_public_key *pk, const char *user_id, int may_ask);
 
 /* Set the policy for all non-revoked user ids in the keyblock KB to
    POLICY.  */
diff --git a/g10/trustdb.c b/g10/trustdb.c
index 4f60f1f..b58d5e1 100644
--- a/g10/trustdb.c
+++ b/g10/trustdb.c
@@ -1021,12 +1021,6 @@ tdb_get_validity_core (PKT_public_key *pk, PKT_user_id *uid,
       int user_ids = 0;
       int user_ids_expired = 0;
 
-      char fingerprint[MAX_FINGERPRINT_LEN];
-      size_t fingerprint_len = sizeof (fingerprint);
-
-      fingerprint_from_pk (main_pk, fingerprint, &fingerprint_len);
-      assert (fingerprint_len == sizeof (fingerprint));
-
       /* If the caller didn't supply a user id then iterate over all
 	 uids.  */
       if (! uid)
@@ -1062,12 +1056,12 @@ tdb_get_validity_core (PKT_public_key *pk, PKT_user_id *uid,
 	  user_ids ++;
 
 	  if (sig)
-	    tl = tofu_register (fingerprint, user_id->name,
+	    tl = tofu_register (main_pk, user_id->name,
 				sig->digest, sig->digest_len,
 				sig->timestamp, "unknown",
 				may_ask);
 	  else
-	    tl = tofu_get_validity (fingerprint, user_id->name, may_ask);
+	    tl = tofu_get_validity (main_pk, user_id->name, may_ask);
 
 	  if (tl == TRUST_EXPIRED)
 	    user_ids_expired ++;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git



More information about the Pkg-gnupg-commit mailing list