Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Side by Side Diff: openssl/crypto/rsa/rsa_oaep.c

Issue 9254031: Upgrade chrome's OpenSSL to same version Android ships with. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/openssl/
Patch Set: '' Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « openssl/crypto/rsa/rsa_locl.h ('k') | openssl/crypto/rsa/rsa_pmeth.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* crypto/rsa/rsa_oaep.c */ 1 /* crypto/rsa/rsa_oaep.c */
2 /* Written by Ulf Moeller. This software is distributed on an "AS IS" 2 /* Written by Ulf Moeller. This software is distributed on an "AS IS"
3 basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. */ 3 basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. */
4 4
5 /* EME-OAEP as defined in RFC 2437 (PKCS #1 v2.0) */ 5 /* EME-OAEP as defined in RFC 2437 (PKCS #1 v2.0) */
6 6
7 /* See Victor Shoup, "OAEP reconsidered," Nov. 2000, 7 /* See Victor Shoup, "OAEP reconsidered," Nov. 2000,
8 * <URL: http://www.shoup.net/papers/oaep.ps.Z> 8 * <URL: http://www.shoup.net/papers/oaep.ps.Z>
9 * for problems with the security proof for the 9 * for problems with the security proof for the
10 * original OAEP scheme, which EME-OAEP is based on. 10 * original OAEP scheme, which EME-OAEP is based on.
(...skipping 10 matching lines...) Expand all
21 21
22 #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1) 22 #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1)
23 #include <stdio.h> 23 #include <stdio.h>
24 #include "cryptlib.h" 24 #include "cryptlib.h"
25 #include <openssl/bn.h> 25 #include <openssl/bn.h>
26 #include <openssl/rsa.h> 26 #include <openssl/rsa.h>
27 #include <openssl/evp.h> 27 #include <openssl/evp.h>
28 #include <openssl/rand.h> 28 #include <openssl/rand.h>
29 #include <openssl/sha.h> 29 #include <openssl/sha.h>
30 30
31 int MGF1(unsigned char *mask, long len, 31 static int MGF1(unsigned char *mask, long len,
32 const unsigned char *seed, long seedlen); 32 const unsigned char *seed, long seedlen);
33 33
34 int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, 34 int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
35 const unsigned char *from, int flen, 35 const unsigned char *from, int flen,
36 const unsigned char *param, int plen) 36 const unsigned char *param, int plen)
37 { 37 {
38 int i, emlen = tlen - 1; 38 int i, emlen = tlen - 1;
39 unsigned char *db, *seed; 39 unsigned char *db, *seed;
40 unsigned char *dbmask, seedmask[SHA_DIGEST_LENGTH]; 40 unsigned char *dbmask, seedmask[SHA_DIGEST_LENGTH];
41 41
(...skipping 27 matching lines...) Expand all
69 20); 69 20);
70 #endif 70 #endif
71 71
72 dbmask = OPENSSL_malloc(emlen - SHA_DIGEST_LENGTH); 72 dbmask = OPENSSL_malloc(emlen - SHA_DIGEST_LENGTH);
73 if (dbmask == NULL) 73 if (dbmask == NULL)
74 { 74 {
75 RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP, ERR_R_MALLOC_FAILURE); 75 RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP, ERR_R_MALLOC_FAILURE);
76 return 0; 76 return 0;
77 } 77 }
78 78
79 » MGF1(dbmask, emlen - SHA_DIGEST_LENGTH, seed, SHA_DIGEST_LENGTH); 79 » if (MGF1(dbmask, emlen - SHA_DIGEST_LENGTH, seed, SHA_DIGEST_LENGTH) < 0 )
80 » » return 0;
80 for (i = 0; i < emlen - SHA_DIGEST_LENGTH; i++) 81 for (i = 0; i < emlen - SHA_DIGEST_LENGTH; i++)
81 db[i] ^= dbmask[i]; 82 db[i] ^= dbmask[i];
82 83
83 » MGF1(seedmask, SHA_DIGEST_LENGTH, db, emlen - SHA_DIGEST_LENGTH); 84 » if (MGF1(seedmask, SHA_DIGEST_LENGTH, db, emlen - SHA_DIGEST_LENGTH) < 0 )
85 » » return 0;
84 for (i = 0; i < SHA_DIGEST_LENGTH; i++) 86 for (i = 0; i < SHA_DIGEST_LENGTH; i++)
85 seed[i] ^= seedmask[i]; 87 seed[i] ^= seedmask[i];
86 88
87 OPENSSL_free(dbmask); 89 OPENSSL_free(dbmask);
88 return 1; 90 return 1;
89 } 91 }
90 92
91 int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, 93 int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
92 const unsigned char *from, int flen, int num, 94 const unsigned char *from, int flen, int num,
93 const unsigned char *param, int plen) 95 const unsigned char *param, int plen)
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 } 128 }
127 129
128 /* Always do this zero-padding copy (even when lzero == 0) 130 /* Always do this zero-padding copy (even when lzero == 0)
129 * to avoid leaking timing info about the value of lzero. */ 131 * to avoid leaking timing info about the value of lzero. */
130 padded_from = db + dblen; 132 padded_from = db + dblen;
131 memset(padded_from, 0, lzero); 133 memset(padded_from, 0, lzero);
132 memcpy(padded_from + lzero, from, flen); 134 memcpy(padded_from + lzero, from, flen);
133 135
134 maskeddb = padded_from + SHA_DIGEST_LENGTH; 136 maskeddb = padded_from + SHA_DIGEST_LENGTH;
135 137
136 » MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen); 138 » if (MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen))
139 » » return -1;
137 for (i = 0; i < SHA_DIGEST_LENGTH; i++) 140 for (i = 0; i < SHA_DIGEST_LENGTH; i++)
138 seed[i] ^= padded_from[i]; 141 seed[i] ^= padded_from[i];
139 142
140 » MGF1(db, dblen, seed, SHA_DIGEST_LENGTH); 143 » if (MGF1(db, dblen, seed, SHA_DIGEST_LENGTH))
144 » » return -1;
141 for (i = 0; i < dblen; i++) 145 for (i = 0; i < dblen; i++)
142 db[i] ^= maskeddb[i]; 146 db[i] ^= maskeddb[i];
143 147
144 EVP_Digest((void *)param, plen, phash, NULL, EVP_sha1(), NULL); 148 EVP_Digest((void *)param, plen, phash, NULL, EVP_sha1(), NULL);
145 149
146 if (memcmp(db, phash, SHA_DIGEST_LENGTH) != 0 || bad) 150 if (memcmp(db, phash, SHA_DIGEST_LENGTH) != 0 || bad)
147 goto decoding_err; 151 goto decoding_err;
148 else 152 else
149 { 153 {
150 for (i = SHA_DIGEST_LENGTH; i < dblen; i++) 154 for (i = SHA_DIGEST_LENGTH; i < dblen; i++)
(...skipping 27 matching lines...) Expand all
178 } 182 }
179 183
180 int PKCS1_MGF1(unsigned char *mask, long len, 184 int PKCS1_MGF1(unsigned char *mask, long len,
181 const unsigned char *seed, long seedlen, const EVP_MD *dgst) 185 const unsigned char *seed, long seedlen, const EVP_MD *dgst)
182 { 186 {
183 long i, outlen = 0; 187 long i, outlen = 0;
184 unsigned char cnt[4]; 188 unsigned char cnt[4];
185 EVP_MD_CTX c; 189 EVP_MD_CTX c;
186 unsigned char md[EVP_MAX_MD_SIZE]; 190 unsigned char md[EVP_MAX_MD_SIZE];
187 int mdlen; 191 int mdlen;
192 int rv = -1;
188 193
189 EVP_MD_CTX_init(&c); 194 EVP_MD_CTX_init(&c);
190 » mdlen = M_EVP_MD_size(dgst); 195 » mdlen = EVP_MD_size(dgst);
196 » if (mdlen < 0)
197 » » goto err;
191 for (i = 0; outlen < len; i++) 198 for (i = 0; outlen < len; i++)
192 { 199 {
193 cnt[0] = (unsigned char)((i >> 24) & 255); 200 cnt[0] = (unsigned char)((i >> 24) & 255);
194 cnt[1] = (unsigned char)((i >> 16) & 255); 201 cnt[1] = (unsigned char)((i >> 16) & 255);
195 cnt[2] = (unsigned char)((i >> 8)) & 255; 202 cnt[2] = (unsigned char)((i >> 8)) & 255;
196 cnt[3] = (unsigned char)(i & 255); 203 cnt[3] = (unsigned char)(i & 255);
197 » » EVP_DigestInit_ex(&c,dgst, NULL); 204 » » if (!EVP_DigestInit_ex(&c,dgst, NULL)
198 » » EVP_DigestUpdate(&c, seed, seedlen); 205 » » » || !EVP_DigestUpdate(&c, seed, seedlen)
199 » » EVP_DigestUpdate(&c, cnt, 4); 206 » » » || !EVP_DigestUpdate(&c, cnt, 4))
207 » » » goto err;
200 if (outlen + mdlen <= len) 208 if (outlen + mdlen <= len)
201 { 209 {
202 » » » EVP_DigestFinal_ex(&c, mask + outlen, NULL); 210 » » » if (!EVP_DigestFinal_ex(&c, mask + outlen, NULL))
211 » » » » goto err;
203 outlen += mdlen; 212 outlen += mdlen;
204 } 213 }
205 else 214 else
206 { 215 {
207 » » » EVP_DigestFinal_ex(&c, md, NULL); 216 » » » if (!EVP_DigestFinal_ex(&c, md, NULL))
217 » » » » goto err;
208 memcpy(mask + outlen, md, len - outlen); 218 memcpy(mask + outlen, md, len - outlen);
209 outlen = len; 219 outlen = len;
210 } 220 }
211 } 221 }
222 rv = 0;
223 err:
212 EVP_MD_CTX_cleanup(&c); 224 EVP_MD_CTX_cleanup(&c);
213 » return 0; 225 » return rv;
214 } 226 }
215 227
216 int MGF1(unsigned char *mask, long len, const unsigned char *seed, long seedlen) 228 static int MGF1(unsigned char *mask, long len, const unsigned char *seed,
229 » » long seedlen)
217 { 230 {
218 return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1()); 231 return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1());
219 } 232 }
220 #endif 233 #endif
OLDNEW
« no previous file with comments | « openssl/crypto/rsa/rsa_locl.h ('k') | openssl/crypto/rsa/rsa_pmeth.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698