Don't ignore passed ENGINE.
authorDr. Stephen Henson <steve@openssl.org>
Mon, 9 Oct 2017 13:37:21 +0000 (14:37 +0100)
committerDr. Stephen Henson <steve@openssl.org>
Wed, 11 Oct 2017 23:03:32 +0000 (00:03 +0100)
If we are passed an ENGINE to use in int_ctx_new e.g. via EVP_PKEY_CTX_new()
use it instead of the default.

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4503)

crypto/evp/pmeth_lib.c

index 2b9b8a92f8356b4518b7d25bf6832ba79086c418..31ec09261fd48744cc18583abaf815d03362dea9 100644 (file)
@@ -105,7 +105,7 @@ static EVP_PKEY_CTX *int_ctx_new(EVP_PKEY *pkey, ENGINE *e, int id)
         id = pkey->ameth->pkey_id;
     }
 #ifndef OPENSSL_NO_ENGINE
-    if (pkey && pkey->engine)
+    if (e == NULL && pkey != NULL)
         e = pkey->engine;
     /* Try to find an ENGINE which implements this method */
     if (e) {
@@ -113,8 +113,9 @@ static EVP_PKEY_CTX *int_ctx_new(EVP_PKEY *pkey, ENGINE *e, int id)
             EVPerr(EVP_F_INT_CTX_NEW, ERR_R_ENGINE_LIB);
             return NULL;
         }
-    } else
+    } else {
         e = ENGINE_get_pkey_meth_engine(id);
+    }
 
     /*
      * If an ENGINE handled this method look it up. Otherwise use internal