Basic PKA support.
authorWerner Koch <wk@gnupg.org>
Tue, 20 Dec 2005 20:22:19 +0000 (20:22 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 20 Dec 2005 20:22:19 +0000 (20:22 +0000)
NEWS
doc/ChangeLog
doc/gpgme.texi
gpgme/ChangeLog
gpgme/gpgme.h
gpgme/verify.c
tests/gpgsm/t-keylist.c

diff --git a/NEWS b/NEWS
index 0aa38c3dcd80627f613f128d0a34b4c75a7f8a25..670166fcd6866c9bd7a692e8cdb1fd9eefae98d7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -19,11 +19,19 @@ Noteworthy changes in version 1.1.1 (unreleased)
    compatibility is provided.  In other words: If free() worked for
    you before, it will keep working.
 
+ * New status codes GPGME_PKA_TRUST_GOOD and GPGME_PKA_TRUST_BAD.
+   They are analyzed by the verify handlers and made available in the
+   new PKA_TRUST field of the signature result structure.
+
+
  * Interface changes relative to the 1.1.0 release:
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 gpgme_key_sig_t                        EXTENDED: New field notations.
 GPGME_KEYLIST_MODE_SIG_NOTATIONS NEW
 gpgme_free                     NEW
+GPGME_STATUS_PKA_TRUST_BAD      NEW
+GPGME_STATUS_PKA_TRUST_GOOD     NEW
+gpgme_signature_t               EXTENDED: New field pka_trust.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
index 4d5239fd15f695327e8ac9d6e2c53e8c106e5575..394ca8f705515fbd61c219183887bb4f7539e177 100644 (file)
@@ -1,3 +1,7 @@
+2005-12-20  Werner Koch  <wk@g10code.com>
+
+       * gpgme.texi (Verify): Document pka_trust.
+
 2005-12-06  Werner Koch  <wk@g10code.com>
 
        * gpgme.texi (Key Management): Updated to match the fixes for
index 351f1dc741227b09d684871d9ee4d943e5261003..1fc4849cb1e0b1bb712e907a345a1803f1f85bf5 100644 (file)
@@ -3985,6 +3985,22 @@ not expire.
 @item unsigned int wrong_key_usage : 1
 This is true if the key was not used according to its policy.
 
+@item unsigned int pka_trust : 2
+This is set to the trust information gained by means of the PKA system.
+Values are:
+  @table @code
+  @item 0
+        No PKA information available or verification not possible.
+  @item 1
+        PKA verification failed. 
+  @item 2
+        PKA verification succeeded.
+  @item 3
+        Reserved for future use.
+  @end table
+Depending on the configuration of the engine, this metric may also be
+reflected by the validity of the signature.
+
 @item gpgme_validity_t validity
 The validity of the signature.
 
index 3e4308a039e0964d908232f69df63730460ae0fe..3f6e99c90d9441d75bf392d226337ac93bc7120f 100644 (file)
@@ -1,3 +1,10 @@
+2005-12-20  Werner Koch  <wk@g10code.com>
+
+       * gpgme.h (gpgme_status_code_t): Added GPGME_STATUS_PKA_TRUST_BAD
+       and GPGME_STATUS_PKA_TRUST_GOOD.
+       (gpgme_signature_t): New field pka_trust.
+       * verify.c (_gpgme_verify_status_handler): Set pka_trust.
+
 2005-12-06  Werner Koch  <wk@g10code.com>
 
        * keylist.c (keylist_colon_handler): Store fingerprints of the
index 1fafd164bb79b36bb4aadfefe8d9bde8935d3102..4fb41549dc69b13348ee6d8f41810c4315d3efef 100644 (file)
@@ -445,6 +445,8 @@ typedef enum
     GPGME_STATUS_SC_OP_SUCCESS,
     GPGME_STATUS_CARDCTRL,
     GPGME_STATUS_BACKUP_KEY_CREATED,
+    GPGME_STATUS_PKA_TRUST_BAD,
+    GPGME_STATUS_PKA_TRUST_GOOD,
 
     GPGME_STATUS_PLAINTEXT
   }
@@ -1318,8 +1320,11 @@ struct _gpgme_signature
   /* Key should not have been used for signing.  */
   unsigned int wrong_key_usage : 1;
 
+  /* PKA status: 0 = not available, 1 = bad, 2 = okay, 3 = RFU. */
+  unsigned int pka_trust : 2;
+
   /* Internal to GPGME, do not use.  */
-  int _unused : 31;
+  int _unused : 29;
 
   gpgme_validity_t validity;
   gpgme_error_t validity_reason;
index bfce4c8902fe67dded6b3f30fdfa3e762d806f42..7792f353aae4109004b1e045236a3a8705fddcdf 100644 (file)
@@ -651,6 +651,15 @@ _gpgme_verify_status_handler (void *priv, gpgme_status_code_t code, char *args)
       return sig ? parse_trust (sig, code, args)
        : gpg_error (GPG_ERR_INV_ENGINE);
 
+    case GPGME_STATUS_PKA_TRUST_BAD:
+    case GPGME_STATUS_PKA_TRUST_GOOD:
+      opd->only_newsig_seen = 0;
+      if (sig && !sig->pka_trust)
+        sig->pka_trust = code == GPGME_STATUS_PKA_TRUST_GOOD? 2 : 1;
+      /* FIXME: We should set the mailbox which is the argument to
+         these status codes into a new field. */
+      break;
+
     case GPGME_STATUS_ERROR:
       opd->only_newsig_seen = 0;
       /* The error status is informational, so we don't return an
index cd01aff3623250af85f21f56a188a997f3f390a9..79a61eafebde0f8fd8180e1e162c7243faff5fbb 100644 (file)
@@ -345,6 +345,13 @@ main (int argc, char **argv)
                   key->uids->next->uid);
          exit (1);
        }
+      if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email))
+       {
+         fprintf (stderr, "Unexpected email in user ID: %s\n",
+                  key->uids->next->uid);
+         exit (1);
+       }
+
 
 
       gpgme_key_unref (key);