summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/rsa/rsa_oaep.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_oaep.c')
-rw-r--r--src/lib/libcrypto/rsa/rsa_oaep.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_oaep.c b/src/lib/libcrypto/rsa/rsa_oaep.c
index 18d307ea9e..e238d10e5c 100644
--- a/src/lib/libcrypto/rsa/rsa_oaep.c
+++ b/src/lib/libcrypto/rsa/rsa_oaep.c
@@ -189,40 +189,34 @@ int PKCS1_MGF1(unsigned char *mask, long len,
189 EVP_MD_CTX c; 189 EVP_MD_CTX c;
190 unsigned char md[EVP_MAX_MD_SIZE]; 190 unsigned char md[EVP_MAX_MD_SIZE];
191 int mdlen; 191 int mdlen;
192 int rv = -1;
193 192
194 EVP_MD_CTX_init(&c); 193 EVP_MD_CTX_init(&c);
195 mdlen = EVP_MD_size(dgst); 194 mdlen = EVP_MD_size(dgst);
196 if (mdlen < 0) 195 if (mdlen < 0)
197 goto err; 196 return -1;
198 for (i = 0; outlen < len; i++) 197 for (i = 0; outlen < len; i++)
199 { 198 {
200 cnt[0] = (unsigned char)((i >> 24) & 255); 199 cnt[0] = (unsigned char)((i >> 24) & 255);
201 cnt[1] = (unsigned char)((i >> 16) & 255); 200 cnt[1] = (unsigned char)((i >> 16) & 255);
202 cnt[2] = (unsigned char)((i >> 8)) & 255; 201 cnt[2] = (unsigned char)((i >> 8)) & 255;
203 cnt[3] = (unsigned char)(i & 255); 202 cnt[3] = (unsigned char)(i & 255);
204 if (!EVP_DigestInit_ex(&c,dgst, NULL) 203 EVP_DigestInit_ex(&c,dgst, NULL);
205 || !EVP_DigestUpdate(&c, seed, seedlen) 204 EVP_DigestUpdate(&c, seed, seedlen);
206 || !EVP_DigestUpdate(&c, cnt, 4)) 205 EVP_DigestUpdate(&c, cnt, 4);
207 goto err;
208 if (outlen + mdlen <= len) 206 if (outlen + mdlen <= len)
209 { 207 {
210 if (!EVP_DigestFinal_ex(&c, mask + outlen, NULL)) 208 EVP_DigestFinal_ex(&c, mask + outlen, NULL);
211 goto err;
212 outlen += mdlen; 209 outlen += mdlen;
213 } 210 }
214 else 211 else
215 { 212 {
216 if (!EVP_DigestFinal_ex(&c, md, NULL)) 213 EVP_DigestFinal_ex(&c, md, NULL);
217 goto err;
218 memcpy(mask + outlen, md, len - outlen); 214 memcpy(mask + outlen, md, len - outlen);
219 outlen = len; 215 outlen = len;
220 } 216 }
221 } 217 }
222 rv = 0;
223 err:
224 EVP_MD_CTX_cleanup(&c); 218 EVP_MD_CTX_cleanup(&c);
225 return rv; 219 return 0;
226 } 220 }
227 221
228static int MGF1(unsigned char *mask, long len, const unsigned char *seed, 222static int MGF1(unsigned char *mask, long len, const unsigned char *seed,