From ecd1557fb4589103316c65b1fd1d4217a30900c0 Mon Sep 17 00:00:00 2001 From: Boris Pismenny Date: Thu, 1 Jun 2017 08:54:55 +0300 Subject: [PATCH] evp/e_aes: Expose IV This commit exposes the cipher's IV to applications. Signed-off-by: Boris Pismenny Reviewed-by: Tim Hudson Reviewed-by: Paul Yang Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/5253) --- crypto/evp/e_aes.c | 8 ++++++++ include/openssl/evp.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/crypto/evp/e_aes.c b/crypto/evp/e_aes.c index 7b35575f0a..09f6598b6c 100644 --- a/crypto/evp/e_aes.c +++ b/crypto/evp/e_aes.c @@ -2866,6 +2866,14 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) memcpy(ptr, c->buf, arg); return 1; + case EVP_CTRL_GET_IV: + if (gctx->iv_gen != 1) + return 0; + if (gctx->ivlen != arg) + return 0; + memcpy(ptr, gctx->iv, arg); + return 1; + case EVP_CTRL_GCM_SET_IV_FIXED: /* Special case: -1 length restores whole IV */ if (arg == -1) { diff --git a/include/openssl/evp.h b/include/openssl/evp.h index f381a5760f..636ed1b680 100644 --- a/include/openssl/evp.h +++ b/include/openssl/evp.h @@ -350,6 +350,8 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 /* Set the input buffer lengths to use for a pipelined operation */ # define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 +/* Get the IV used by the cipher */ +# define EVP_CTRL_GET_IV 0x25 /* Padding modes */ #define EVP_PADDING_PKCS7 1 -- 2.25.1