summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjoshua <>2024-03-25 10:58:06 +0000
committerjoshua <>2024-03-25 10:58:06 +0000
commitdda57bed0a76ddfb0856125602db1c44b1bc08fe (patch)
tree23a21e1b4f243b7be5a359c373f8441ef7fb2184 /src
parent20a39d2a3c5047f76ad6b865804f321ccc27e6c1 (diff)
downloadopenbsd-dda57bed0a76ddfb0856125602db1c44b1bc08fe.tar.gz
openbsd-dda57bed0a76ddfb0856125602db1c44b1bc08fe.tar.bz2
openbsd-dda57bed0a76ddfb0856125602db1c44b1bc08fe.zip
Clean up use of EVP_MD_CTX_{legacy_clear,cleanup} in EVP_BytesToKey
ok tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/evp/evp_key.c26
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
212err: 214err:
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}