[git] GPGME - branch, master, updated. gpgme-1.9.0-42-g05fa2a9

by Justus Winter cvs at cvs.gnupg.org
Thu Jun 1 14:17:07 CEST 2017


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG Made Easy".

The branch, master has been updated
       via  05fa2a9c7764b28fdac35eb72631439df948ca0e (commit)
      from  92574406fb5fd456bc5bf85c7d906f06c4680632 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 05fa2a9c7764b28fdac35eb72631439df948ca0e
Author: Justus Winter <justus at g10code.com>
Date:   Tue May 30 14:35:57 2017 +0200

    Add flag 'is_de_vs' to decryption results and signatures.
    
    * NEWS: Update.
    * lang/cpp/src/decryptionresult.cpp (DecryptionResult::isDeVs): New
    function.
    * lang/cpp/src/decryptionresult.h (DecryptionResult::isDeVs): New
    prototype.
    * lang/cpp/src/verificationresult.cpp (Signature::isDeVs): New
    function.
    * lang/cpp/src/verificationresult.h (Signature::isDeVs): New
    prototype.
    * lang/python/src/results.py (DecryptResult): Turn field 'is_de_vs'
    into a boolean.
    (Signature): Likewise.
    * src/decrypt.c (_gpgme_decrypt_status_handler): Handle the new
    compliance status line.
    * src/verify.c (_gpgme_verify_status_handler): Likewise.
    * src/gpgme.h.in (gpgme_status_code_t): Add new status codes for the
    new status lines.
    * src/keylist.c (parse_pub_field18): Move function to 'util.h'.
    (keylist_colon_handler): Adapt callsites.
    * src/status-table.c (status_table): Add new status lines.
    * src/util.h (PARSE_COMPLIANCE_FLAGS): New macro.  This used to be
    'parse_pub_field18', but turned into a macro to make it polymorphic.
    --
    
    When decrypting data and verifying signatures, report whether the
    operations are in compliance with the criteria for data classified as
    VS-NfD.  This information can the be presented to the user.
    
    GnuPG-bug-id: 3059
    Signed-off-by: Justus Winter <justus at g10code.com>

diff --git a/NEWS b/NEWS
index 0520768..b4a0d88 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,15 @@
 Noteworthy changes in version 1.9.1 (unreleased)
 ------------------------------------------------
 
+ * Interface changes relative to the 1.9.0 release:
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ gpgme_decrypt_result_t EXTENDED: New field 'is_de_vs'.
+ gpgme_signature_t      EXTENDED: New field 'is_de_vs'.
+ cpp: DecryptionResult::isDeVs NEW.
+ cpp: Signature::isDeVs        NEW.
+ py: DecryptResult EXTENDED: New boolean field 'is_de_vs'.
+ py: Signature     EXTENDED: New boolean field 'is_de_vs'.
 
 Noteworthy changes in version 1.9.0 (2017-03-28)
 ------------------------------------------------
diff --git a/lang/cpp/src/decryptionresult.cpp b/lang/cpp/src/decryptionresult.cpp
index 05f7e75..d1c991b 100644
--- a/lang/cpp/src/decryptionresult.cpp
+++ b/lang/cpp/src/decryptionresult.cpp
@@ -110,6 +110,11 @@ bool GpgME::DecryptionResult::isWrongKeyUsage() const
     return d && d->res.wrong_key_usage;
 }
 
+bool GpgME::DecryptionResult::isDeVs() const
+{
+    return d && d->res.is_de_vs;
+}
+
 const char *GpgME::DecryptionResult::fileName() const
 {
     return d ? d->res.file_name : 0 ;
diff --git a/lang/cpp/src/decryptionresult.h b/lang/cpp/src/decryptionresult.h
index cd3ab7c..57705b4 100644
--- a/lang/cpp/src/decryptionresult.h
+++ b/lang/cpp/src/decryptionresult.h
@@ -73,6 +73,7 @@ public:
         return isWrongKeyUsage();
     }
     bool isWrongKeyUsage() const;
+    bool isDeVs() const;
 
     const char *fileName() const;
 
diff --git a/lang/cpp/src/verificationresult.cpp b/lang/cpp/src/verificationresult.cpp
index 8d90a7d..6dacd9f 100644
--- a/lang/cpp/src/verificationresult.cpp
+++ b/lang/cpp/src/verificationresult.cpp
@@ -278,6 +278,11 @@ bool GpgME::Signature::isVerifiedUsingChainModel() const
     return !isNull() && d->sigs[idx]->chain_model;
 }
 
