apps/apps.c: initialize and de-initialize engine around key loading
authorRichard Levitte <levitte@openssl.org>
Wed, 28 Sep 2016 19:28:00 +0000 (21:28 +0200)
committerRichard Levitte <richard@levitte.org>
Wed, 28 Sep 2016 19:58:50 +0000 (21:58 +0200)
Before loading a key from an engine, it may need to be initialized.
When done loading the key, we must de-initialize the engine.
(if the engine is already initialized somehow, only the reference
counter will be incremented then decremented)

Reviewed-by: Stephen Henson <steve@openssl.org>
(cherry picked from commit 49e476a5382602d0bad1139d6f1f66ddbc7959d6)

apps/apps.c

index aa564b8e8f8a753298f32b4653790ba19f2047b1..96184a6fb7e39d288a7d9e62c900c1b3f24f4c18 100644 (file)
@@ -692,7 +692,10 @@ EVP_PKEY *load_key(const char *file, int format, int maybe_stdin,
             BIO_printf(bio_err, "no engine specified\n");
         else {
 #ifndef OPENSSL_NO_ENGINE
-            pkey = ENGINE_load_private_key(e, file, ui_method, &cb_data);
+            if (ENGINE_init(e)) {
+                pkey = ENGINE_load_private_key(e, file, ui_method, &cb_data);
+                ENGINE_finish(e);
+            }
             if (pkey == NULL) {
                 BIO_printf(bio_err, "cannot load %s from engine\n", key_descrip);
                 ERR_print_errors(bio_err);