OpenCoverage

p12_kiss.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/pkcs12/p12_kiss.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4static int parse_pk12(PKCS12 *p12, const char *pass, int passlen,-
5 EVP_PKEY **pkey, struct stack_st_X509 *ocerts);-
6-
7static int parse_bags(const struct stack_st_PKCS12_SAFEBAG *bags, const char *pass,-
8 int passlen, EVP_PKEY **pkey, struct stack_st_X509 *ocerts);-
9-
10static int parse_bag(PKCS12_SAFEBAG *bag, const char *pass, int passlen,-
11 EVP_PKEY **pkey, struct stack_st_X509 *ocerts);-
12int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,-
13 struct stack_st_X509 **ca)-
14{-
15 struct stack_st_X509 *ocerts = -
16 ((void *)0)-
17 ;-
18 X509 *x = -
19 ((void *)0)-
20 ;-
21-
22 if (pkey
pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
23 *
never executed: *pkey = ((void *)0) ;
pkey =
never executed: *pkey = ((void *)0) ;
0
24 ((void *)0)
never executed: *pkey = ((void *)0) ;
0
25 ;
never executed: *pkey = ((void *)0) ;
0
26 if (cert
certDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
27 *
never executed: *cert = ((void *)0) ;
cert =
never executed: *cert = ((void *)0) ;
0
28 ((void *)0)
never executed: *cert = ((void *)0) ;
0
29 ;
never executed: *cert = ((void *)0) ;
0
30-
31-
32-
33 if (!p12
!p12Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
34 ERR_put_error(35,(118),(105),__FILE__,47)-
35 ;-
36 return
never executed: return 0;
0;
never executed: return 0;
0
37 }-
38 if (!pass
!passDescription
TRUEnever evaluated
FALSEnever evaluated
|| !*pass
!*passDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
39 if (PKCS12_verify_mac(p12,
PKCS12_verify_...void *)0) , 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
40 ((void *)0)
PKCS12_verify_...void *)0) , 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
41 , 0)
PKCS12_verify_...void *)0) , 0)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
42 pass =
never executed: pass = ((void *)0) ;
0
43 ((void *)0)
never executed: pass = ((void *)0) ;
0
44 ;
never executed: pass = ((void *)0) ;
0
45 else if (PKCS12_verify_mac(p12, "", 0)
PKCS12_verify_mac(p12, "", 0)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
46 pass = "";
never executed: pass = "";
0
47 else {-
48 ERR_put_error(35,(118),(113),__FILE__,66);-
49 goto
never executed: goto err;
err;
never executed: goto err;
0
50 }-
51 } else if (!PKCS12_verify_mac(p12, pass, -1)
!PKCS12_verify...p12, pass, -1)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
52 ERR_put_error(35,(118),(113),__FILE__,70);-
53 goto
never executed: goto err;
err;
never executed: goto err;
0
54 }-
55-
56-
57 ocerts = sk_X509_new_null();-
58-
59 if (!ocerts
!ocertsDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
60 ERR_put_error(35,(118),((1|64)),__FILE__,78);-
61 goto
never executed: goto err;
err;
never executed: goto err;
0
62 }-
63-
64 if (!parse_pk12(p12, pass, -1, pkey, ocerts)
!parse_pk12(p1... pkey, ocerts)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
65 ERR_put_error(35,(118),(114),__FILE__,83);-
66 goto
never executed: goto err;
err;
never executed: goto err;
0
67 }-
68-
69 while ((
(x = sk_X509_pop(ocerts))Description
TRUEnever evaluated
FALSEnever evaluated
x = sk_X509_pop(ocerts))
(x = sk_X509_pop(ocerts))Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
70 if (pkey
pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
&& *
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
pkey
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
&& cert
certDescription
TRUEnever evaluated
FALSEnever evaluated
&& !*cert
!*certDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
71 ERR_set_mark();-
72 if (X509_check_private_key(x, *pkey)
X509_check_pri..._key(x, *pkey)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
73 *cert = x;-
74 x = -
75 ((void *)0)-
76 ;-
77 }
never executed: end of block
0
78 ERR_pop_to_mark();-
79 }
never executed: end of block
0
80-
81 if (ca
caDescription
TRUEnever evaluated
FALSEnever evaluated
&& x
xDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
82 if (!*ca
!*caDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
83 *
never executed: *ca = sk_X509_new_null();
ca = sk_X509_new_null();
never executed: *ca = sk_X509_new_null();
0
84 if (!*ca
!*caDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
85 goto
never executed: goto err;
err;
never executed: goto err;
0
86 if (!sk_X509_push(*ca, x)
!sk_X509_push(*ca, x)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
87 goto
never executed: goto err;
err;
never executed: goto err;
0
88 x = -
89 ((void *)0)-
90 ;-
91 }
never executed: end of block
0
92 X509_free(x);-
93 }
never executed: end of block
0
94-
95 sk_X509_pop_free(ocerts, X509_free);-
96-
97 return
never executed: return 1;
1;
never executed: return 1;
0
98-
99 err:-
100-
101 if (pkey
pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
102 EVP_PKEY_free(*pkey);-
103 *pkey = -
104 ((void *)0)-
105 ;-
106 }
never executed: end of block
0
107 if (cert
certDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
108 X509_free(*cert);-
109 *cert = -
110 ((void *)0)-
111 ;-
112 }
never executed: end of block
0
113 X509_free(x);-
114 sk_X509_pop_free(ocerts, X509_free);-
115 return
never executed: return 0;
0;
never executed: return 0;
0
116-
117}-
118-
119-
120-
121static int parse_pk12(PKCS12 *p12, const char *pass, int passlen,-
122 EVP_PKEY **pkey, struct stack_st_X509 *ocerts)-
123{-
124 struct stack_st_PKCS7 *asafes;-
125 struct stack_st_PKCS12_SAFEBAG *bags;-
126 int i, bagnid;-
127 PKCS7 *p7;-
128-
129 if ((
(asafes = PKCS...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
asafes = PKCS12_unpack_authsafes(p12)) ==
(asafes = PKCS...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
130 ((void *)0)
(asafes = PKCS...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
131 )-
132 return
never executed: return 0;
0;
never executed: return 0;
0
133 for (i = 0; i < sk_PKCS7_num(asafes)
i < sk_PKCS7_num(asafes)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
134 p7 = sk_PKCS7_value(asafes, i);-
135 bagnid = OBJ_obj2nid(p7->type);-
136 if (bagnid == 21
bagnid == 21Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
137 bags = PKCS12_unpack_p7data(p7);-
138 }
never executed: end of block
else if (bagnid == 26
bagnid == 26Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
139 bags = PKCS12_unpack_p7encdata(p7, pass, passlen);-
140 }
never executed: end of block
else
0
141 continue;
never executed: continue;
0
142 if (!bags
!bagsDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
143 sk_PKCS7_pop_free(asafes, PKCS7_free);-
144 return
never executed: return 0;
0;
never executed: return 0;
0
145 }-
146 if (!parse_bags(bags, pass, passlen, pkey, ocerts)
!parse_bags(ba... pkey, ocerts)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
147 sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);-
148 sk_PKCS7_pop_free(asafes, PKCS7_free);-
149 return
never executed: return 0;
0;
never executed: return 0;
0
150 }-
151 sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);-
152 }
never executed: end of block
0
153 sk_PKCS7_pop_free(asafes, PKCS7_free);-
154 return
never executed: return 1;
1;
never executed: return 1;
0
155}-
156-
157static int parse_bags(const struct stack_st_PKCS12_SAFEBAG *bags, const char *pass,-
158 int passlen, EVP_PKEY **pkey, struct stack_st_X509 *ocerts)-
159{-
160 int i;-
161 for (i = 0; i < sk_PKCS12_SAFEBAG_num(bags)
i < sk_PKCS12_...EBAG_num(bags)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
162 if (!parse_bag(sk_PKCS12_SAFEBAG_value(bags, i),
!parse_bag(sk_... pkey, ocerts)Description
TRUEnever evaluated
FALSEnever evaluated
0
163 pass, passlen, pkey, ocerts)
!parse_bag(sk_... pkey, ocerts)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
164 return
never executed: return 0;
0;
never executed: return 0;
0
165 }
never executed: end of block
0
166 return
never executed: return 1;
1;
never executed: return 1;
0
167}-
168-
169static int parse_bag(PKCS12_SAFEBAG *bag, const char *pass, int passlen,-
170 EVP_PKEY **pkey, struct stack_st_X509 *ocerts)-
171{-
172 PKCS8_PRIV_KEY_INFO *p8;-
173 X509 *x509;-
174 const ASN1_TYPE *attrib;-
175 ASN1_BMPSTRING *fname = -
176 ((void *)0)-
177 ;-
178 ASN1_OCTET_STRING *lkid = -
179 ((void *)0)-
180 ;-
181-
182 if ((
(attrib = PKCS...ttr(bag, 156))Description
TRUEnever evaluated
FALSEnever evaluated
attrib = PKCS12_SAFEBAG_get0_attr(bag, 156))
(attrib = PKCS...ttr(bag, 156))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
183 fname = attrib->value.bmpstring;
never executed: fname = attrib->value.bmpstring;
0
184-
185 if ((
(attrib = PKCS...ttr(bag, 157))Description
TRUEnever evaluated
FALSEnever evaluated
attrib = PKCS12_SAFEBAG_get0_attr(bag, 157))
(attrib = PKCS...ttr(bag, 157))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
186 lkid = attrib->value.octet_string;
never executed: lkid = attrib->value.octet_string;
0
187-
188 switch (PKCS12_SAFEBAG_get_nid(bag)) {-
189 case
never executed: case 150:
150:
never executed: case 150:
0
190 if (!pkey
!pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
|| *
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
pkey
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
191 return
never executed: return 1;
1;
never executed: return 1;
0
192 *pkey = EVP_PKCS82PKEY(PKCS12_SAFEBAG_get0_p8inf(bag));-
193 if (*
*pkey == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
pkey ==
*pkey == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
194 ((void *)0)
*pkey == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
195 )-
196 return
never executed: return 0;
0;
never executed: return 0;
0
197 break;
never executed: break;
0
198-
199 case
never executed: case 151:
151:
never executed: case 151:
0
200 if (!pkey
!pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
|| *
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
pkey
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
201 return
never executed: return 1;
1;
never executed: return 1;
0
202 if ((
(p8 = PKCS12_d...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
p8 = PKCS12_decrypt_skey(bag, pass, passlen)) ==
(p8 = PKCS12_d...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
203 ((void *)0)
(p8 = PKCS12_d...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
204 )-
205 return
never executed: return 0;
0;
never executed: return 0;
0
206 *pkey = EVP_PKCS82PKEY(p8);-
207 PKCS8_PRIV_KEY_INFO_free(p8);-
208 if (!(*pkey)
!(*pkey)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
209 return
never executed: return 0;
0;
never executed: return 0;
0
210 break;
never executed: break;
0
211-
212 case
never executed: case 152:
152:
never executed: case 152:
0
213 if (PKCS12_SAFEBAG_get_bag_nid(bag) != 158
PKCS12_SAFEBAG...id(bag) != 158Description
TRUEnever evaluated
FALSEnever evaluated
)
0
214 return
never executed: return 1;
1;
never executed: return 1;
0
215 if ((
(x509 = PKCS12...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
x509 = PKCS12_SAFEBAG_get1_cert(bag)) ==
(x509 = PKCS12...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
216 ((void *)0)
(x509 = PKCS12...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
217 )-
218 return
never executed: return 0;
0;
never executed: return 0;
0
219 if (lkid
lkidDescription
TRUEnever evaluated
FALSEnever evaluated
&& !X509_keyid_set1(x509, lkid->data, lkid->length)
!X509_keyid_se... lkid->length)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
220 X509_free(x509);-
221 return
never executed: return 0;
0;
never executed: return 0;
0
222 }-
223 if (fname
fnameDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
224 int len, r;-
225 unsigned char *data;-
226 len = ASN1_STRING_to_UTF8(&data, fname);-
227 if (len >= 0
len >= 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
228 r = X509_alias_set1(x509, data, len);-
229 CRYPTO_free(data, __FILE__, 227);-
230 if (!r
!rDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
231 X509_free(x509);-
232 return
never executed: return 0;
0;
never executed: return 0;
0
233 }-
234 }
never executed: end of block
0
235 }
never executed: end of block
0
236-
237 if (!sk_X509_push(ocerts, x509)
!sk_X509_push(ocerts, x509)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
238 X509_free(x509);-
239 return
never executed: return 0;
0;
never executed: return 0;
0
240 }-
241-
242 break;
never executed: break;
0
243-
244 case
never executed: case 155:
155:
never executed: case 155:
0
245 return
never executed: return parse_bags(PKCS12_SAFEBAG_get0_safes(bag), pass, passlen, pkey, ocerts);
parse_bags(PKCS12_SAFEBAG_get0_safes(bag), pass, passlen, pkey,
never executed: return parse_bags(PKCS12_SAFEBAG_get0_safes(bag), pass, passlen, pkey, ocerts);
0
246 ocerts);
never executed: return parse_bags(PKCS12_SAFEBAG_get0_safes(bag), pass, passlen, pkey, ocerts);
0
247-
248 default
never executed: default:
:
never executed: default:
0
249 return
never executed: return 1;
1;
never executed: return 1;
0
250 }-
251 return
never executed: return 1;
1;
never executed: return 1;
0
252}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2