diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/evp/evp_key.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/lib/libcrypto/evp/evp_key.c b/src/lib/libcrypto/evp/evp_key.c index f51584b84b..da103c853f 100644 --- a/src/lib/libcrypto/evp/evp_key.c +++ b/src/lib/libcrypto/evp/evp_key.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: evp_key.c,v 1.34 2024/02/18 15:45:42 tb Exp $ */ | 1 | /* $OpenBSD: evp_key.c,v 1.35 2024/03/25 10:58:06 joshua Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -135,7 +135,7 @@ EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, | |||
| 135 | const unsigned char *salt, const unsigned char *data, int datal, | 135 | const unsigned char *salt, const unsigned char *data, int datal, |
| 136 | int count, unsigned char *key, unsigned char *iv) | 136 | int count, unsigned char *key, unsigned char *iv) |
| 137 | { | 137 | { |
| 138 | EVP_MD_CTX c; | 138 | EVP_MD_CTX *md_ctx; |
| 139 | unsigned char md_buf[EVP_MAX_MD_SIZE]; | 139 | unsigned char md_buf[EVP_MAX_MD_SIZE]; |
| 140 | int niv, nkey, addmd = 0; | 140 | int niv, nkey, addmd = 0; |
| 141 | unsigned int mds = 0, i; | 141 | unsigned int mds = 0, i; |
| @@ -156,27 +156,29 @@ EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, | |||
| 156 | if (data == NULL) | 156 | if (data == NULL) |
| 157 | return nkey; | 157 | return nkey; |
| 158 | 158 | ||
| 159 | EVP_MD_CTX_legacy_clear(&c); | 159 | if ((md_ctx = EVP_MD_CTX_new()) == NULL) |
| 160 | goto err; | ||
| 161 | |||
| 160 | for (;;) { | 162 | for (;;) { |
| 161 | if (!EVP_DigestInit_ex(&c, md, NULL)) | 163 | if (!EVP_DigestInit_ex(md_ctx, md, NULL)) |
| 162 | goto err; | 164 | goto err; |
| 163 | if (addmd++) | 165 | if (addmd++) |
| 164 | if (!EVP_DigestUpdate(&c, &(md_buf[0]), mds)) | 166 | if (!EVP_DigestUpdate(md_ctx, &(md_buf[0]), mds)) |
| 165 | goto err; | 167 | goto err; |
| 166 | if (!EVP_DigestUpdate(&c, data, datal)) | 168 | if (!EVP_DigestUpdate(md_ctx, data, datal)) |
| 167 | goto err; | 169 | goto err; |
| 168 | if (salt != NULL) | 170 | if (salt != NULL) |
| 169 | if (!EVP_DigestUpdate(&c, salt, PKCS5_SALT_LEN)) | 171 | if (!EVP_DigestUpdate(md_ctx, salt, PKCS5_SALT_LEN)) |
| 170 | goto err; | 172 | goto err; |
| 171 | if (!EVP_DigestFinal_ex(&c, &(md_buf[0]), &mds)) | 173 | if (!EVP_DigestFinal_ex(md_ctx, &(md_buf[0]), &mds)) |
| 172 | goto err; | 174 | goto err; |
| 173 | 175 | ||
| 174 | for (i = 1; i < (unsigned int)count; i++) { | 176 | for (i = 1; i < (unsigned int)count; i++) { |
| 175 | if (!EVP_DigestInit_ex(&c, md, NULL)) | 177 | if (!EVP_DigestInit_ex(md_ctx, md, NULL)) |
| 176 | goto err; | 178 | goto err; |
| 177 | if (!EVP_DigestUpdate(&c, &(md_buf[0]), mds)) | 179 | if (!EVP_DigestUpdate(md_ctx, &(md_buf[0]), mds)) |
| 178 | goto err; | 180 | goto err; |
| 179 | if (!EVP_DigestFinal_ex(&c, &(md_buf[0]), &mds)) | 181 | if (!EVP_DigestFinal_ex(md_ctx, &(md_buf[0]), &mds)) |
| 180 | goto err; | 182 | goto err; |
| 181 | } | 183 | } |
| 182 | i = 0; | 184 | i = 0; |
| @@ -210,7 +212,7 @@ EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, | |||
| 210 | rv = type->key_len; | 212 | rv = type->key_len; |
| 211 | 213 | ||
| 212 | err: | 214 | err: |
| 213 | EVP_MD_CTX_cleanup(&c); | 215 | EVP_MD_CTX_free(md_ctx); |
| 214 | explicit_bzero(md_buf, sizeof md_buf); | 216 | explicit_bzero(md_buf, sizeof md_buf); |
| 215 | return rv; | 217 | return rv; |
| 216 | } | 218 | } |