+bool GpgME::Signature::isDeVs() const
+{
+    return !isNull() && d->sigs[idx]->is_de_vs;
+}
+
 GpgME::Signature::PKAStatus GpgME::Signature::pkaStatus() const
 {
     if (!isNull()) {
diff --git a/lang/cpp/src/verificationresult.h b/lang/cpp/src/verificationresult.h
index 765fb79..3f6299c 100644
--- a/lang/cpp/src/verificationresult.h
+++ b/lang/cpp/src/verificationresult.h
@@ -136,6 +136,7 @@ public:
     }
     bool isWrongKeyUsage() const;
     bool isVerifiedUsingChainModel() const;
+    bool isDeVs() const;
 
     enum PKAStatus {
         UnknownPKAStatus, PKAVerificationFailed, PKAVerificationSucceeded
diff --git a/lang/python/src/results.py b/lang/python/src/results.py
index 46ebeec..bfd0f68 100644
--- a/lang/python/src/results.py
+++ b/lang/python/src/results.py
@@ -80,7 +80,7 @@ class Recipient(Result):
     pass
 
 class DecryptResult(Result):
-    _type = dict(wrong_key_usage=bool)
+    _type = dict(wrong_key_usage=bool, is_de_vs=bool)
     _map = dict(recipients=Recipient)
 
 class NewSignature(Result):
@@ -93,7 +93,7 @@ class Notation(Result):
     pass
 
 class Signature(Result):
-    _type = dict(wrong_key_usage=bool, chain_model=bool)
+    _type = dict(wrong_key_usage=bool, chain_model=bool, is_de_vs=bool)
     _map = dict(notations=Notation)
 
 class VerifyResult(Result):
diff --git a/src/decrypt.c b/src/decrypt.c
index f30f80f..3b18909 100644
--- a/src/decrypt.c
+++ b/src/decrypt.c
@@ -321,6 +321,10 @@ _gpgme_decrypt_status_handler (void *priv, gpgme_status_code_t code,
         }
       break;
 
+    case GPGME_STATUS_DECRYPTION_COMPLIANCE_MODE:
+      PARSE_COMPLIANCE_FLAGS (args, &opd->result);
+      break;
+
     default:
       break;
     }
diff --git a/src/gpgme.h.in b/src/gpgme.h.in
index 24b21e7..867219a 100644
--- a/src/gpgme.h.in
+++ b/src/gpgme.h.in
@@ -1312,8 +1312,12 @@ struct _gpgme_op_decrypt_result
   /* Key should not have been used for encryption.  */
   unsigned int wrong_key_usage : 1;
 
+  /* True if the message was encrypted in compliance to the de-vs
+   * mode.  */
+  unsigned int is_de_vs : 1;
+
   /* Internal to GPGME, do not use.  */
-  int _unused : 31;
+  int _unused : 30;
 
   gpgme_recipient_t recipients;
 
@@ -1490,8 +1494,11 @@ struct _gpgme_signature
   /* Validity has been verified using the chain model. */
   unsigned int chain_model : 1;
 
+  /* True if the signature is in compliance to the de-vs mode.  */
+  unsigned int is_de_vs : 1;
+
   /* Internal to GPGME, do not use.  */
-  int _unused : 28;
+  int _unused : 27;
 
   gpgme_validity_t validity;
   gpgme_error_t validity_reason;
@@ -2468,7 +2475,9 @@ typedef enum
     GPGME_STATUS_TOFU_USER = 95,
     GPGME_STATUS_TOFU_STATS = 96,
     GPGME_STATUS_TOFU_STATS_LONG = 97,
-    GPGME_STATUS_NOTATION_FLAGS = 98
+    GPGME_STATUS_NOTATION_FLAGS = 98,
+    GPGME_STATUS_DECRYPTION_COMPLIANCE_MODE = 99,
+    GPGME_STATUS_VERIFICATION_COMPLIANCE_MODE = 100
   }
 gpgme_status_code_t;
 
diff --git a/src/keylist.c b/src/keylist.c
index e16ba4d..5e1c61e 100644
--- a/src/keylist.c
+++ b/src/keylist.c
@@ -416,23 +416,6 @@ parse_sec_field15 (gpgme_key_t key, gpgme_subkey_t subkey, char *field)
 }
 
 
-/* Parse the compliance field.  */
-static void
-parse_pub_field18 (gpgme_subkey_t subkey, char *field)
-{
-  char *p, *endp;
-  unsigned long ul;
-
-  for (p = field; p && (ul = strtoul (p, &endp, 10)) && p != endp; p = endp)
-    {
-      switch (ul)
-        {
-        case 23: subkey->is_de_vs = 1; break;
-        }
-    }
-}
-
-
 /* Parse a tfs record.  */
 static gpg_error_t
 parse_tfs_record (gpgme_user_id_t uid, char **field, int nfield)
