Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/rsa/rsa_oaep.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | - | |||||||||||||
4 | - | |||||||||||||
5 | - | |||||||||||||
6 | static int MGF1(unsigned char *mask, long len, const unsigned char *seed, | - | ||||||||||||
7 | long seedlen); | - | ||||||||||||
8 | - | |||||||||||||
9 | int | - | ||||||||||||
10 | RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, | - | ||||||||||||
11 | const unsigned char *from, int flen, const unsigned char *param, int plen) | - | ||||||||||||
12 | { | - | ||||||||||||
13 | int i, emlen = tlen - 1; | - | ||||||||||||
14 | unsigned char *db, *seed; | - | ||||||||||||
15 | unsigned char *dbmask, seedmask[20]; | - | ||||||||||||
16 | - | |||||||||||||
17 | if (flen > emlen - 2 * 20 - 1
| 0-3 | ||||||||||||
18 | ERR_put_error(4,(0xfff),(110),__FILE__,47); | - | ||||||||||||
19 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
20 | } | - | ||||||||||||
21 | - | |||||||||||||
22 | if (emlen < 2 * 20 + 1
| 0-3 | ||||||||||||
23 | ERR_put_error(4,(0xfff),(120),__FILE__,52); | - | ||||||||||||
24 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
25 | } | - | ||||||||||||
26 | - | |||||||||||||
27 | to[0] = 0; | - | ||||||||||||
28 | seed = to + 1; | - | ||||||||||||
29 | db = to + 20 + 1; | - | ||||||||||||
30 | - | |||||||||||||
31 | if (!EVP_Digest((void *)param, plen, db,
| 0-3 | ||||||||||||
32 | ((void *)0)
| 0-3 | ||||||||||||
33 | , EVP_sha1(),
| 0-3 | ||||||||||||
34 | ((void *)0)
| 0-3 | ||||||||||||
35 | )
| 0-3 | ||||||||||||
36 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
37 | memset(db + 20, 0, | - | ||||||||||||
38 | emlen - flen - 2 * 20 - 1); | - | ||||||||||||
39 | db[emlen - flen - 20 - 1] = 0x01; | - | ||||||||||||
40 | memcpy(db + emlen - flen - 20, from, flen); | - | ||||||||||||
41 | arc4random_buf(seed, 20); | - | ||||||||||||
42 | - | |||||||||||||
43 | dbmask = malloc(emlen - 20); | - | ||||||||||||
44 | if (dbmask ==
| 0-3 | ||||||||||||
45 | ((void *)0)
| 0-3 | ||||||||||||
46 | ) { | - | ||||||||||||
47 | ERR_put_error(4,(0xfff),((1|64)),__FILE__,70); | - | ||||||||||||
48 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
49 | } | - | ||||||||||||
50 | - | |||||||||||||
51 | if (MGF1(dbmask, emlen - 20, seed,
| 0-3 | ||||||||||||
52 | 20) < 0
| 0-3 | ||||||||||||
53 | free(dbmask); | - | ||||||||||||
54 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
55 | } | - | ||||||||||||
56 | for (i = 0; i < emlen - 20
| 3-179 | ||||||||||||
57 | db[i] ^= dbmask[i]; executed 179 times by 1 test: db[i] ^= dbmask[i]; Executed by:
| 179 | ||||||||||||
58 | - | |||||||||||||
59 | if (MGF1(seedmask, 20, db,
| 0-3 | ||||||||||||
60 | emlen - 20) < 0
| 0-3 | ||||||||||||
61 | free(dbmask); | - | ||||||||||||
62 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
63 | } | - | ||||||||||||
64 | for (i = 0; i < 20
| 3-60 | ||||||||||||
65 | seed[i] ^= seedmask[i]; executed 60 times by 1 test: seed[i] ^= seedmask[i]; Executed by:
| 60 | ||||||||||||
66 | - | |||||||||||||
67 | free(dbmask); | - | ||||||||||||
68 | return executed 3 times by 1 test: 1;return 1; Executed by:
executed 3 times by 1 test: return 1; Executed by:
| 3 | ||||||||||||
69 | } | - | ||||||||||||
70 | - | |||||||||||||
71 | int | - | ||||||||||||
72 | RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, | - | ||||||||||||
73 | const unsigned char *from, int flen, int num, const unsigned char *param, | - | ||||||||||||
74 | int plen) | - | ||||||||||||
75 | { | - | ||||||||||||
76 | int i, dblen, mlen = -1; | - | ||||||||||||
77 | const unsigned char *maskeddb; | - | ||||||||||||
78 | int lzero; | - | ||||||||||||
79 | unsigned char *db = | - | ||||||||||||
80 | ((void *)0) | - | ||||||||||||
81 | ; | - | ||||||||||||
82 | unsigned char seed[20], phash[20]; | - | ||||||||||||
83 | unsigned char *padded_from; | - | ||||||||||||
84 | int bad = 0; | - | ||||||||||||
85 | - | |||||||||||||
86 | if (--
| 0-490 | ||||||||||||
87 | - | |||||||||||||
88 | - | |||||||||||||
89 | - | |||||||||||||
90 | - | |||||||||||||
91 | goto never executed: decoding_err;goto decoding_err; never executed: goto decoding_err; | 0 | ||||||||||||
92 | - | |||||||||||||
93 | lzero = num - flen; | - | ||||||||||||
94 | if (lzero < 0
| 10-480 | ||||||||||||
95 | - | |||||||||||||
96 | - | |||||||||||||
97 | - | |||||||||||||
98 | - | |||||||||||||
99 | - | |||||||||||||
100 | - | |||||||||||||
101 | - | |||||||||||||
102 | bad = 1; | - | ||||||||||||
103 | lzero = 0; | - | ||||||||||||
104 | flen = num; | - | ||||||||||||
105 | } executed 480 times by 1 test: end of block Executed by:
| 480 | ||||||||||||
106 | - | |||||||||||||
107 | dblen = num - 20; | - | ||||||||||||
108 | if ((
| 0-490 | ||||||||||||
109 | ((void *)0)
| 0-490 | ||||||||||||
110 | ) { | - | ||||||||||||
111 | ERR_put_error(4,(0xfff),((1|64)),__FILE__,130); | - | ||||||||||||
112 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||
113 | } | - | ||||||||||||
114 | - | |||||||||||||
115 | - | |||||||||||||
116 | - | |||||||||||||
117 | - | |||||||||||||
118 | - | |||||||||||||
119 | padded_from = db + dblen; | - | ||||||||||||
120 | memset(padded_from, 0, lzero); | - | ||||||||||||
121 | memcpy(padded_from + lzero, from, flen); | - | ||||||||||||
122 | - | |||||||||||||
123 | maskeddb = padded_from + 20; | - | ||||||||||||
124 | - | |||||||||||||
125 | if (MGF1(seed, 20, maskeddb, dblen)
| 0-490 | ||||||||||||
126 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
127 | for (i = 0; i < 20
| 490-9800 | ||||||||||||
128 | seed[i] ^= padded_from[i]; executed 9800 times by 1 test: seed[i] ^= padded_from[i]; Executed by:
| 9800 | ||||||||||||
129 | - | |||||||||||||
130 | if (MGF1(db, dblen, seed, 20)
| 0-490 | ||||||||||||
131 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
132 | for (i = 0; i < dblen
| 490-36154 | ||||||||||||
133 | db[i] ^= maskeddb[i]; executed 36154 times by 1 test: db[i] ^= maskeddb[i]; Executed by:
| 36154 | ||||||||||||
134 | - | |||||||||||||
135 | if (!EVP_Digest((void *)param, plen, phash,
| 0-490 | ||||||||||||
136 | ((void *)0)
| 0-490 | ||||||||||||
137 | , EVP_sha1(),
| 0-490 | ||||||||||||
138 | ((void *)0)
| 0-490 | ||||||||||||
139 | )
| 0-490 | ||||||||||||
140 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
141 | - | |||||||||||||
142 | if (timingsafe_memcmp(db, phash, 20) != 0
| 0-484 | ||||||||||||
143 | goto executed 484 times by 1 test: decoding_err;goto decoding_err; Executed by:
executed 484 times by 1 test: goto decoding_err; Executed by:
| 484 | ||||||||||||
144 | else { | - | ||||||||||||
145 | for (i = 20; i < dblen
| 0-190 | ||||||||||||
146 | if (db[i] != 0x00
| 6-184 | ||||||||||||
147 | break; executed 6 times by 1 test: break; Executed by:
| 6 | ||||||||||||
148 | if (i == dblen
| 0-6 | ||||||||||||
149 | goto never executed: decoding_err;goto decoding_err; never executed: goto decoding_err; | 0 | ||||||||||||
150 | else { | - | ||||||||||||
151 | - | |||||||||||||
152 | - | |||||||||||||
153 | mlen = dblen - ++i; | - | ||||||||||||
154 | if (tlen < mlen
| 0-6 | ||||||||||||
155 | ERR_put_error(4,(0xfff),(109),__FILE__,170); | - | ||||||||||||
156 | mlen = -1; | - | ||||||||||||
157 | } never executed: elseend of block | 0 | ||||||||||||
158 | memcpy(to, db + i, mlen); executed 6 times by 1 test: memcpy(to, db + i, mlen); Executed by:
| 6 | ||||||||||||
159 | } | - | ||||||||||||
160 | } | - | ||||||||||||
161 | free(db); | - | ||||||||||||
162 | return executed 6 times by 1 test: mlen;return mlen; Executed by:
executed 6 times by 1 test: return mlen; Executed by:
| 6 | ||||||||||||
163 | - | |||||||||||||
164 | decoding_err: | - | ||||||||||||
165 | - | |||||||||||||
166 | - | |||||||||||||
167 | - | |||||||||||||
168 | - | |||||||||||||
169 | ERR_put_error(4,(0xfff),(121),__FILE__,184); | - | ||||||||||||
170 | err: code before this statement executed 484 times by 1 test: err: Executed by:
| 484 | ||||||||||||
171 | free(db); | - | ||||||||||||
172 | return executed 484 times by 1 test: -1;return -1; Executed by:
executed 484 times by 1 test: return -1; Executed by:
| 484 | ||||||||||||
173 | } | - | ||||||||||||
174 | - | |||||||||||||
175 | int | - | ||||||||||||
176 | PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, | - | ||||||||||||
177 | long seedlen, const EVP_MD *dgst) | - | ||||||||||||
178 | { | - | ||||||||||||
179 | long i, outlen = 0; | - | ||||||||||||
180 | unsigned char cnt[4]; | - | ||||||||||||
181 | EVP_MD_CTX c; | - | ||||||||||||
182 | unsigned char md[64]; | - | ||||||||||||
183 | int mdlen; | - | ||||||||||||
184 | int rv = -1; | - | ||||||||||||
185 | - | |||||||||||||
186 | EVP_MD_CTX_init(&c); | - | ||||||||||||
187 | mdlen = EVP_MD_size(dgst); | - | ||||||||||||
188 | if (mdlen < 0
| 0-986 | ||||||||||||
189 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
190 | for (i = 0; outlen < len
| 986-2646 | ||||||||||||
191 | cnt[0] = (unsigned char)((i >> 24) & 255); | - | ||||||||||||
192 | cnt[1] = (unsigned char)((i >> 16) & 255); | - | ||||||||||||
193 | cnt[2] = (unsigned char)((i >> 8)) & 255; | - | ||||||||||||
194 | cnt[3] = (unsigned char)(i & 255); | - | ||||||||||||
195 | if (!EVP_DigestInit_ex(&c, dgst,
| 0-2646 | ||||||||||||
196 | ((void *)0)
| 0-2646 | ||||||||||||
197 | )
| 0-2646 | ||||||||||||
198 | !EVP_DigestUpdate(&c, seed, seedlen)
| 0-2646 | ||||||||||||
199 | !EVP_DigestUpdate(&c, cnt, 4)
| 0-2646 | ||||||||||||
200 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
201 | if (outlen + mdlen <= len
| 493-2153 | ||||||||||||
202 | if (!EVP_DigestFinal_ex(&c, mask + outlen,
| 0-2153 | ||||||||||||
203 | ((void *)0)
| 0-2153 | ||||||||||||
204 | )
| 0-2153 | ||||||||||||
205 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
206 | outlen += mdlen; | - | ||||||||||||
207 | } executed 2153 times by 1 test: else {end of block Executed by:
| 2153 | ||||||||||||
208 | if (!EVP_DigestFinal_ex(&c, md,
| 0-493 | ||||||||||||
209 | ((void *)0)
| 0-493 | ||||||||||||
210 | )
| 0-493 | ||||||||||||
211 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
212 | memcpy(mask + outlen, md, len - outlen); | - | ||||||||||||
213 | outlen = len; | - | ||||||||||||
214 | } executed 493 times by 1 test: end of block Executed by:
| 493 | ||||||||||||
215 | } | - | ||||||||||||
216 | rv = 0; | - | ||||||||||||
217 | err: code before this statement executed 986 times by 1 test: err: Executed by:
| 986 | ||||||||||||
218 | EVP_MD_CTX_cleanup(&c); | - | ||||||||||||
219 | return executed 986 times by 1 test: rv;return rv; Executed by:
executed 986 times by 1 test: return rv; Executed by:
| 986 | ||||||||||||
220 | } | - | ||||||||||||
221 | - | |||||||||||||
222 | static int | - | ||||||||||||
223 | MGF1(unsigned char *mask, long len, const unsigned char *seed, long seedlen) | - | ||||||||||||
224 | { | - | ||||||||||||
225 | return executed 986 times by 1 test: PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1());return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1()); Executed by:
executed 986 times by 1 test: return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1()); Executed by:
| 986 | ||||||||||||
226 | } | - | ||||||||||||
Switch to Source code | Preprocessed file |