1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00

gpg: Support EAX if for latest Libgcrypt.

* 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>
This commit is contained in:
Werner Koch 2018-01-21 16:42:29 +01:00
parent 3f4ca85cb0
commit 7356d6ec50
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
3 changed files with 16 additions and 4 deletions

View File

@ -33,6 +33,11 @@
#include "options.h" #include "options.h"
#include "main.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 /* The size of the buffer we allocate to encrypt the data. This must
* be a multiple of the OCB blocksize (16 byte). */ * be a multiple of the OCB blocksize (16 byte). */
#define AEAD_ENC_BUFFER_SIZE (64*1024) #define AEAD_ENC_BUFFER_SIZE (64*1024)
@ -151,6 +156,11 @@ write_header (cipher_filter_context_t *cfx, iobuf_t a)
startivlen = 15; startivlen = 15;
break; break;
case AEAD_ALGO_EAX:
ciphermode = MY_GCRY_CIPHER_MODE_EAX;
startivlen = 16;
break;
default: default:
log_error ("unsupported AEAD algo %d\n", cfx->dek->use_aead); log_error ("unsupported AEAD algo %d\n", cfx->dek->use_aead);
err = gpg_error (GPG_ERR_NOT_IMPLEMENTED); err = gpg_error (GPG_ERR_NOT_IMPLEMENTED);

View File

@ -31,6 +31,10 @@
#include "../common/status.h" #include "../common/status.h"
#include "../common/compliance.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, static int aead_decode_filter (void *opaque, int control, iobuf_t a,
byte *buf, size_t *ret_len); byte *buf, size_t *ret_len);
@ -278,9 +282,8 @@ decrypt_data (ctrl_t ctrl, void *procctx, PKT_encrypted *ed, DEK *dek)
break; break;
case AEAD_ALGO_EAX: case AEAD_ALGO_EAX:
startivlen = 16; startivlen = 16;
log_error ("unsupported AEAD algo %d\n", ed->aead_algo); ciphermode = MY_GCRY_CIPHER_MODE_EAX;
rc = gpg_error (GPG_ERR_NOT_IMPLEMENTED); break;
goto leave;
default: default:
log_error ("unknown AEAD algo %d\n", ed->aead_algo); log_error ("unknown AEAD algo %d\n", ed->aead_algo);
rc = gpg_error (GPG_ERR_INV_CIPHER_MODE); rc = gpg_error (GPG_ERR_INV_CIPHER_MODE);

View File

@ -591,7 +591,6 @@ openpgp_aead_test_algo (aead_algo_t algo)
case AEAD_ALGO_NONE: case AEAD_ALGO_NONE:
break; break;
case AEAD_ALGO_EAX: case AEAD_ALGO_EAX:
return gpg_error (GPG_ERR_NOT_SUPPORTED);
case AEAD_ALGO_OCB: case AEAD_ALGO_OCB:
return 0; return 0;
} }