Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/rsa/rsa_oaep.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, | - | ||||||||||||
4 | const unsigned char *from, int flen, | - | ||||||||||||
5 | const unsigned char *param, int plen) | - | ||||||||||||
6 | { | - | ||||||||||||
7 | return executed 3 times by 1 test: RSA_padding_add_PKCS1_OAEP_mgf1(to, tlen, from, flen,return RSA_padding_add_PKCS1_OAEP_mgf1(to, tlen, from, flen, param, plen, ((void *)0) , ((void *)0) ); Executed by:
executed 3 times by 1 test: return RSA_padding_add_PKCS1_OAEP_mgf1(to, tlen, from, flen, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 3 | ||||||||||||
8 | param, plen, executed 3 times by 1 test: return RSA_padding_add_PKCS1_OAEP_mgf1(to, tlen, from, flen, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 3 | ||||||||||||
9 | ((void *)0) executed 3 times by 1 test: return RSA_padding_add_PKCS1_OAEP_mgf1(to, tlen, from, flen, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 3 | ||||||||||||
10 | , executed 3 times by 1 test: return RSA_padding_add_PKCS1_OAEP_mgf1(to, tlen, from, flen, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 3 | ||||||||||||
11 | ((void *)0) executed 3 times by 1 test: return RSA_padding_add_PKCS1_OAEP_mgf1(to, tlen, from, flen, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 3 | ||||||||||||
12 | ); executed 3 times by 1 test: return RSA_padding_add_PKCS1_OAEP_mgf1(to, tlen, from, flen, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 3 | ||||||||||||
13 | } | - | ||||||||||||
14 | - | |||||||||||||
15 | int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, | - | ||||||||||||
16 | const unsigned char *from, int flen, | - | ||||||||||||
17 | const unsigned char *param, int plen, | - | ||||||||||||
18 | const EVP_MD *md, const EVP_MD *mgf1md) | - | ||||||||||||
19 | { | - | ||||||||||||
20 | int rv = 0; | - | ||||||||||||
21 | int i, emlen = tlen - 1; | - | ||||||||||||
22 | unsigned char *db, *seed; | - | ||||||||||||
23 | unsigned char *dbmask = | - | ||||||||||||
24 | ((void *)0) | - | ||||||||||||
25 | ; | - | ||||||||||||
26 | unsigned char seedmask[64]; | - | ||||||||||||
27 | int mdlen, dbmask_len = 0; | - | ||||||||||||
28 | - | |||||||||||||
29 | if (md ==
| 2-3 | ||||||||||||
30 | ((void *)0)
| 2-3 | ||||||||||||
31 | ) | - | ||||||||||||
32 | md = EVP_sha1(); executed 3 times by 1 test: md = EVP_sha1(); Executed by:
| 3 | ||||||||||||
33 | if (mgf1md ==
| 0-5 | ||||||||||||
34 | ((void *)0)
| 0-5 | ||||||||||||
35 | ) | - | ||||||||||||
36 | mgf1md = md; executed 5 times by 1 test: mgf1md = md; Executed by:
| 5 | ||||||||||||
37 | - | |||||||||||||
38 | mdlen = EVP_MD_size(md); | - | ||||||||||||
39 | - | |||||||||||||
40 | if (flen > emlen - 2 * mdlen - 1
| 0-5 | ||||||||||||
41 | ERR_put_error(4,(154),(110),__FILE__,62) | - | ||||||||||||
42 | ; | - | ||||||||||||
43 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
44 | } | - | ||||||||||||
45 | - | |||||||||||||
46 | if (emlen < 2 * mdlen + 1
| 0-5 | ||||||||||||
47 | ERR_put_error(4,(154),(120),__FILE__,68) | - | ||||||||||||
48 | ; | - | ||||||||||||
49 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
50 | } | - | ||||||||||||
51 | - | |||||||||||||
52 | to[0] = 0; | - | ||||||||||||
53 | seed = to + 1; | - | ||||||||||||
54 | db = to + mdlen + 1; | - | ||||||||||||
55 | - | |||||||||||||
56 | if (!EVP_Digest((void *)param, plen, db,
| 0-5 | ||||||||||||
57 | ((void *)0)
| 0-5 | ||||||||||||
58 | , md,
| 0-5 | ||||||||||||
59 | ((void *)0)
| 0-5 | ||||||||||||
60 | )
| 0-5 | ||||||||||||
61 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
62 | memset(db + mdlen, 0, emlen - flen - 2 * mdlen - 1); | - | ||||||||||||
63 | db[emlen - flen - mdlen - 1] = 0x01; | - | ||||||||||||
64 | memcpy(db + emlen - flen - mdlen, from, (unsigned int)flen); | - | ||||||||||||
65 | if (RAND_bytes(seed, mdlen) <= 0
| 0-5 | ||||||||||||
66 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
67 | - | |||||||||||||
68 | dbmask_len = emlen - mdlen; | - | ||||||||||||
69 | dbmask = CRYPTO_malloc(dbmask_len, __FILE__, 85); | - | ||||||||||||
70 | if (dbmask ==
| 0-5 | ||||||||||||
71 | ((void *)0)
| 0-5 | ||||||||||||
72 | ) { | - | ||||||||||||
73 | ERR_put_error(4,(154),((1|64)),__FILE__,87); | - | ||||||||||||
74 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
75 | } | - | ||||||||||||
76 | - | |||||||||||||
77 | if (PKCS1_MGF1(dbmask, dbmask_len, seed, mdlen, mgf1md) < 0
| 0-5 | ||||||||||||
78 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
79 | for (i = 0; i < dbmask_len
| 5-637 | ||||||||||||
80 | db[i] ^= dbmask[i]; executed 637 times by 1 test: db[i] ^= dbmask[i]; Executed by:
| 637 | ||||||||||||
81 | - | |||||||||||||
82 | if (PKCS1_MGF1(seedmask, mdlen, db, dbmask_len, mgf1md) < 0
| 0-5 | ||||||||||||
83 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
84 | for (i = 0; i < mdlen
| 5-112 | ||||||||||||
85 | seed[i] ^= seedmask[i]; executed 112 times by 1 test: seed[i] ^= seedmask[i]; Executed by:
| 112 | ||||||||||||
86 | rv = 1; | - | ||||||||||||
87 | - | |||||||||||||
88 | err: code before this statement executed 5 times by 1 test: err: Executed by:
| 5 | ||||||||||||
89 | OPENSSL_cleanse(seedmask, sizeof(seedmask)); | - | ||||||||||||
90 | CRYPTO_clear_free(dbmask, dbmask_len, __FILE__, 104); | - | ||||||||||||
91 | return executed 5 times by 1 test: rv;return rv; Executed by:
executed 5 times by 1 test: return rv; Executed by:
| 5 | ||||||||||||
92 | } | - | ||||||||||||
93 | - | |||||||||||||
94 | int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, | - | ||||||||||||
95 | const unsigned char *from, int flen, int num, | - | ||||||||||||
96 | const unsigned char *param, int plen) | - | ||||||||||||
97 | { | - | ||||||||||||
98 | return executed 490 times by 1 test: RSA_padding_check_PKCS1_OAEP_mgf1(to, tlen, from, flen, num,return RSA_padding_check_PKCS1_OAEP_mgf1(to, tlen, from, flen, num, param, plen, ((void *)0) , ((void *)0) ); Executed by:
executed 490 times by 1 test: return RSA_padding_check_PKCS1_OAEP_mgf1(to, tlen, from, flen, num, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 490 | ||||||||||||
99 | param, plen, executed 490 times by 1 test: return RSA_padding_check_PKCS1_OAEP_mgf1(to, tlen, from, flen, num, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 490 | ||||||||||||
100 | ((void *)0) executed 490 times by 1 test: return RSA_padding_check_PKCS1_OAEP_mgf1(to, tlen, from, flen, num, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 490 | ||||||||||||
101 | , executed 490 times by 1 test: return RSA_padding_check_PKCS1_OAEP_mgf1(to, tlen, from, flen, num, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 490 | ||||||||||||
102 | ((void *)0) executed 490 times by 1 test: return RSA_padding_check_PKCS1_OAEP_mgf1(to, tlen, from, flen, num, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 490 | ||||||||||||
103 | ); executed 490 times by 1 test: return RSA_padding_check_PKCS1_OAEP_mgf1(to, tlen, from, flen, num, param, plen, ((void *)0) , ((void *)0) ); Executed by:
| 490 | ||||||||||||
104 | } | - | ||||||||||||
105 | - | |||||||||||||
106 | int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, | - | ||||||||||||
107 | const unsigned char *from, int flen, | - | ||||||||||||
108 | int num, const unsigned char *param, | - | ||||||||||||
109 | int plen, const EVP_MD *md, | - | ||||||||||||
110 | const EVP_MD *mgf1md) | - | ||||||||||||
111 | { | - | ||||||||||||
112 | int i, dblen = 0, mlen = -1, one_index = 0, msg_index; | - | ||||||||||||
113 | unsigned int good, found_one_byte; | - | ||||||||||||
114 | const unsigned char *maskedseed, *maskeddb; | - | ||||||||||||
115 | - | |||||||||||||
116 | - | |||||||||||||
117 | - | |||||||||||||
118 | - | |||||||||||||
119 | unsigned char *db = | - | ||||||||||||
120 | ((void *)0) | - | ||||||||||||
121 | , *em = | - | ||||||||||||
122 | ((void *)0) | - | ||||||||||||
123 | , seed[64], | - | ||||||||||||
124 | phash[64]; | - | ||||||||||||
125 | int mdlen; | - | ||||||||||||
126 | - | |||||||||||||
127 | if (md ==
| 64-490 | ||||||||||||
128 | ((void *)0)
| 64-490 | ||||||||||||
129 | ) | - | ||||||||||||
130 | md = EVP_sha1(); executed 490 times by 1 test: md = EVP_sha1(); Executed by:
| 490 | ||||||||||||
131 | if (mgf1md ==
| 62-492 | ||||||||||||
132 | ((void *)0)
| 62-492 | ||||||||||||
133 | ) | - | ||||||||||||
134 | mgf1md = md; executed 492 times by 1 test: mgf1md = md; Executed by:
| 492 | ||||||||||||
135 | - | |||||||||||||
136 | mdlen = EVP_MD_size(md); | - | ||||||||||||
137 | - | |||||||||||||
138 | if (tlen <= 0
| 0-554 | ||||||||||||
139 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||
140 | if (num < flen
| 0-554 | ||||||||||||
141 | goto never executed: decoding_err;goto decoding_err; never executed: goto decoding_err; | 0 | ||||||||||||
142 | - | |||||||||||||
143 | dblen = num - mdlen - 1; | - | ||||||||||||
144 | db = CRYPTO_malloc(dblen, __FILE__, 154); | - | ||||||||||||
145 | if (db ==
| 0-554 | ||||||||||||
146 | ((void *)0)
| 0-554 | ||||||||||||
147 | ) { | - | ||||||||||||
148 | ERR_put_error(4,(153),((1|64)),__FILE__,156); | - | ||||||||||||
149 | goto never executed: cleanup;goto cleanup; never executed: goto cleanup; | 0 | ||||||||||||
150 | } | - | ||||||||||||
151 | - | |||||||||||||
152 | if (flen != num
| 0-554 | ||||||||||||
153 | em = CRYPTO_zalloc(num, __FILE__, 161); | - | ||||||||||||
154 | if (em ==
| 0 | ||||||||||||
155 | ((void *)0)
| 0 | ||||||||||||
156 | ) { | - | ||||||||||||
157 | ERR_put_error(4,(153),((1|64)),__FILE__,164) | - | ||||||||||||
158 | ; | - | ||||||||||||
159 | goto never executed: cleanup;goto cleanup; never executed: goto cleanup; | 0 | ||||||||||||
160 | } | - | ||||||||||||
161 | memcpy(em + num - flen, from, flen); | - | ||||||||||||
162 | from = em; | - | ||||||||||||
163 | } never executed: end of block | 0 | ||||||||||||
164 | - | |||||||||||||
165 | - | |||||||||||||
166 | - | |||||||||||||
167 | - | |||||||||||||
168 | - | |||||||||||||
169 | - | |||||||||||||
170 | good = constant_time_is_zero(from[0]); | - | ||||||||||||
171 | - | |||||||||||||
172 | maskedseed = from + 1; | - | ||||||||||||
173 | maskeddb = from + 1 + mdlen; | - | ||||||||||||
174 | - | |||||||||||||
175 | if (PKCS1_MGF1(seed, mdlen, maskeddb, dblen, mgf1md)
| 0-554 | ||||||||||||
176 | goto never executed: cleanup;goto cleanup; never executed: goto cleanup; | 0 | ||||||||||||
177 | for (i = 0; i < mdlen
| 554-11092 | ||||||||||||
178 | seed[i] ^= maskedseed[i]; executed 11092 times by 1 test: seed[i] ^= maskedseed[i]; Executed by:
| 11092 | ||||||||||||
179 | - | |||||||||||||
180 | if (PKCS1_MGF1(db, dblen, seed, mdlen, mgf1md)
| 0-554 | ||||||||||||
181 | goto never executed: cleanup;goto cleanup; never executed: goto cleanup; | 0 | ||||||||||||
182 | for (i = 0; i < dblen
| 554-44696 | ||||||||||||
183 | db[i] ^= maskeddb[i]; executed 44696 times by 1 test: db[i] ^= maskeddb[i]; Executed by:
| 44696 | ||||||||||||
184 | - | |||||||||||||
185 | if (!EVP_Digest((void *)param, plen, phash,
| 0-554 | ||||||||||||
186 | ((void *)0)
| 0-554 | ||||||||||||
187 | , md,
| 0-554 | ||||||||||||
188 | ((void *)0)
| 0-554 | ||||||||||||
189 | )
| 0-554 | ||||||||||||
190 | goto never executed: cleanup;goto cleanup; never executed: goto cleanup; | 0 | ||||||||||||
191 | - | |||||||||||||
192 | good &= constant_time_is_zero(CRYPTO_memcmp(db, phash, mdlen)); | - | ||||||||||||
193 | - | |||||||||||||
194 | found_one_byte = 0; | - | ||||||||||||
195 | for (i = mdlen; i < dblen
| 554-33604 | ||||||||||||
196 | - | |||||||||||||
197 | - | |||||||||||||
198 | - | |||||||||||||
199 | unsigned int equals1 = constant_time_eq(db[i], 1); | - | ||||||||||||
200 | unsigned int equals0 = constant_time_is_zero(db[i]); | - | ||||||||||||
201 | one_index = constant_time_select_int(~found_one_byte & equals1, | - | ||||||||||||
202 | i, one_index); | - | ||||||||||||
203 | found_one_byte |= equals1; | - | ||||||||||||
204 | good &= (found_one_byte | equals0); | - | ||||||||||||
205 | } executed 33604 times by 1 test: end of block Executed by:
| 33604 | ||||||||||||
206 | - | |||||||||||||
207 | good &= found_one_byte; | - | ||||||||||||
208 | - | |||||||||||||
209 | - | |||||||||||||
210 | - | |||||||||||||
211 | - | |||||||||||||
212 | - | |||||||||||||
213 | - | |||||||||||||
214 | if (!good
| 69-485 | ||||||||||||
215 | goto executed 485 times by 1 test: decoding_err;goto decoding_err; Executed by:
executed 485 times by 1 test: goto decoding_err; Executed by:
| 485 | ||||||||||||
216 | - | |||||||||||||
217 | msg_index = one_index + 1; | - | ||||||||||||
218 | mlen = dblen - msg_index; | - | ||||||||||||
219 | - | |||||||||||||
220 | if (tlen < mlen
| 0-69 | ||||||||||||
221 | ERR_put_error(4,(153),(109),__FILE__,232); | - | ||||||||||||
222 | mlen = -1; | - | ||||||||||||
223 | } never executed: else {end of block | 0 | ||||||||||||
224 | memcpy(to, db + msg_index, mlen); | - | ||||||||||||
225 | goto executed 69 times by 1 test: cleanup;goto cleanup; Executed by:
executed 69 times by 1 test: goto cleanup; Executed by:
| 69 | ||||||||||||
226 | } | - | ||||||||||||
227 | - | |||||||||||||
228 | decoding_err: code before this statement never executed: decoding_err: | 0 | ||||||||||||
229 | - | |||||||||||||
230 | - | |||||||||||||
231 | - | |||||||||||||
232 | - | |||||||||||||
233 | ERR_put_error(4,(153),(121),__FILE__,245) | - | ||||||||||||
234 | ; | - | ||||||||||||
235 | cleanup: code before this statement executed 485 times by 1 test: cleanup: Executed by:
| 485 | ||||||||||||
236 | OPENSSL_cleanse(seed, sizeof(seed)); | - | ||||||||||||
237 | CRYPTO_clear_free(db, dblen, __FILE__, 248); | - | ||||||||||||
238 | CRYPTO_clear_free(em, num, __FILE__, 249); | - | ||||||||||||
239 | return executed 554 times by 1 test: mlen;return mlen; Executed by:
executed 554 times by 1 test: return mlen; Executed by:
| 554 | ||||||||||||
240 | } | - | ||||||||||||
241 | - | |||||||||||||
242 | int PKCS1_MGF1(unsigned char *mask, long len, | - | ||||||||||||
243 | const unsigned char *seed, long seedlen, const EVP_MD *dgst) | - | ||||||||||||
244 | { | - | ||||||||||||
245 | long i, outlen = 0; | - | ||||||||||||
246 | unsigned char cnt[4]; | - | ||||||||||||
247 | EVP_MD_CTX *c = EVP_MD_CTX_new(); | - | ||||||||||||
248 | unsigned char md[64]; | - | ||||||||||||
249 | int mdlen; | - | ||||||||||||
250 | int rv = -1; | - | ||||||||||||
251 | - | |||||||||||||
252 | if (c ==
| 0-3210 | ||||||||||||
253 | ((void *)0)
| 0-3210 | ||||||||||||
254 | ) | - | ||||||||||||
255 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
256 | mdlen = EVP_MD_size(dgst); | - | ||||||||||||
257 | if (mdlen < 0
| 0-3210 | ||||||||||||
258 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
259 | for (i = 0; outlen < len
| 3210-17739 | ||||||||||||
260 | cnt[0] = (unsigned char)((i >> 24) & 255); | - | ||||||||||||
261 | cnt[1] = (unsigned char)((i >> 16) & 255); | - | ||||||||||||
262 | cnt[2] = (unsigned char)((i >> 8)) & 255; | - | ||||||||||||
263 | cnt[3] = (unsigned char)(i & 255); | - | ||||||||||||
264 | if (!EVP_DigestInit_ex(c, dgst,
| 0-17739 | ||||||||||||
265 | ((void *)0)
| 0-17739 | ||||||||||||
266 | )
| 0-17739 | ||||||||||||
267 | || !EVP_DigestUpdate(c, seed, seedlen)
| 0-17739 | ||||||||||||
268 | || !EVP_DigestUpdate(c, cnt, 4)
| 0-17739 | ||||||||||||
269 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
270 | if (outlen + mdlen <= len
| 2649-15090 | ||||||||||||
271 | if (!EVP_DigestFinal_ex(c, mask + outlen,
| 0-15090 | ||||||||||||
272 | ((void *)0)
| 0-15090 | ||||||||||||
273 | )
| 0-15090 | ||||||||||||
274 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
275 | outlen += mdlen; | - | ||||||||||||
276 | } executed 15090 times by 1 test: else {end of block Executed by:
| 15090 | ||||||||||||
277 | if (!EVP_DigestFinal_ex(c, md,
| 0-2649 | ||||||||||||
278 | ((void *)0)
| 0-2649 | ||||||||||||
279 | )
| 0-2649 | ||||||||||||
280 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
281 | memcpy(mask + outlen, md, len - outlen); | - | ||||||||||||
282 | outlen = len; | - | ||||||||||||
283 | } executed 2649 times by 1 test: end of block Executed by:
| 2649 | ||||||||||||
284 | } | - | ||||||||||||
285 | rv = 0; | - | ||||||||||||
286 | err: code before this statement executed 3210 times by 1 test: err: Executed by:
| 3210 | ||||||||||||
287 | OPENSSL_cleanse(md, sizeof(md)); | - | ||||||||||||
288 | EVP_MD_CTX_free(c); | - | ||||||||||||
289 | return executed 3210 times by 1 test: rv;return rv; Executed by:
executed 3210 times by 1 test: return rv; Executed by:
| 3210 | ||||||||||||
290 | } | - | ||||||||||||
Switch to Source code | Preprocessed file |