Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/pkcs12/p12_kiss.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||||||||
4 | static int parse_pk12(PKCS12 *p12, const char *pass, int passlen, | - | ||||||||||||||||||||||||||||||
5 | EVP_PKEY **pkey, struct stack_st_X509 *ocerts); | - | ||||||||||||||||||||||||||||||
6 | - | |||||||||||||||||||||||||||||||
7 | static 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 | - | |||||||||||||||||||||||||||||||
10 | static int parse_bag(PKCS12_SAFEBAG *bag, const char *pass, int passlen, | - | ||||||||||||||||||||||||||||||
11 | EVP_PKEY **pkey, struct stack_st_X509 *ocerts); | - | ||||||||||||||||||||||||||||||
12 | int 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
| 0 | ||||||||||||||||||||||||||||||
23 | * never executed: pkey = *pkey = ((void *)0) ; 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
| 0 | ||||||||||||||||||||||||||||||
27 | * never executed: cert = *cert = ((void *)0) ; 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
| 0 | ||||||||||||||||||||||||||||||
34 | ERR_put_error(35,(118),(105),__FILE__,47) | - | ||||||||||||||||||||||||||||||
35 | ; | - | ||||||||||||||||||||||||||||||
36 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
37 | } | - | ||||||||||||||||||||||||||||||
38 | if (!pass
| 0 | ||||||||||||||||||||||||||||||
39 | if (PKCS12_verify_mac(p12,
| 0 | ||||||||||||||||||||||||||||||
40 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
41 | , 0)
| 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)
| 0 | ||||||||||||||||||||||||||||||
46 | pass = ""; never executed: pass = ""; | 0 | ||||||||||||||||||||||||||||||
47 | else { | - | ||||||||||||||||||||||||||||||
48 | ERR_put_error(35,(118),(113),__FILE__,66); | - | ||||||||||||||||||||||||||||||
49 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||
50 | } | - | ||||||||||||||||||||||||||||||
51 | } else if (!PKCS12_verify_mac(p12, pass, -1)
| 0 | ||||||||||||||||||||||||||||||
52 | ERR_put_error(35,(118),(113),__FILE__,70); | - | ||||||||||||||||||||||||||||||
53 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||
54 | } | - | ||||||||||||||||||||||||||||||
55 | - | |||||||||||||||||||||||||||||||
56 | - | |||||||||||||||||||||||||||||||
57 | ocerts = sk_X509_new_null(); | - | ||||||||||||||||||||||||||||||
58 | - | |||||||||||||||||||||||||||||||
59 | if (!ocerts
| 0 | ||||||||||||||||||||||||||||||
60 | ERR_put_error(35,(118),((1|64)),__FILE__,78); | - | ||||||||||||||||||||||||||||||
61 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||
62 | } | - | ||||||||||||||||||||||||||||||
63 | - | |||||||||||||||||||||||||||||||
64 | if (!parse_pk12(p12, pass, -1, pkey, ocerts)
| 0 | ||||||||||||||||||||||||||||||
65 | ERR_put_error(35,(118),(114),__FILE__,83); | - | ||||||||||||||||||||||||||||||
66 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||
67 | } | - | ||||||||||||||||||||||||||||||
68 | - | |||||||||||||||||||||||||||||||
69 | while ((
| 0 | ||||||||||||||||||||||||||||||
70 | if (pkey
| 0 | ||||||||||||||||||||||||||||||
71 | ERR_set_mark(); | - | ||||||||||||||||||||||||||||||
72 | if (X509_check_private_key(x, *pkey)
| 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
| 0 | ||||||||||||||||||||||||||||||
82 | if (!*ca
| 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
| 0 | ||||||||||||||||||||||||||||||
85 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||
86 | if (!sk_X509_push(*ca, x)
| 0 | ||||||||||||||||||||||||||||||
87 | goto never executed: err;goto 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: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
98 | - | |||||||||||||||||||||||||||||||
99 | err: | - | ||||||||||||||||||||||||||||||
100 | - | |||||||||||||||||||||||||||||||
101 | if (pkey
| 0 | ||||||||||||||||||||||||||||||
102 | EVP_PKEY_free(*pkey); | - | ||||||||||||||||||||||||||||||
103 | *pkey = | - | ||||||||||||||||||||||||||||||
104 | ((void *)0) | - | ||||||||||||||||||||||||||||||
105 | ; | - | ||||||||||||||||||||||||||||||
106 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
107 | if (cert
| 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: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
116 | - | |||||||||||||||||||||||||||||||
117 | } | - | ||||||||||||||||||||||||||||||
118 | - | |||||||||||||||||||||||||||||||
119 | - | |||||||||||||||||||||||||||||||
120 | - | |||||||||||||||||||||||||||||||
121 | static 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 ((
| 0 | ||||||||||||||||||||||||||||||
130 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
131 | ) | - | ||||||||||||||||||||||||||||||
132 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
133 | for (i = 0; i < sk_PKCS7_num(asafes)
| 0 | ||||||||||||||||||||||||||||||
134 | p7 = sk_PKCS7_value(asafes, i); | - | ||||||||||||||||||||||||||||||
135 | bagnid = OBJ_obj2nid(p7->type); | - | ||||||||||||||||||||||||||||||
136 | if (bagnid == 21
| 0 | ||||||||||||||||||||||||||||||
137 | bags = PKCS12_unpack_p7data(p7); | - | ||||||||||||||||||||||||||||||
138 | } never executed: else if (bagnid == 26end of block
| 0 | ||||||||||||||||||||||||||||||
139 | bags = PKCS12_unpack_p7encdata(p7, pass, passlen); | - | ||||||||||||||||||||||||||||||
140 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||||||||
141 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||||||||
142 | if (!bags
| 0 | ||||||||||||||||||||||||||||||
143 | sk_PKCS7_pop_free(asafes, PKCS7_free); | - | ||||||||||||||||||||||||||||||
144 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
145 | } | - | ||||||||||||||||||||||||||||||
146 | if (!parse_bags(bags, pass, passlen, pkey, ocerts)
| 0 | ||||||||||||||||||||||||||||||
147 | sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); | - | ||||||||||||||||||||||||||||||
148 | sk_PKCS7_pop_free(asafes, PKCS7_free); | - | ||||||||||||||||||||||||||||||
149 | return never executed: 0;return 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: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
155 | } | - | ||||||||||||||||||||||||||||||
156 | - | |||||||||||||||||||||||||||||||
157 | static 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)
| 0 | ||||||||||||||||||||||||||||||
162 | if (!parse_bag(sk_PKCS12_SAFEBAG_value(bags, i),
| 0 | ||||||||||||||||||||||||||||||
163 | pass, passlen, pkey, ocerts)
| 0 | ||||||||||||||||||||||||||||||
164 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
165 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
166 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
167 | } | - | ||||||||||||||||||||||||||||||
168 | - | |||||||||||||||||||||||||||||||
169 | static 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 ((
| 0 | ||||||||||||||||||||||||||||||
183 | fname = attrib->value.bmpstring; never executed: fname = attrib->value.bmpstring; | 0 | ||||||||||||||||||||||||||||||
184 | - | |||||||||||||||||||||||||||||||
185 | if ((
| 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: 150:case 150: never executed: case 150: | 0 | ||||||||||||||||||||||||||||||
190 | if (!pkey
| 0 | ||||||||||||||||||||||||||||||
191 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
192 | *pkey = EVP_PKCS82PKEY(PKCS12_SAFEBAG_get0_p8inf(bag)); | - | ||||||||||||||||||||||||||||||
193 | if (*
| 0 | ||||||||||||||||||||||||||||||
194 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
195 | ) | - | ||||||||||||||||||||||||||||||
196 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
197 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
198 | - | |||||||||||||||||||||||||||||||
199 | case never executed: 151:case 151: never executed: case 151: | 0 | ||||||||||||||||||||||||||||||
200 | if (!pkey
| 0 | ||||||||||||||||||||||||||||||
201 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
202 | if ((
| 0 | ||||||||||||||||||||||||||||||
203 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
204 | ) | - | ||||||||||||||||||||||||||||||
205 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
206 | *pkey = EVP_PKCS82PKEY(p8); | - | ||||||||||||||||||||||||||||||
207 | PKCS8_PRIV_KEY_INFO_free(p8); | - | ||||||||||||||||||||||||||||||
208 | if (!(*pkey)
| 0 | ||||||||||||||||||||||||||||||
209 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
210 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
211 | - | |||||||||||||||||||||||||||||||
212 | case never executed: 152:case 152: never executed: case 152: | 0 | ||||||||||||||||||||||||||||||
213 | if (PKCS12_SAFEBAG_get_bag_nid(bag) != 158
| 0 | ||||||||||||||||||||||||||||||
214 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
215 | if ((
| 0 | ||||||||||||||||||||||||||||||
216 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
217 | ) | - | ||||||||||||||||||||||||||||||
218 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
219 | if (lkid
| 0 | ||||||||||||||||||||||||||||||
220 | X509_free(x509); | - | ||||||||||||||||||||||||||||||
221 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
222 | } | - | ||||||||||||||||||||||||||||||
223 | if (fname
| 0 | ||||||||||||||||||||||||||||||
224 | int len, r; | - | ||||||||||||||||||||||||||||||
225 | unsigned char *data; | - | ||||||||||||||||||||||||||||||
226 | len = ASN1_STRING_to_UTF8(&data, fname); | - | ||||||||||||||||||||||||||||||
227 | if (len >= 0
| 0 | ||||||||||||||||||||||||||||||
228 | r = X509_alias_set1(x509, data, len); | - | ||||||||||||||||||||||||||||||
229 | CRYPTO_free(data, __FILE__, 227); | - | ||||||||||||||||||||||||||||||
230 | if (!r
| 0 | ||||||||||||||||||||||||||||||
231 | X509_free(x509); | - | ||||||||||||||||||||||||||||||
232 | return never executed: 0;return 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)
| 0 | ||||||||||||||||||||||||||||||
238 | X509_free(x509); | - | ||||||||||||||||||||||||||||||
239 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
240 | } | - | ||||||||||||||||||||||||||||||
241 | - | |||||||||||||||||||||||||||||||
242 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
243 | - | |||||||||||||||||||||||||||||||
244 | case never executed: 155:case 155: never executed: case 155: | 0 | ||||||||||||||||||||||||||||||
245 | return never executed: parse_bags(PKCS12_SAFEBAG_get0_safes(bag), pass, passlen, pkey,return parse_bags(PKCS12_SAFEBAG_get0_safes(bag), pass, passlen, pkey, ocerts); 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: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
250 | } | - | ||||||||||||||||||||||||||||||
251 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
252 | } | - | ||||||||||||||||||||||||||||||
Switch to Source code | Preprocessed file |