More tests.
[openssl.git] / crypto / evp / p5_crpt.c
index caf03c6c776f9cb0603bcea24b47b198c046ef1f..f05273f257b411bd12a7c3b3c118b2726216d10d 100644 (file)
@@ -101,7 +101,7 @@ EVP_PBE_alg_add(NID_pbes2, NULL, NULL, PKCS5_v2_PBE_keyivgen);
 }
 
 int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
-                        ASN1_TYPE *param, EVP_CIPHER *cipher, EVP_MD *md,
+                        ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
                         int en_de)
 {
        EVP_MD_CTX ctx;
@@ -128,6 +128,7 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
        if(!pass) passlen = 0;
        else if(passlen == -1) passlen = strlen(pass);
 
+       EVP_MD_CTX_init(&ctx);
        EVP_DigestInit (&ctx, md);
        EVP_DigestUpdate (&ctx, pass, passlen);
        EVP_DigestUpdate (&ctx, salt, saltlen);
@@ -138,6 +139,7 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
                EVP_DigestUpdate(&ctx, md_tmp, EVP_MD_size(md));
                EVP_DigestFinal (&ctx, md_tmp, NULL);
        }
+       EVP_MD_CTX_cleanup(&ctx);
        memcpy (key, md_tmp, EVP_CIPHER_key_length(cipher));
        memcpy (iv, md_tmp + (16 - EVP_CIPHER_iv_length(cipher)),
                                                 EVP_CIPHER_iv_length(cipher));