OpenCoverage

pvkfmt.c

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

Generated by Squish Coco 4.2.2