diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/evp/evp_pbe.c | 23 |
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 | |||
234 | PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, | 234 | PKCS5_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; |