summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/evp_key.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/evp/evp_key.c')
-rw-r--r--src/lib/libcrypto/evp/evp_key.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/src/lib/libcrypto/evp/evp_key.c b/src/lib/libcrypto/evp/evp_key.c
index 7961fbebf2..839d6a3a16 100644
--- a/src/lib/libcrypto/evp/evp_key.c
+++ b/src/lib/libcrypto/evp/evp_key.c
@@ -120,7 +120,7 @@ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
120 unsigned char md_buf[EVP_MAX_MD_SIZE]; 120 unsigned char md_buf[EVP_MAX_MD_SIZE];
121 int niv,nkey,addmd=0; 121 int niv,nkey,addmd=0;
122 unsigned int mds=0,i; 122 unsigned int mds=0,i;
123 int rv = 0; 123
124 nkey=type->key_len; 124 nkey=type->key_len;
125 niv=type->iv_len; 125 niv=type->iv_len;
126 OPENSSL_assert(nkey <= EVP_MAX_KEY_LENGTH); 126 OPENSSL_assert(nkey <= EVP_MAX_KEY_LENGTH);
@@ -134,24 +134,17 @@ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
134 if (!EVP_DigestInit_ex(&c,md, NULL)) 134 if (!EVP_DigestInit_ex(&c,md, NULL))
135 return 0; 135 return 0;
136 if (addmd++) 136 if (addmd++)
137 if (!EVP_DigestUpdate(&c,&(md_buf[0]),mds)) 137 EVP_DigestUpdate(&c,&(md_buf[0]),mds);
138 goto err; 138 EVP_DigestUpdate(&c,data,datal);
139 if (!EVP_DigestUpdate(&c,data,datal))
140 goto err;
141 if (salt != NULL) 139 if (salt != NULL)
142 if (!EVP_DigestUpdate(&c,salt,PKCS5_SALT_LEN)) 140 EVP_DigestUpdate(&c,salt,PKCS5_SALT_LEN);
143 goto err; 141 EVP_DigestFinal_ex(&c,&(md_buf[0]),&mds);
144 if (!EVP_DigestFinal_ex(&c,&(md_buf[0]),&mds))
145 goto err;
146 142
147 for (i=1; i<(unsigned int)count; i++) 143 for (i=1; i<(unsigned int)count; i++)
148 { 144 {
149 if (!EVP_DigestInit_ex(&c,md, NULL)) 145 EVP_DigestInit_ex(&c,md, NULL);
150 goto err; 146 EVP_DigestUpdate(&c,&(md_buf[0]),mds);
151 if (!EVP_DigestUpdate(&c,&(md_buf[0]),mds)) 147 EVP_DigestFinal_ex(&c,&(md_buf[0]),&mds);
152 goto err;
153 if (!EVP_DigestFinal_ex(&c,&(md_buf[0]),&mds))
154 goto err;
155 } 148 }
156 i=0; 149 i=0;
157 if (nkey) 150 if (nkey)
@@ -180,10 +173,8 @@ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
180 } 173 }
181 if ((nkey == 0) && (niv == 0)) break; 174 if ((nkey == 0) && (niv == 0)) break;
182 } 175 }
183 rv = type->key_len;
184 err:
185 EVP_MD_CTX_cleanup(&c); 176 EVP_MD_CTX_cleanup(&c);
186 OPENSSL_cleanse(&(md_buf[0]),EVP_MAX_MD_SIZE); 177 OPENSSL_cleanse(&(md_buf[0]),EVP_MAX_MD_SIZE);
187 return rv; 178 return(type->key_len);
188 } 179 }
189 180