@@ -731,7 +714,7 @@ keylist_colon_handler (void *priv, char *line)
 
       /* Field 18 has the compliance flags.  */
       if (fields >= 17 && *field[17])
-        parse_pub_field18 (subkey, field[17]);
+        PARSE_COMPLIANCE_FLAGS (field[17], subkey);
 
       if (fields >= 20)
         {
@@ -814,7 +797,7 @@ keylist_colon_handler (void *priv, char *line)
 
       /* Field 18 has the compliance flags.  */
       if (fields >= 17 && *field[17])
-        parse_pub_field18 (subkey, field[17]);
+        PARSE_COMPLIANCE_FLAGS (field[17], subkey);
 
       break;
 
diff --git a/src/status-table.c b/src/status-table.c
index 6451134..afc7eab 100644
--- a/src/status-table.c
+++ b/src/status-table.c
@@ -56,6 +56,7 @@ static struct status_table_s status_table[] =
   { "DECRYPTION_INFO",   GPGME_STATUS_DECRYPTION_INFO  },
   { "DECRYPTION_OKAY", GPGME_STATUS_DECRYPTION_OKAY },
   { "DELETE_PROBLEM", GPGME_STATUS_DELETE_PROBLEM },
+  { "DECRYPTION_COMPLIANCE_MODE", GPGME_STATUS_DECRYPTION_COMPLIANCE_MODE },
   { "ENC_TO", GPGME_STATUS_ENC_TO },
   { "END_DECRYPTION", GPGME_STATUS_END_DECRYPTION },
   { "END_ENCRYPTION", GPGME_STATUS_END_ENCRYPTION },
@@ -137,6 +138,7 @@ static struct status_table_s status_table[] =
   { "UNEXPECTED", GPGME_STATUS_UNEXPECTED },
   { "USERID_HINT", GPGME_STATUS_USERID_HINT },
   { "VALIDSIG", GPGME_STATUS_VALIDSIG },
+  { "VERIFICATION_COMPLIANCE_MODE", GPGME_STATUS_VERIFICATION_COMPLIANCE_MODE },
   {NULL, 0}
 };
 
diff --git a/src/util.h b/src/util.h
index 7b7924c..fd22d75 100644
--- a/src/util.h
+++ b/src/util.h
@@ -224,4 +224,26 @@ extern struct assuan_malloc_hooks _gpgme_assuan_malloc_hooks;
 int _gpgme_assuan_log_cb (assuan_context_t ctx, void *hook,
 			  unsigned int cat, const char *msg);
 
+

+
+/* Parse the compliance field.  */
+#define PARSE_COMPLIANCE_FLAGS(flags, result)				\
+  do {									\
+    char *comp_p, *comp_endp;						\
+    unsigned long comp_ul;						\
+									\
+    for (comp_p = (flags);						\
+	 comp_p								\
+	   && (comp_ul = strtoul (comp_p, &comp_endp, 10))		\
+	   && comp_p != comp_endp;					\
+	 comp_p = comp_endp)						\
+      {									\
+	switch (comp_ul)						\
+	  {								\
+	  case 23: (result)->is_de_vs = 1; break;			\
+	  }								\
+      }									\
+  } while (0)
+
+
 #endif /* UTIL_H */
diff --git a/src/verify.c b/src/verify.c
index 900f925..ee730a3 100644
--- a/src/verify.c
+++ b/src/verify.c
@@ -1078,6 +1078,10 @@ _gpgme_verify_status_handler (void *priv, gpgme_status_code_t code, char *args)
       if (err)
 	return err;
 
+    case GPGME_STATUS_VERIFICATION_COMPLIANCE_MODE:
+      PARSE_COMPLIANCE_FLAGS (args, opd->current_sig);
+      break;
+
     default:
       break;
     }

-----------------------------------------------------------------------

Summary of changes:
 NEWS                                |  9 +++++++++
 lang/cpp/src/decryptionresult.cpp   |  5 +++++
 lang/cpp/src/decryptionresult.h     |  1 +
 lang/cpp/src/verificationresult.cpp |  5 +++++
 lang/cpp/src/verificationresult.h   |  1 +
 lang/python/src/results.py          |  4 ++--
 src/decrypt.c                       |  4 ++++
 src/gpgme.h.in                      | 15 ++++++++++++---
 src/keylist.c                       | 21 ++-------------------
 src/status-table.c                  |  2 ++
 src/util.h                          | 22 ++++++++++++++++++++++
 src/verify.c                        |  4 ++++
 12 files changed, 69 insertions(+), 24 deletions(-)


hooks/post-receive
-- 
GnuPG Made Easy
http://git.gnupg.org




More information about the Gnupg-commits mailing list