summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/evp/evp_pbe.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/lib/libcrypto/evp/evp_pbe.c b/src/lib/libcrypto/evp/evp_pbe.c
index 37282202bc..81fa0446ed 100644
--- a/src/lib/libcrypto/evp/evp_pbe.c
+++ b/src/lib/libcrypto/evp/evp_pbe.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: evp_pbe.c,v 1.48 2024/03/24 06:48:03 tb Exp $ */ 1/* $OpenBSD: evp_pbe.c,v 1.49 2024/03/25 11:38:47 joshua Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -234,7 +234,7 @@ int
234PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, 234PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
235 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de) 235 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de)
236{ 236{
237 EVP_MD_CTX ctx; 237 EVP_MD_CTX *md_ctx;
238 unsigned char md_tmp[EVP_MAX_MD_SIZE]; 238 unsigned char md_tmp[EVP_MAX_MD_SIZE];
239 unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; 239 unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH];
240 int i; 240 int i;
@@ -277,22 +277,23 @@ PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
277 else if (passlen == -1) 277 else if (passlen == -1)
278 passlen = strlen(pass); 278 passlen = strlen(pass);
279 279
280 EVP_MD_CTX_legacy_clear(&ctx); 280 if ((md_ctx = EVP_MD_CTX_new()) == NULL)
281 goto err;
281 282
282 if (!EVP_DigestInit_ex(&ctx, md, NULL)) 283 if (!EVP_DigestInit_ex(md_ctx, md, NULL))
283 goto err; 284 goto err;
284 if (!EVP_DigestUpdate(&ctx, pass, passlen)) 285 if (!EVP_DigestUpdate(md_ctx, pass, passlen))
285 goto err; 286 goto err;
286 if (!EVP_DigestUpdate(&ctx, salt, saltlen)) 287 if (!EVP_DigestUpdate(md_ctx, salt, saltlen))
287 goto err; 288 goto err;
288 if (!EVP_DigestFinal_ex(&ctx, md_tmp, NULL)) 289 if (!EVP_DigestFinal_ex(md_ctx, md_tmp, NULL))
289 goto err; 290 goto err;
290 for (i = 1; i < iter; i++) { 291 for (i = 1; i < iter; i++) {
291 if (!EVP_DigestInit_ex(&ctx, md, NULL)) 292 if (!EVP_DigestInit_ex(md_ctx, md, NULL))
292 goto err; 293 goto err;
293 if (!EVP_DigestUpdate(&ctx, md_tmp, mdsize)) 294 if (!EVP_DigestUpdate(md_ctx, md_tmp, mdsize))
294 goto err; 295 goto err;
295 if (!EVP_DigestFinal_ex (&ctx, md_tmp, NULL)) 296 if (!EVP_DigestFinal_ex(md_ctx, md_tmp, NULL))
296 goto err; 297 goto err;
297 } 298 }
298 if ((size_t)EVP_CIPHER_key_length(cipher) > sizeof(md_tmp)) { 299 if ((size_t)EVP_CIPHER_key_length(cipher) > sizeof(md_tmp)) {
@@ -315,7 +316,7 @@ PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
315 ret = 1; 316 ret = 1;
316 317
317 err: 318 err:
318 EVP_MD_CTX_cleanup(&ctx); 319 EVP_MD_CTX_free(md_ctx);
319 PBEPARAM_free(pbe); 320 PBEPARAM_free(pbe);
320 321
321 return ret; 322 return ret;