The new ASN1 code automatically allocates
[openssl.git] / crypto / pkcs12 / p12_key.c
index 2defeda518e1c6d1cb96b9d335a4bcf24781f77a..0d39ebde8c8ec67da8a47beb9bee9a805c5dfcd6 100644 (file)
@@ -148,14 +148,14 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
        for (i = 0; i < Slen; i++) *p++ = salt[i % saltlen];
        for (i = 0; i < Plen; i++) *p++ = pass[i % passlen];
        for (;;) {
-               EVP_DigestInit (&ctx, md_type);
-               EVP_DigestUpdate (&ctx, D, v);
-               EVP_DigestUpdate (&ctx, I, Ilen);
-               EVP_DigestFinal (&ctx, Ai, NULL);
+               EVP_DigestInit_ex(&ctx, md_type, NULL);
+               EVP_DigestUpdate(&ctx, D, v);
+               EVP_DigestUpdate(&ctx, I, Ilen);
+               EVP_DigestFinal_ex(&ctx, Ai, NULL);
                for (j = 1; j < iter; j++) {
-                       EVP_DigestInit (&ctx, md_type);
-                       EVP_DigestUpdate (&ctx, Ai, u);
-                       EVP_DigestFinal (&ctx, Ai, NULL);
+                       EVP_DigestInit_ex(&ctx, md_type, NULL);
+                       EVP_DigestUpdate(&ctx, Ai, u);
+                       EVP_DigestFinal_ex(&ctx, Ai, NULL);
                }
                memcpy (out, Ai, min (n, u));
                if (u >= n) {
@@ -165,6 +165,7 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
                        OPENSSL_free (I);
                        BN_free (Ij);
                        BN_free (Bpl1);
+                       EVP_MD_CTX_cleanup(&ctx);
 #ifdef DEBUG_KEYGEN
                        fprintf(stderr, "Output KEY (length %d)\n", tmpn);
                        h__dump(tmpout, tmpn);
@@ -195,7 +196,6 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
                        } else BN_bn2bin (Ij, I + j);
                }
        }
-       EVP_MD_CTX_cleanup(&ctx);
 }
 #ifdef DEBUG_KEYGEN
 void h__dump (unsigned char *p, int len)