diff options
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_oaep.c')
-rw-r--r-- | src/lib/libcrypto/rsa/rsa_oaep.c | 20 |
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 | ||
228 | static int MGF1(unsigned char *mask, long len, const unsigned char *seed, | 222 | static int MGF1(unsigned char *mask, long len, const unsigned char *seed, |