core: New decryption result flag 'legacy_cipher_nomdc'.
authorWerner Koch <wk@gnupg.org>
Thu, 31 May 2018 23:01:08 +0000 (01:01 +0200)
committerWerner Koch <wk@gnupg.org>
Thu, 31 May 2018 23:01:08 +0000 (01:01 +0200)
* src/gpgme.h.in (_gpgme_op_decrypt_result): Add flag
legacy_cipher_nomdc.
* src/decrypt.c (parse_status_error): Set this flag.
* tests/run-decrypt.c (print_result): print it.
(main): Print the result even on error.

Signed-off-by: Werner Koch <wk@gnupg.org>
NEWS
doc/gpgme.texi
src/decrypt.c
src/gpgme.h.in
tests/run-decrypt.c

diff --git a/NEWS b/NEWS
index 848f4e9..bc1330a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,9 +6,11 @@ Noteworthy changes in version 1.11.2 (unreleased)
 
  * Interface changes relative to the 1.11.1 release:
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- cpp: DecryptionResult::sessionKey    NEW.
- cpp: DecryptionResult::symkeyAlgo    NEW.
- cpp: Data::rewind                    NEW.
+ gpgme_decrypt_result_t           EXTENDED: New field legacy_cipher_nomdc.
+ cpp: DecryptionResult::sessionKey     NEW.
+ cpp: DecryptionResult::symkeyAlgo     NEW.
+ cpp: Data::rewind                     NEW.
+
 
 Noteworthy changes in version 1.11.1 (2018-04-20)
 -------------------------------------------------
index c745675..d877116 100644 (file)
@@ -5368,7 +5368,7 @@ This is a pointer to a structure used to store the result of a
 data, you can retrieve the pointer to the result with
 @code{gpgme_op_decrypt_result}.  As with all result structures, it
 this structure shall be considered read-only and an application must
-not allocated such a strucure on its own.  The structure contains the
+not allocate such a strucure on its own.  The structure contains the
 following members:
 
 @table @code
@@ -5378,9 +5378,22 @@ algorithm that is not supported.
 
 @item unsigned int wrong_key_usage : 1
 @since{0.9.0}
-
 This is true if the key was not used according to its policy.
 
+@item unsigned int legacy_cipher_nomdc : 1
+@since{1.11.2}
+The message was made by a legacy algorithm without any integrity
+protection.  This might be an old but legitimate message.
+
+@item unsigned int is_mime : 1;
+@since{1.11.0}
+The message claims that the content is a MIME object.
+
+@item unsigned int is_de_vs : 1;
+@since{1.10.0}
+The message was encrypted in a VS-NfD compliant way.  This is a
+specification in Germany for a restricted communication level.
+
 @item gpgme_recipient_t recipients
 @since{1.1.0}
 
index 7dbc6fd..f2278d8 100644 (file)
@@ -57,7 +57,7 @@ typedef struct
   int any_no_seckey;
 
   /* If the engine emits a DECRYPTION_INFO status and that does not
-   * indicate that an integrity proetction mode is active, this flag
+   * indicate that an integrity protection mode is active, this flag
    * is set.  */
   int not_integrity_protected;
 
@@ -214,6 +214,11 @@ parse_status_error (char *args, op_data_t opd)
           break;
         }
     }
+  else if (!strcmp (field[0], "nomdc_with_legacy_cipher"))
+    {
+      opd->result.legacy_cipher_nomdc = 1;
+      opd->not_integrity_protected = 1;
+    }
 
 
   free (args2);
index 49fafb9..5279f6a 100644 (file)
@@ -1365,8 +1365,12 @@ struct _gpgme_op_decrypt_result
   /* The message claims that the content is a MIME object.  */
   unsigned int is_mime : 1;
 
+  /* The message was made by a legacy algorithm without any integrity
+   * protection.  This might be an old but legitimate message. */
+  unsigned int legacy_cipher_nomdc : 1;
+
   /* Internal to GPGME, do not use.  */
-  int _unused : 29;
+  int _unused : 28;
 
   gpgme_recipient_t recipients;
 
index 69de139..8ec0cb4 100644 (file)
@@ -55,6 +55,7 @@ print_result (gpgme_decrypt_result_t result)
 
   printf ("Original file name .: %s\n", nonnull(result->file_name));
   printf ("Wrong key usage ....: %s\n", result->wrong_key_usage? "yes":"no");
+  printf ("Legacy w/o MDC ... .: %s\n", result->legacy_cipher_nomdc?"yes":"no");
   printf ("Compliance de-vs ...: %s\n", result->is_de_vs? "yes":"no");
   printf ("MIME flag ..........: %s\n", result->is_mime? "yes":"no");
   printf ("Unsupported algo ...: %s\n", nonnull(result->unsupported_algorithm));
@@ -267,6 +268,8 @@ main (int argc, char **argv)
   if (err)
     {
       fprintf (stderr, PGM ": decrypt failed: %s\n", gpgme_strerror (err));
+      if (result)
+        print_result (result);
       exit (1);
     }
   if (result)