OpenCoverage

pvkfmt.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/pem/pvkfmt.c
Switch to Source codePreprocessed file
LineSourceCount
1static unsigned int read_ledword(const unsigned char **in)-
2{-
3 const unsigned char *p = *in;-
4 unsigned int ret;-
5 ret = *p++;-
6 ret |= (*p++ << 8);-
7 ret |= (*p++ << 16);-
8 ret |= (*p++ << 24);-
9 *in = p;-
10 return
executed 15 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
ret;
executed 15 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
15
11}-
12-
13-
14-
15-
16-
17-
18static int read_lebn(const unsigned char **in, unsigned int nbyte, BIGNUM **r)-
19{-
20 *r = BN_lebin2bn(*in, nbyte, -
21 ((void *)0)-
22 );-
23 if (*
*r == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
r ==
*r == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-15
24 ((void *)0)
*r == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-15
25 )-
26 return
never executed: return 0;
0;
never executed: return 0;
0
27 *in += nbyte;-
28 return
executed 15 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
1;
executed 15 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
15
29}-
30static EVP_PKEY *b2i_rsa(const unsigned char **in,-
31 unsigned int bitlen, int ispub);-
32static EVP_PKEY *b2i_dss(const unsigned char **in,-
33 unsigned int bitlen, int ispub);-
34-
35static int do_blob_header(const unsigned char **in, unsigned int length,-
36 unsigned int *pmagic, unsigned int *pbitlen,-
37 int *pisdss, int *pispub)-
38{-
39 const unsigned char *p = *in;-
40 if (length < 16
length < 16Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-6
41 return
never executed: return 0;
0;
never executed: return 0;
0
42-
43 if (*
*p == 0x6Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
p == 0x6
*p == 0x6Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
) {
0-6
44 if (*
*pispub == 0Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
pispub == 0
*pispub == 0Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-6
45 ERR_put_error(9,(134),(119),__FILE__,96);-
46 return
never executed: return 0;
0;
never executed: return 0;
0
47 }-
48 *pispub = 1;-
49 }
executed 6 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
else if (*
*p == 0x7Description
TRUEnever evaluated
FALSEnever evaluated
p == 0x7
*p == 0x7Description
TRUEnever evaluated
FALSEnever evaluated
) {
0-6
50 if (*
*pispub == 1Description
TRUEnever evaluated
FALSEnever evaluated
pispub == 1
*pispub == 1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
51 ERR_put_error(9,(134),(120),__FILE__,102);-
52 return
never executed: return 0;
0;
never executed: return 0;
0
53 }-
54 *pispub = 0;-
55 }
never executed: end of block
else
0
56 return
never executed: return 0;
0;
never executed: return 0;
0
57 p++;-
58-
59 if (*
*p++ != 0x2Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
p++ != 0x2
*p++ != 0x2Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-6
60 ERR_put_error(9,(134),(117),__FILE__,111);-
61 return
never executed: return 0;
0;
never executed: return 0;
0
62 }-
63-
64 p += 6;-
65 *pmagic = read_ledword(&p);-
66 *pbitlen = read_ledword(&p);-
67 *pisdss = 0;-
68 switch (*pmagic) {-
69-
70 case
executed 3 times by 1 test: case 0x31535344L:
Executed by:
  • libcrypto.so.1.1
0x31535344L:
executed 3 times by 1 test: case 0x31535344L:
Executed by:
  • libcrypto.so.1.1
3
71 *pisdss = 1;-
72-
73 case
executed 3 times by 1 test: case 0x31415352L:
Executed by:
  • libcrypto.so.1.1
0x31415352L:
executed 3 times by 1 test: case 0x31415352L:
Executed by:
  • libcrypto.so.1.1
code before this statement executed 3 times by 1 test: case 0x31415352L:
Executed by:
  • libcrypto.so.1.1
3
74 if (*
*pispub == 0Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
pispub == 0
*pispub == 0Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-6
75 ERR_put_error(9,(134),(119),__FILE__,126);-
76 return
never executed: return 0;
0;
never executed: return 0;
0
77 }-
78 break;
executed 6 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
6
79-
80 case
never executed: case 0x32535344L:
0x32535344L:
never executed: case 0x32535344L:
0
81 *pisdss = 1;-
82-
83 case
never executed: case 0x32415352L:
0x32415352L:
never executed: case 0x32415352L:
code before this statement never executed: case 0x32415352L:
0
84 if (*
*pispub == 1Description
TRUEnever evaluated
FALSEnever evaluated
pispub == 1
*pispub == 1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
85 ERR_put_error(9,(134),(120),__FILE__,136);-
86 return
never executed: return 0;
0;
never executed: return 0;
0
87 }-
88 break;
never executed: break;
0
89-
90 default
never executed: default:
:
never executed: default:
0
91 ERR_put_error(9,(134),(116),__FILE__,142);-
92 return
never executed: return -1;
-1;
never executed: return -1;
0
93 }-
94 *in = p;-
95 return
executed 6 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
1;
executed 6 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
6
96}-
97-
98static unsigned int blob_length(unsigned bitlen, int isdss, int ispub)-
99{-
100 unsigned int nbyte, hnbyte;-
101 nbyte = (bitlen + 7) >> 3;-
102 hnbyte = (bitlen + 15) >> 4;-
103 if (isdss
isdssDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
7
104-
105-
106-
107-
108-
109 if (ispub
ispubDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
)
0-7
110 return
executed 7 times by 1 test: return 44 + 3 * nbyte;
Executed by:
  • libcrypto.so.1.1
44 + 3 * nbyte;
executed 7 times by 1 test: return 44 + 3 * nbyte;
Executed by:
  • libcrypto.so.1.1
7
111-
112-
113-
114-
115 else-
116 return
never executed: return 64 + 2 * nbyte;
64 + 2 * nbyte;
never executed: return 64 + 2 * nbyte;
0
117 } else {-
118-
119 if (ispub
ispubDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
)
0-7
120 return
executed 7 times by 1 test: return 4 + nbyte;
Executed by:
  • libcrypto.so.1.1
4 + nbyte;
executed 7 times by 1 test: return 4 + nbyte;
Executed by:
  • libcrypto.so.1.1
7
121 else-
122-
123-
124-
125-
126 return
never executed: return 4 + 2 * nbyte + 5 * hnbyte;
4 + 2 * nbyte + 5 * hnbyte;
never executed: return 4 + 2 * nbyte + 5 * hnbyte;
0
127 }-
128-
129}-
130-
131static EVP_PKEY *do_b2i(const unsigned char **in, unsigned int length,-
132 int ispub)-
133{-
134 const unsigned char *p = *in;-
135 unsigned int bitlen, magic;-
136 int isdss;-
137 if (do_blob_header(&p, length, &magic, &bitlen, &isdss, &ispub) <= 0
do_blob_header..., &ispub) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
138 ERR_put_error(9,(132),(122),__FILE__,189);-
139 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
140 ((void *)0)
never executed: return ((void *)0) ;
0
141 ;
never executed: return ((void *)0) ;
0
142 }-
143 length -= 16;-
144 if (length < blob_length(bitlen, isdss, ispub)
length < blob_... isdss, ispub)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
145 ERR_put_error(9,(132),(123),__FILE__,194);-
146 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
147 ((void *)0)
never executed: return ((void *)0) ;
0
148 ;
never executed: return ((void *)0) ;
0
149 }-
150 if (isdss
isdssDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
151 return
never executed: return b2i_dss(&p, bitlen, ispub);
b2i_dss(&p, bitlen, ispub);
never executed: return b2i_dss(&p, bitlen, ispub);
0
152 else-
153 return
never executed: return b2i_rsa(&p, bitlen, ispub);
b2i_rsa(&p, bitlen, ispub);
never executed: return b2i_rsa(&p, bitlen, ispub);
0
154}-
155-
156static EVP_PKEY *do_b2i_bio(BIO *in, int ispub)-
157{-
158 const unsigned char *p;-
159 unsigned char hdr_buf[16], *buf = -
160 ((void *)0)-
161 ;-
162 unsigned int bitlen, magic, length;-
163 int isdss;-
164 EVP_PKEY *ret = -
165 ((void *)0)-
166 ;-
167 if (BIO_read(in, hdr_buf, 16) != 16
BIO_read(in, h...buf, 16) != 16Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-6
168 ERR_put_error(9,(133),(123),__FILE__,211);-
169 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
170 ((void *)0)
never executed: return ((void *)0) ;
0
171 ;
never executed: return ((void *)0) ;
0
172 }-
173 p = hdr_buf;-
174 if (do_blob_header(&p, 16, &magic, &bitlen, &isdss, &ispub) <= 0
do_blob_header..., &ispub) <= 0Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-6
175 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
176 ((void *)0)
never executed: return ((void *)0) ;
0
177 ;
never executed: return ((void *)0) ;
0
178-
179 length = blob_length(bitlen, isdss, ispub);-
180 if (length > 102400
length > 102400Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-6
181 ERR_put_error(9,(133),(128),__FILE__,220);-
182 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
183 ((void *)0)
never executed: return ((void *)0) ;
0
184 ;
never executed: return ((void *)0) ;
0
185 }-
186 buf = CRYPTO_malloc(length, __FILE__, 223);-
187 if (buf ==
buf == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-6
188 ((void *)0)
buf == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-6
189 ) {-
190 ERR_put_error(9,(133),((1|64)),__FILE__,225);-
191 goto
never executed: goto err;
err;
never executed: goto err;
0
192 }-
193 p = buf;-
194 if (BIO_read(in, buf, length) != (int)length
BIO_read(in, b...!= (int)lengthDescription
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-6
195 ERR_put_error(9,(133),(123),__FILE__,230);-
196 goto
never executed: goto err;
err;
never executed: goto err;
0
197 }-
198-
199 if (isdss
isdssDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
3
200 ret = b2i_dss(&p, bitlen, ispub);
executed 3 times by 1 test: ret = b2i_dss(&p, bitlen, ispub);
Executed by:
  • libcrypto.so.1.1
3
201 else-
202 ret = b2i_rsa(&p, bitlen, ispub);
executed 3 times by 1 test: ret = b2i_rsa(&p, bitlen, ispub);
Executed by:
  • libcrypto.so.1.1
3
203-
204 err:
code before this statement executed 6 times by 1 test: err:
Executed by:
  • libcrypto.so.1.1
6
205 CRYPTO_free(buf, __FILE__, 240);-
206 return
executed 6 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
ret;
executed 6 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
6
207}-
208-
209static EVP_PKEY *b2i_dss(const unsigned char **in,-
210 unsigned int bitlen, int ispub)-
211{-
212 const unsigned char *p = *in;-
213 EVP_PKEY *ret = -
214 ((void *)0)-
215 ;-
216 DSA *dsa = -
217 ((void *)0)-
218 ;-
219 BN_CTX *ctx = -
220 ((void *)0)-
221 ;-
222 unsigned int nbyte;-
223 BIGNUM *pbn = -
224 ((void *)0)-
225 , *qbn = -
226 ((void *)0)-
227 , *gbn = -
228 ((void *)0)-
229 , *priv_key = -
230 ((void *)0)-
231 ;-
232 BIGNUM *pub_key = -
233 ((void *)0)-
234 ;-
235-
236 nbyte = (bitlen + 7) >> 3;-
237-
238 dsa = DSA_new();-
239 ret = EVP_PKEY_new();-
240 if (dsa ==
dsa == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
241 ((void *)0)
dsa == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
242 || ret ==
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
243 ((void *)0)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
244 )-
245 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
246 if (!read_lebn(&p, nbyte, &pbn)
!read_lebn(&p, nbyte, &pbn)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
247 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
248-
249 if (!read_lebn(&p, 20, &qbn)
!read_lebn(&p, 20, &qbn)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
250 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
251-
252 if (!read_lebn(&p, nbyte, &gbn)
!read_lebn(&p, nbyte, &gbn)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
253 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
254-
255 if (ispub
ispubDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
) {
0-3
256 if (!read_lebn(&p, nbyte, &pub_key)
!read_lebn(&p,...yte, &pub_key)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
257 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
258 }
executed 3 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
else {
3
259 if (!read_lebn(&p, 20, &priv_key)
!read_lebn(&p, 20, &priv_key)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
260 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
261-
262-
263 pub_key = BN_new();-
264 if (pub_key ==
pub_key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
265 ((void *)0)
pub_key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
266 )-
267 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
268 if ((
(ctx = BN_CTX_...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
ctx = BN_CTX_new()) ==
(ctx = BN_CTX_...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
269 ((void *)0)
(ctx = BN_CTX_...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
270 )-
271 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
272-
273 if (!BN_mod_exp(pub_key, gbn, priv_key, pbn, ctx)
!BN_mod_exp(pu...key, pbn, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
274 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
275-
276 BN_CTX_free(ctx);-
277 ctx = -
278 ((void *)0)-
279 ;-
280 }
never executed: end of block
0
281 if (!DSA_set0_pqg(dsa, pbn, qbn, gbn)
!DSA_set0_pqg(...pbn, qbn, gbn)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
282 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
283 pbn = qbn = gbn = -
284 ((void *)0)-
285 ;-
286 if (!DSA_set0_key(dsa, pub_key, priv_key)
!DSA_set0_key(...key, priv_key)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
287 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
288 pub_key = priv_key = -
289 ((void *)0)-
290 ;-
291-
292 if (!EVP_PKEY_set1_DSA(ret, dsa)
!EVP_PKEY_set1_DSA(ret, dsa)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
293 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
294 DSA_free(dsa);-
295 *in = p;-
296 return
executed 3 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
ret;
executed 3 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
3
297-
298 memerr:-
299 ERR_put_error(9,(127),((1|64)),__FILE__,304);-
300 DSA_free(dsa);-
301 BN_free(pbn);-
302 BN_free(qbn);-
303 BN_free(gbn);-
304 BN_free(pub_key);-
305 BN_free(priv_key);-
306 EVP_PKEY_free(ret);-
307 BN_CTX_free(ctx);-
308 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
309 ((void *)0)
never executed: return ((void *)0) ;
0
310 ;
never executed: return ((void *)0) ;
0
311}-
312-
313static EVP_PKEY *b2i_rsa(const unsigned char **in,-
314 unsigned int bitlen, int ispub)-
315{-
316 const unsigned char *pin = *in;-
317 EVP_PKEY *ret = -
318 ((void *)0)-
319 ;-
320 BIGNUM *e = -
321 ((void *)0)-
322 , *n = -
323 ((void *)0)-
324 , *d = -
325 ((void *)0)-
326 ;-
327 BIGNUM *p = -
328 ((void *)0)-
329 , *q = -
330 ((void *)0)-
331 , *dmp1 = -
332 ((void *)0)-
333 , *dmq1 = -
334 ((void *)0)-
335 , *iqmp = -
336 ((void *)0)-
337 ;-
338 RSA *rsa = -
339 ((void *)0)-
340 ;-
341 unsigned int nbyte, hnbyte;-
342 nbyte = (bitlen + 7) >> 3;-
343 hnbyte = (bitlen + 15) >> 4;-
344 rsa = RSA_new();-
345 ret = EVP_PKEY_new();-
346 if (rsa ==
rsa == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
347 ((void *)0)
rsa == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
348 || ret ==
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
349 ((void *)0)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
350 )-
351 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
352 e = BN_new();-
353 if (e ==
e == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
354 ((void *)0)
e == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3
355 )-
356 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
357 if (!BN_set_word(e, read_ledword(&pin))
!BN_set_word(e...ledword(&pin))Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
358 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
359 if (!read_lebn(&pin, nbyte, &n)
!read_lebn(&pin, nbyte, &n)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
360 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
361 if (!ispub
!ispubDescription
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-3
362 if (!read_lebn(&pin, hnbyte, &p)
!read_lebn(&pin, hnbyte, &p)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
363 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
364 if (!read_lebn(&pin, hnbyte, &q)
!read_lebn(&pin, hnbyte, &q)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
365 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
366 if (!read_lebn(&pin, hnbyte, &dmp1)
!read_lebn(&pi...hnbyte, &dmp1)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
367 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
368 if (!read_lebn(&pin, hnbyte, &dmq1)
!read_lebn(&pi...hnbyte, &dmq1)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
369 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
370 if (!read_lebn(&pin, hnbyte, &iqmp)
!read_lebn(&pi...hnbyte, &iqmp)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
371 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
372 if (!read_lebn(&pin, nbyte, &d)
!read_lebn(&pin, nbyte, &d)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
373 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
374 if (!RSA_set0_factors(rsa, p, q)
!RSA_set0_factors(rsa, p, q)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
375 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
376 p = q = -
377 ((void *)0)-
378 ;-
379 if (!RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp)
!RSA_set0_crt_...1, dmq1, iqmp)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
380 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
381 dmp1 = dmq1 = iqmp = -
382 ((void *)0)-
383 ;-
384 }
never executed: end of block
0
385 if (!RSA_set0_key(rsa, n, e, d)
!RSA_set0_key(rsa, n, e, d)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
386 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
387 n = e = d = -
388 ((void *)0)-
389 ;-
390-
391 if (!EVP_PKEY_set1_RSA(ret, rsa)
!EVP_PKEY_set1_RSA(ret, rsa)Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-3
392 goto
never executed: goto memerr;
memerr;
never executed: goto memerr;
0
393 RSA_free(rsa);-
394 *in = pin;-
395 return
executed 3 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
ret;
executed 3 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
3
396 memerr:-
397 ERR_put_error(9,(129),((1|64)),__FILE__,368);-
398 BN_free(e);-
399 BN_free(n);-
400 BN_free(p);-
401 BN_free(q);-
402 BN_free(dmp1);-
403 BN_free(dmq1);-
404 BN_free(iqmp);-
405 BN_free(d);-
406 RSA_free(rsa);-
407 EVP_PKEY_free(ret);-
408 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
409 ((void *)0)
never executed: return ((void *)0) ;
0
410 ;
never executed: return ((void *)0) ;
0
411}-
412-
413EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length)-
414{-
415 return
never executed: return do_b2i(in, length, 0);
do_b2i(in, length, 0);
never executed: return do_b2i(in, length, 0);
0
416}-
417-
418EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length)-
419{-
420 return
never executed: return do_b2i(in, length, 1);
do_b2i(in, length, 1);
never executed: return do_b2i(in, length, 1);
0
421}-
422-
423EVP_PKEY *b2i_PrivateKey_bio(BIO *in)-
424{-
425 return
never executed: return do_b2i_bio(in, 0);
do_b2i_bio(in, 0);
never executed: return do_b2i_bio(in, 0);
0
426}-
427-
428EVP_PKEY *b2i_PublicKey_bio(BIO *in)-
429{-
430 return
executed 6 times by 1 test: return do_b2i_bio(in, 1);
Executed by:
  • libcrypto.so.1.1
do_b2i_bio(in, 1);
executed 6 times by 1 test: return do_b2i_bio(in, 1);
Executed by:
  • libcrypto.so.1.1
6
431}-
432-
433static void write_ledword(unsigned char **out, unsigned int dw)-
434{-
435 unsigned char *p = *out;-
436 *p++ = dw & 0xff;-
437 *p++ = (dw >> 8) & 0xff;-
438 *p++ = (dw >> 16) & 0xff;-
439 *p++ = (dw >> 24) & 0xff;-
440 *out = p;-
441}
executed 24 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
24
442-
443static void write_lebn(unsigned char **out, const BIGNUM *bn, int len)-
444{-
445 BN_bn2lebinpad(bn, *out, len);-
446 *out += len;-
447}
executed 24 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
24
448-
449static int check_bitlen_rsa(RSA *rsa, int ispub, unsigned int *magic);-
450static int check_bitlen_dsa(DSA *dsa, int ispub, unsigned int *magic);-
451-
452static void write_rsa(unsigned char **out, RSA *rsa, int ispub);-
453static void write_dsa(unsigned char **out, DSA *dsa, int ispub);-
454-
455static int do_i2b(unsigned char **out, EVP_PKEY *pk, int ispub)-
456{-
457 unsigned char *p;-
458 unsigned int bitlen, magic = 0, keyalg;-
459 int outlen, noinc = 0;-
460 int pktype = EVP_PKEY_id(pk);-
461 if (pktype == 116
pktype == 116Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
4
462 bitlen = check_bitlen_dsa(EVP_PKEY_get0_DSA(pk), ispub, &magic);-
463 keyalg = 0x2200;-
464 }
executed 4 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
else if (pktype == 6
pktype == 6Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
) {
0-4
465 bitlen = check_bitlen_rsa(EVP_PKEY_get0_RSA(pk), ispub, &magic);-
466 keyalg = 0xa400;-
467 }
executed 4 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
else
4
468 return
never executed: return -1;
-1;
never executed: return -1;
0
469 if (bitlen == 0
bitlen == 0Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-8
470 return
never executed: return -1;
-1;
never executed: return -1;
0
471 outlen = 16 + blob_length(bitlen,-
472 keyalg == 0x2200 ? 1 : 0, ispub);-
473 if (out ==
out == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-8
474 ((void *)0)
out == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-8
475 )-
476 return
never executed: return outlen;
outlen;
never executed: return outlen;
0
477 if (*
*outDescription
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
out
*outDescription
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-8
478 p = *out;
never executed: p = *out;
0
479 else {-
480 if ((
(p = CRYPTO_ma...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
p = CRYPTO_malloc(outlen, __FILE__, 447)) ==
(p = CRYPTO_ma...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-8
481 ((void *)0)
(p = CRYPTO_ma...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-8
482 ) {-
483 ERR_put_error(9,(146),((1|64)),__FILE__,448);-
484 return
never executed: return -1;
-1;
never executed: return -1;
0
485 }-
486 *out = p;-
487 noinc = 1;-
488 }
executed 8 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
8
489 if (ispub
ispubDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
)
0-8
490 *
executed 8 times by 1 test: *p++ = 0x6;
Executed by:
  • libcrypto.so.1.1
p++ = 0x6;
executed 8 times by 1 test: *p++ = 0x6;
Executed by:
  • libcrypto.so.1.1
8
491 else-
492 *
never executed: *p++ = 0x7;
p++ = 0x7;
never executed: *p++ = 0x7;
0
493 *p++ = 0x2;-
494 *p++ = 0;-
495 *p++ = 0;-
496 write_ledword(&p, keyalg);-
497 write_ledword(&p, magic);-
498 write_ledword(&p, bitlen);-
499 if (keyalg == 0x2200
keyalg == 0x2200Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
4
500 write_dsa(&p, EVP_PKEY_get0_DSA(pk), ispub);
executed 4 times by 1 test: write_dsa(&p, EVP_PKEY_get0_DSA(pk), ispub);
Executed by:
  • libcrypto.so.1.1
4
501 else-
502 write_rsa(&p, EVP_PKEY_get0_RSA(pk), ispub);
executed 4 times by 1 test: write_rsa(&p, EVP_PKEY_get0_RSA(pk), ispub);
Executed by:
  • libcrypto.so.1.1
4
503 if (!noinc
!noincDescription
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-8
504 *
never executed: *out += outlen;
out += outlen;
never executed: *out += outlen;
0
505 return
executed 8 times by 1 test: return outlen;
Executed by:
  • libcrypto.so.1.1
outlen;
executed 8 times by 1 test: return outlen;
Executed by:
  • libcrypto.so.1.1
8
506}-
507-
508static int do_i2b_bio(BIO *out, EVP_PKEY *pk, int ispub)-
509{-
510 unsigned char *tmp = -
511 ((void *)0)-
512 ;-
513 int outlen, wrlen;-
514 outlen = do_i2b(&tmp, pk, ispub);-
515 if (outlen < 0
outlen < 0Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-8
516 return
never executed: return -1;
-1;
never executed: return -1;
0
517 wrlen = BIO_write(out, tmp, outlen);-
518 CRYPTO_free(tmp, __FILE__, 481);-
519 if (wrlen == outlen
wrlen == outlenDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
)
0-8
520 return
executed 8 times by 1 test: return outlen;
Executed by:
  • libcrypto.so.1.1
outlen;
executed 8 times by 1 test: return outlen;
Executed by:
  • libcrypto.so.1.1
8
521 return
never executed: return -1;
-1;
never executed: return -1;
0
522}-
523-
524static int check_bitlen_dsa(DSA *dsa, int ispub, unsigned int *pmagic)-
525{-
526 int bitlen;-
527 const BIGNUM *p = -
528 ((void *)0)-
529 , *q = -
530 ((void *)0)-
531 , *g = -
532 ((void *)0)-
533 ;-
534 const BIGNUM *pub_key = -
535 ((void *)0)-
536 , *priv_key = -
537 ((void *)0)-
538 ;-
539-
540 DSA_get0_pqg(dsa, &p, &q, &g);-
541 DSA_get0_key(dsa, &pub_key, &priv_key);-
542 bitlen = BN_num_bits(p);-
543 if ((
(bitlen & 7)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
bitlen & 7)
(bitlen & 7)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
|| (
(BN_num_bits(q) != 160)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
BN_num_bits(q) != 160)
(BN_num_bits(q) != 160)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-4
544 || (
(BN_num_bits(g) > bitlen)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
BN_num_bits(g) > bitlen)
(BN_num_bits(g) > bitlen)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-4
545 goto
never executed: goto badkey;
badkey;
never executed: goto badkey;
0
546 if (ispub
ispubDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
) {
0-4
547 if (BN_num_bits(pub_key) > bitlen
BN_num_bits(pub_key) > bitlenDescription
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-4
548 goto
never executed: goto badkey;
badkey;
never executed: goto badkey;
0
549 *pmagic = 0x31535344L;-
550 }
executed 4 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
else {
4
551 if (BN_num_bits(priv_key) > 160
BN_num_bits(priv_key) > 160Description
TRUEnever evaluated
FALSEnever evaluated
)
0
552 goto
never executed: goto badkey;
badkey;
never executed: goto badkey;
0
553 *pmagic = 0x32535344L;-
554 }
never executed: end of block
0
555-
556 return
executed 4 times by 1 test: return bitlen;
Executed by:
  • libcrypto.so.1.1
bitlen;
executed 4 times by 1 test: return bitlen;
Executed by:
  • libcrypto.so.1.1
4
557 badkey:-
558 ERR_put_error(9,(130),(126),__FILE__,511);-
559 return
never executed: return 0;
0;
never executed: return 0;
0
560}-
561-
562static int check_bitlen_rsa(RSA *rsa, int ispub, unsigned int *pmagic)-
563{-
564 int nbyte, hnbyte, bitlen;-
565 const BIGNUM *e;-
566-
567 RSA_get0_key(rsa, -
568 ((void *)0)-
569 , &e, -
570 ((void *)0)-
571 );-
572 if (BN_num_bits(e) > 32
BN_num_bits(e) > 32Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-4
573 goto
never executed: goto badkey;
badkey;
never executed: goto badkey;
0
574 bitlen = RSA_bits(rsa);-
575 nbyte = RSA_size(rsa);-
576 hnbyte = (bitlen + 15) >> 4;-
577 if (ispub
ispubDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
) {
0-4
578 *pmagic = 0x31415352L;-
579 return
executed 4 times by 1 test: return bitlen;
Executed by:
  • libcrypto.so.1.1
bitlen;
executed 4 times by 1 test: return bitlen;
Executed by:
  • libcrypto.so.1.1
4
580 } else {-
581 const BIGNUM *d, *p, *q, *iqmp, *dmp1, *dmq1;-
582-
583 *pmagic = 0x32415352L;-
584-
585-
586-
587-
588 RSA_get0_key(rsa, -
589 ((void *)0)-
590 , -
591 ((void *)0)-
592 , &d);-
593 if (((
((BN_num_bits(d)+7)/8) > nbyteDescription
TRUEnever evaluated
FALSEnever evaluated
BN_num_bits(d)+7)/8) > nbyte
((BN_num_bits(d)+7)/8) > nbyteDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
594 goto
never executed: goto badkey;
badkey;
never executed: goto badkey;
0
595 RSA_get0_factors(rsa, &p, &q);-
596 RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp);-
597 if ((((
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
BN_num_bits(iqmp)+7)/8) > hnbyte)
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
0
598 || (((
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
BN_num_bits(p)+7)/8) > hnbyte)
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
0
599 || (((
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
BN_num_bits(q)+7)/8) > hnbyte)
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
0
600 || (((
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
BN_num_bits(dmp1)+7)/8) > hnbyte)
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
0
601 || (((
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
BN_num_bits(dmq1)+7)/8) > hnbyte)
(((BN_num_bits...)/8) > hnbyte)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
602 goto
never executed: goto badkey;
badkey;
never executed: goto badkey;
0
603 }
never executed: end of block
0
604 return
never executed: return bitlen;
bitlen;
never executed: return bitlen;
0
605 badkey:-
606 ERR_put_error(9,(131),(126),__FILE__,551);-
607 return
never executed: return 0;
0;
never executed: return 0;
0
608}-
609-
610static void write_rsa(unsigned char **out, RSA *rsa, int ispub)-
611{-
612 int nbyte, hnbyte;-
613 const BIGNUM *n, *d, *e, *p, *q, *iqmp, *dmp1, *dmq1;-
614-
615 nbyte = RSA_size(rsa);-
616 hnbyte = (RSA_bits(rsa) + 15) >> 4;-
617 RSA_get0_key(rsa, &n, &e, &d);-
618 write_lebn(out, e, 4);-
619 write_lebn(out, n, nbyte);-
620 if (ispub
ispubDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
)
0-4
621 return;
executed 4 times by 1 test: return;
Executed by:
  • libcrypto.so.1.1
4
622 RSA_get0_factors(rsa, &p, &q);-
623 RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp);-
624 write_lebn(out, p, hnbyte);-
625 write_lebn(out, q, hnbyte);-
626 write_lebn(out, dmp1, hnbyte);-
627 write_lebn(out, dmq1, hnbyte);-
628 write_lebn(out, iqmp, hnbyte);-
629 write_lebn(out, d, nbyte);-
630}
never executed: end of block
0
631-
632static void write_dsa(unsigned char **out, DSA *dsa, int ispub)-
633{-
634 int nbyte;-
635 const BIGNUM *p = -
636 ((void *)0)-
637 , *q = -
638 ((void *)0)-
639 , *g = -
640 ((void *)0)-
641 ;-
642 const BIGNUM *pub_key = -
643 ((void *)0)-
644 , *priv_key = -
645 ((void *)0)-
646 ;-
647-
648 DSA_get0_pqg(dsa, &p, &q, &g);-
649 DSA_get0_key(dsa, &pub_key, &priv_key);-
650 nbyte = ((BN_num_bits(p)+7)/8);-
651 write_lebn(out, p, nbyte);-
652 write_lebn(out, q, 20);-
653 write_lebn(out, g, nbyte);-
654 if (ispub
ispubDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
)
0-4
655 write_lebn(out, pub_key, nbyte);
executed 4 times by 1 test: write_lebn(out, pub_key, nbyte);
Executed by:
  • libcrypto.so.1.1
4
656 else-
657 write_lebn(out, priv_key, 20);
never executed: write_lebn(out, priv_key, 20);
0
658-
659 memset(*out, 0xff, 24);-
660 *out += 24;-
661 return;
executed 4 times by 1 test: return;
Executed by:
  • libcrypto.so.1.1
4
662}-
663-
664int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk)-
665{-
666 return
never executed: return do_i2b_bio(out, pk, 0);
do_i2b_bio(out, pk, 0);
never executed: return do_i2b_bio(out, pk, 0);
0
667}-
668-
669int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk)-
670{-
671 return
executed 8 times by 1 test: return do_i2b_bio(out, pk, 1);
Executed by:
  • libcrypto.so.1.1
do_i2b_bio(out, pk, 1);
executed 8 times by 1 test: return do_i2b_bio(out, pk, 1);
Executed by:
  • libcrypto.so.1.1
8
672}-
673-
674-
675-
676static int do_PVK_header(const unsigned char **in, unsigned int length,-
677 int skip_magic,-
678 unsigned int *psaltlen, unsigned int *pkeylen)-
679{-
680 const unsigned char *p = *in;-
681 unsigned int pvk_magic, is_encrypted;-
682 if (skip_magic
skip_magicDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
683 if (length < 20
length < 20Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
684 ERR_put_error(9,(136),(125),__FILE__,619);-
685 return
never executed: return 0;
0;
never executed: return 0;
0
686 }-
687 }
never executed: end of block
else {
0
688 if (length < 24
length < 24Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
689 ERR_put_error(9,(136),(125),__FILE__,624);-
690 return
never executed: return 0;
0;
never executed: return 0;
0
691 }-
692 pvk_magic = read_ledword(&p);-
693 if (pvk_magic != 0xb0b5f11eL
pvk_magic != 0xb0b5f11eLDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
694 ERR_put_error(9,(136),(116),__FILE__,629);-
695 return
never executed: return 0;
0;
never executed: return 0;
0
696 }-
697 }
never executed: end of block
0
698-
699 p += 4;-
700-
701-
702 read_ledword(&p);-
703 is_encrypted = read_ledword(&p);-
704 *psaltlen = read_ledword(&p);-
705 *pkeylen = read_ledword(&p);-
706-
707 if (*
*pkeylen > 102400Description
TRUEnever evaluated
FALSEnever evaluated
pkeylen > 102400
*pkeylen > 102400Description
TRUEnever evaluated
FALSEnever evaluated
|| *
*psaltlen > 10240Description
TRUEnever evaluated
FALSEnever evaluated
psaltlen > 10240
*psaltlen > 10240Description
TRUEnever evaluated
FALSEnever evaluated
)
0
708 return
never executed: return 0;
0;
never executed: return 0;
0
709-
710 if (is_encrypted
is_encryptedDescription
TRUEnever evaluated
FALSEnever evaluated
&& !*psaltlen
!*psaltlenDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
711 ERR_put_error(9,(136),(121),__FILE__,646);-
712 return
never executed: return 0;
0;
never executed: return 0;
0
713 }-
714-
715 *in = p;-
716 return
never executed: return 1;
1;
never executed: return 1;
0
717}-
718-
719static int derive_pvk_key(unsigned char *key,-
720 const unsigned char *salt, unsigned int saltlen,-
721 const unsigned char *pass, int passlen)-
722{-
723 EVP_MD_CTX *mctx = EVP_MD_CTX_new();-
724 int rv = 1;-
725 if (mctx ==
mctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
726 ((void *)0)
mctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
727 -
728 || !EVP_DigestInit_ex(mctx, EVP_sha1(),
!EVP_DigestIni... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
729 ((void *)0)
!EVP_DigestIni... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
730 )
!EVP_DigestIni... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
731 || !EVP_DigestUpdate(mctx, salt, saltlen)
!EVP_DigestUpd...salt, saltlen)Description
TRUEnever evaluated
FALSEnever evaluated
0
732 || !EVP_DigestUpdate(mctx, pass, passlen)
!EVP_DigestUpd...pass, passlen)Description
TRUEnever evaluated
FALSEnever evaluated
0
733 || !EVP_DigestFinal_ex(mctx, key,
!EVP_DigestFin... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
734 ((void *)0)
!EVP_DigestFin... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
735 )
!EVP_DigestFin... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
)
0
736 rv = 0;
never executed: rv = 0;
0
737-
738 EVP_MD_CTX_free(mctx);-
739 return
never executed: return rv;
rv;
never executed: return rv;
0
740}-
741-
742static EVP_PKEY *do_PVK_body(const unsigned char **in,-
743 unsigned int saltlen, unsigned int keylen,-
744 pem_password_cb *cb, void *u)-
745{-
746 EVP_PKEY *ret = -
747 ((void *)0)-
748 ;-
749 const unsigned char *p = *in;-
750 unsigned int magic;-
751 unsigned char *enctmp = -
752 ((void *)0)-
753 , *q;-
754 unsigned char keybuf[20];-
755-
756 EVP_CIPHER_CTX *cctx = EVP_CIPHER_CTX_new();-
757 if (saltlen
saltlenDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
758 char psbuf[1024];-
759 int enctmplen, inlen;-
760 if (cb
cbDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
761 inlen = cb(psbuf, 1024, 0, u);
never executed: inlen = cb(psbuf, 1024, 0, u);
0
762 else-
763 inlen = PEM_def_callback(psbuf, 1024, 0, u);
never executed: inlen = PEM_def_callback(psbuf, 1024, 0, u);
0
764 if (inlen < 0
inlen < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
765 ERR_put_error(9,(135),(104),__FILE__,690);-
766 goto
never executed: goto err;
err;
never executed: goto err;
0
767 }-
768 enctmp = CRYPTO_malloc(keylen + 8, __FILE__, 693);-
769 if (enctmp ==
enctmp == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
770 ((void *)0)
enctmp == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
771 ) {-
772 ERR_put_error(9,(135),((1|64)),__FILE__,695);-
773 goto
never executed: goto err;
err;
never executed: goto err;
0
774 }-
775 if (!derive_pvk_key(keybuf, p, saltlen,
!derive_pvk_ke...)psbuf, inlen)Description
TRUEnever evaluated
FALSEnever evaluated
0
776 (unsigned char *)psbuf, inlen)
!derive_pvk_ke...)psbuf, inlen)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
777 goto
never executed: goto err;
err;
never executed: goto err;
0
778 p += saltlen;-
779-
780 memcpy(enctmp, p, 8);-
781 p += 8;-
782 if (keylen < 8
keylen < 8Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
783 ERR_put_error(9,(135),(125),__FILE__,706);-
784 goto
never executed: goto err;
err;
never executed: goto err;
0
785 }-
786 inlen = keylen - 8;-
787 q = enctmp + 8;-
788 if (!EVP_DecryptInit_ex(cctx, EVP_rc4(),
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
789 ((void *)0)
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
790 , keybuf,
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
791 ((void *)0)
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
792 )
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
)
0
793 goto
never executed: goto err;
err;
never executed: goto err;
0
794 if (!EVP_DecryptUpdate(cctx, q, &enctmplen, p, inlen)
!EVP_DecryptUp...len, p, inlen)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
795 goto
never executed: goto err;
err;
never executed: goto err;
0
796 if (!EVP_DecryptFinal_ex(cctx, q + enctmplen, &enctmplen)
!EVP_DecryptFi...n, &enctmplen)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
797 goto
never executed: goto err;
err;
never executed: goto err;
0
798 magic = read_ledword((const unsigned char **)&q);-
799 if (magic != 0x32415352L
magic != 0x32415352LDescription
TRUEnever evaluated
FALSEnever evaluated
&& magic != 0x32535344L
magic != 0x32535344LDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
800 q = enctmp + 8;-
801 memset(keybuf + 5, 0, 11);-
802 if (!EVP_DecryptInit_ex(cctx, EVP_rc4(),
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
803 ((void *)0)
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
804 , keybuf,
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
805 ((void *)0)
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
806 )
!EVP_DecryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
)
0
807 goto
never executed: goto err;
err;
never executed: goto err;
0
808 if (!EVP_DecryptUpdate(cctx, q, &enctmplen, p, inlen)
!EVP_DecryptUp...len, p, inlen)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
809 goto
never executed: goto err;
err;
never executed: goto err;
0
810 if (!EVP_DecryptFinal_ex(cctx, q + enctmplen, &enctmplen)
!EVP_DecryptFi...n, &enctmplen)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
811 goto
never executed: goto err;
err;
never executed: goto err;
0
812 magic = read_ledword((const unsigned char **)&q);-
813 if (magic != 0x32415352L
magic != 0x32415352LDescription
TRUEnever evaluated
FALSEnever evaluated
&& magic != 0x32535344L
magic != 0x32535344LDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
814 ERR_put_error(9,(135),(101),__FILE__,729);-
815 goto
never executed: goto err;
err;
never executed: goto err;
0
816 }-
817 }
never executed: end of block
0
818 p = enctmp;-
819 }
never executed: end of block
0
820-
821 ret = b2i_PrivateKey(&p, keylen);-
822 err:
code before this statement never executed: err:
0
823 EVP_CIPHER_CTX_free(cctx);-
824 if (enctmp !=
enctmp != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
825 ((void *)0)
enctmp != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
826 ) {-
827 OPENSSL_cleanse(keybuf, sizeof(keybuf));-
828 CRYPTO_free(enctmp, __FILE__, 741);-
829 }
never executed: end of block
0
830 return
never executed: return ret;
ret;
never executed: return ret;
0
831}-
832-
833EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u)-
834{-
835 unsigned char pvk_hdr[24], *buf = -
836 ((void *)0)-
837 ;-
838 const unsigned char *p;-
839 int buflen;-
840 EVP_PKEY *ret = -
841 ((void *)0)-
842 ;-
843 unsigned int saltlen, keylen;-
844 if (BIO_read(in, pvk_hdr, 24) != 24
BIO_read(in, p...hdr, 24) != 24Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
845 ERR_put_error(9,(128),(124),__FILE__,754);-
846 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
847 ((void *)0)
never executed: return ((void *)0) ;
0
848 ;
never executed: return ((void *)0) ;
0
849 }-
850 p = pvk_hdr;-
851-
852 if (!do_PVK_header(&p, 24, 0, &saltlen, &keylen)
!do_PVK_header...tlen, &keylen)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
853 return
never executed: return 0;
0;
never executed: return 0;
0
854 buflen = (int)keylen + saltlen;-
855 buf = CRYPTO_malloc(buflen, __FILE__, 762);-
856 if (buf ==
buf == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
857 ((void *)0)
buf == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
858 ) {-
859 ERR_put_error(9,(128),((1|64)),__FILE__,764);-
860 return
never executed: return 0;
0;
never executed: return 0;
0
861 }-
862 p = buf;-
863 if (BIO_read(in, buf, buflen) != buflen
BIO_read(in, b...len) != buflenDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
864 ERR_put_error(9,(128),(124),__FILE__,769);-
865 goto
never executed: goto err;
err;
never executed: goto err;
0
866 }-
867 ret = do_PVK_body(&p, saltlen, keylen, cb, u);-
868-
869 err:
code before this statement never executed: err:
0
870 CRYPTO_clear_free(buf, buflen, __FILE__, 775);-
871 return
never executed: return ret;
ret;
never executed: return ret;
0
872}-
873-
874static int i2b_PVK(unsigned char **out, EVP_PKEY *pk, int enclevel,-
875 pem_password_cb *cb, void *u)-
876{-
877 int outlen = 24, pklen;-
878 unsigned char *p = -
879 ((void *)0)-
880 , *start = -
881 ((void *)0)-
882 , *salt = -
883 ((void *)0)-
884 ;-
885 EVP_CIPHER_CTX *cctx = -
886 ((void *)0)-
887 ;-
888 if (enclevel
enclevelDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
889 outlen += 0x10;
never executed: outlen += 0x10;
0
890 pklen = do_i2b(-
891 ((void *)0)-
892 , pk, 0);-
893 if (pklen < 0
pklen < 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
894 return
never executed: return -1;
-1;
never executed: return -1;
0
895 outlen += pklen;-
896 if (out ==
out == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
897 ((void *)0)
out == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
898 )-
899 return
never executed: return outlen;
outlen;
never executed: return outlen;
0
900 if (*
*out != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
out !=
*out != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
901 ((void *)0)
*out != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
902 ) {-
903 p = *out;-
904 }
never executed: end of block
else {
0
905 start = p = CRYPTO_malloc(outlen, __FILE__, 796);-
906 if (p ==
p == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
907 ((void *)0)
p == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
908 ) {-
909 ERR_put_error(9,(137),((1|64)),__FILE__,798);-
910 return
never executed: return -1;
-1;
never executed: return -1;
0
911 }-
912 }
never executed: end of block
0
913-
914 cctx = EVP_CIPHER_CTX_new();-
915 if (cctx ==
cctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
916 ((void *)0)
cctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
917 )-
918 goto
never executed: goto error;
error;
never executed: goto error;
0
919-
920 write_ledword(&p, 0xb0b5f11eL);-
921 write_ledword(&p, 0);-
922 if (EVP_PKEY_id(pk) == 116
EVP_PKEY_id(pk) == 116Description
TRUEnever evaluated
FALSEnever evaluated
)
0
923 write_ledword(&p, 0x2);
never executed: write_ledword(&p, 0x2);
0
924 else-
925 write_ledword(&p, 0x1);
never executed: write_ledword(&p, 0x1);
0
926 write_ledword(&p, enclevel ? 1 : 0);-
927 write_ledword(&p, enclevel ? 0x10 : 0);-
928 write_ledword(&p, pklen);-
929 if (enclevel
enclevelDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
930 if (RAND_bytes(p, 0x10) <= 0
RAND_bytes(p, 0x10) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
931 goto
never executed: goto error;
error;
never executed: goto error;
0
932 salt = p;-
933 p += 0x10;-
934 }
never executed: end of block
0
935 do_i2b(&p, pk, 0);-
936 if (enclevel != 0
enclevel != 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
937 char psbuf[1024];-
938 unsigned char keybuf[20];-
939 int enctmplen, inlen;-
940 if (cb
cbDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
941 inlen = cb(psbuf, 1024, 1, u);
never executed: inlen = cb(psbuf, 1024, 1, u);
0
942 else-
943 inlen = PEM_def_callback(psbuf, 1024, 1, u);
never executed: inlen = PEM_def_callback(psbuf, 1024, 1, u);
0
944 if (inlen <= 0
inlen <= 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
945 ERR_put_error(9,(137),(104),__FILE__,832);-
946 goto
never executed: goto error;
error;
never executed: goto error;
0
947 }-
948 if (!derive_pvk_key(keybuf, salt, 0x10,
!derive_pvk_ke...)psbuf, inlen)Description
TRUEnever evaluated
FALSEnever evaluated
0
949 (unsigned char *)psbuf, inlen)
!derive_pvk_ke...)psbuf, inlen)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
950 goto
never executed: goto error;
error;
never executed: goto error;
0
951 if (enclevel == 1
enclevel == 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
952 memset(keybuf + 5, 0, 11);
never executed: memset(keybuf + 5, 0, 11);
0
953 p = salt + 0x10 + 8;-
954 if (!EVP_EncryptInit_ex(cctx, EVP_rc4(),
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
955 ((void *)0)
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
956 , keybuf,
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
957 ((void *)0)
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
958 )
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
)
0
959 goto
never executed: goto error;
error;
never executed: goto error;
0
960 OPENSSL_cleanse(keybuf, 20);-
961 if (!EVP_DecryptUpdate(cctx, p, &enctmplen, p, pklen - 8)
!EVP_DecryptUp... p, pklen - 8)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
962 goto
never executed: goto error;
error;
never executed: goto error;
0
963 if (!EVP_DecryptFinal_ex(cctx, p + enctmplen, &enctmplen)
!EVP_DecryptFi...n, &enctmplen)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
964 goto
never executed: goto error;
error;
never executed: goto error;
0
965 }
never executed: end of block
0
966-
967 EVP_CIPHER_CTX_free(cctx);-
968-
969 if (*
*out == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
out ==
*out == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
970 ((void *)0)
*out == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
971 )-
972 *
never executed: *out = start;
out = start;
never executed: *out = start;
0
973-
974 return
never executed: return outlen;
outlen;
never executed: return outlen;
0
975-
976 error:-
977 EVP_CIPHER_CTX_free(cctx);-
978 if (*
*out == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
out ==
*out == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
979 ((void *)0)
*out == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
980 )-
981 CRYPTO_free(start, __FILE__, 860);
never executed: CRYPTO_free(start, __FILE__, 860);
0
982 return
never executed: return -1;
-1;
never executed: return -1;
0
983}-
984-
985int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel,-
986 pem_password_cb *cb, void *u)-
987{-
988 unsigned char *tmp = -
989 ((void *)0)-
990 ;-
991 int outlen, wrlen;-
992 outlen = i2b_PVK(&tmp, pk, enclevel, cb, u);-
993 if (outlen < 0
outlen < 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
994 return
never executed: return -1;
-1;
never executed: return -1;
0
995 wrlen = BIO_write(out, tmp, outlen);-
996 CRYPTO_free(tmp, __FILE__, 873);-
997 if (wrlen == outlen
wrlen == outlenDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
998 ERR_put_error(9,(138),(118),__FILE__,875);-
999 return
never executed: return outlen;
outlen;
never executed: return outlen;
0
1000 }-
1001 return
never executed: return -1;
-1;
never executed: return -1;
0
1002}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2