Adjust various bignum functions to use BN_CTX for variables instead of
[openssl.git] / apps / pkcs8.c
index ee8cf028138d6434d0d03f09f01746a4986bb828..43a828484784944349297087ab14ebbd1e601136 100644 (file)
@@ -232,11 +232,14 @@ int MAIN(int argc, char **argv)
                pkey = load_key(bio_err, infile, informat, 1,
                        passin, e, "key");
                if (!pkey) {
+                       BIO_free_all(out);
                        return (1);
                }
                if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) {
                        BIO_printf(bio_err, "Error converting key\n");
                        ERR_print_errors(bio_err);
+                       EVP_PKEY_free(pkey);
+                       BIO_free_all(out);
                        return (1);
                }
                if(nocrypt) {
@@ -246,6 +249,9 @@ int MAIN(int argc, char **argv)
                                i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
                        else {
                                BIO_printf(bio_err, "Bad format specified for key\n");
+                               PKCS8_PRIV_KEY_INFO_free(p8inf);
+                               EVP_PKEY_free(pkey);
+                               BIO_free_all(out);
                                return (1);
                        }
                } else {
@@ -253,7 +259,12 @@ int MAIN(int argc, char **argv)
                        else {
                                p8pass = pass;
                                if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1))
+                               {
+                                       PKCS8_PRIV_KEY_INFO_free(p8inf);
+                                       EVP_PKEY_free(pkey);
+                                       BIO_free_all(out);
                                        return (1);
+                               }
                        }
                        app_RAND_load_file(NULL, bio_err, 0);
                        if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
@@ -261,6 +272,9 @@ int MAIN(int argc, char **argv)
                                        NULL, 0, iter, p8inf))) {
                                BIO_printf(bio_err, "Error encrypting key\n");
                                ERR_print_errors(bio_err);
+                               PKCS8_PRIV_KEY_INFO_free(p8inf);
+                               EVP_PKEY_free(pkey);
+                               BIO_free_all(out);
                                return (1);
                        }
                        app_RAND_write_file(NULL, bio_err);
@@ -270,6 +284,9 @@ int MAIN(int argc, char **argv)
                                i2d_PKCS8_bio(out, p8);
                        else {
                                BIO_printf(bio_err, "Bad format specified for key\n");
+                               PKCS8_PRIV_KEY_INFO_free(p8inf);
+                               EVP_PKEY_free(pkey);
+                               BIO_free_all(out);
                                return (1);
                        }
                        X509_SIG_free(p8);