gpg: Support EAX if for latest Libgcrypt.
authorWerner Koch <wk@gnupg.org>
Sun, 21 Jan 2018 15:42:29 +0000 (16:42 +0100)
committerWerner Koch <wk@gnupg.org>
Sun, 21 Jan 2018 16:00:27 +0000 (17:00 +0100)
* g10/cipher-aead.c (MY_GCRY_CIPHER_MODE_EAX): New.
(write_header): Use it.
* g10/decrypt-data.c (MY_GCRY_CIPHER_MODE_EAX): New.
(decrypt_data): Use it.
* g10/misc.c (openpgp_aead_test_algo): Allow EAX.
--

This allows the use of EAX when the latest Libgcrypt master is used.

Signed-off-by: Werner Koch <wk@gnupg.org>
g10/cipher-aead.c
g10/decrypt-data.c
g10/misc.c

index f247a83..1d72634 100644 (file)
 #include "options.h"
 #include "main.h"
 
+/* FIXME: Libgcrypt 1.9 will support EAX.  Until we kame this a
+ * requirement we hardwire the enum used for EAX.  */
+#define MY_GCRY_CIPHER_MODE_EAX 14
+
+
 /* The size of the buffer we allocate to encrypt the data.  This must
  * be a multiple of the OCB blocksize (16 byte).  */
 #define AEAD_ENC_BUFFER_SIZE (64*1024)
@@ -151,6 +156,11 @@ write_header (cipher_filter_context_t *cfx, iobuf_t a)
       startivlen = 15;
       break;
 
+    case AEAD_ALGO_EAX:
+      ciphermode = MY_GCRY_CIPHER_MODE_EAX;
+      startivlen = 16;
+      break;
+
     default:
       log_error ("unsupported AEAD algo %d\n", cfx->dek->use_aead);
       err = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
index 80e16ec..79e2554 100644 (file)
 #include "../common/status.h"
 #include "../common/compliance.h"
 
+/* FIXME: Libgcrypt 1.9 will support EAX.  Until we kame this a
+ * requirement we hardwire the enum used for EAX.  */
+#define MY_GCRY_CIPHER_MODE_EAX 14
+
 
 static int aead_decode_filter (void *opaque, int control, iobuf_t a,
                                byte *buf, size_t *ret_len);
@@ -278,9 +282,8 @@ decrypt_data (ctrl_t ctrl, void *procctx, PKT_encrypted *ed, DEK *dek)
           break;
         case AEAD_ALGO_EAX:
           startivlen = 16;
-          log_error ("unsupported AEAD algo %d\n", ed->aead_algo);
-          rc = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-          goto leave;
+          ciphermode = MY_GCRY_CIPHER_MODE_EAX;
+          break;
         default:
           log_error ("unknown AEAD algo %d\n", ed->aead_algo);
           rc = gpg_error (GPG_ERR_INV_CIPHER_MODE);
index 2da0d27..f7ac3c7 100644 (file)
@@ -591,7 +591,6 @@ openpgp_aead_test_algo (aead_algo_t algo)
     case AEAD_ALGO_NONE:
       break;
     case AEAD_ALGO_EAX:
-      return gpg_error (GPG_ERR_NOT_SUPPORTED);
     case AEAD_ALGO_OCB:
       return 0;
     }