Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/pkcs12/p12_crt.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||
2 | static int pkcs12_add_bag(struct stack_st_PKCS12_SAFEBAG **pbags, | - | ||||||||||||||||||
3 | PKCS12_SAFEBAG *bag); | - | ||||||||||||||||||
4 | - | |||||||||||||||||||
5 | static int copy_bag_attr(PKCS12_SAFEBAG *bag, EVP_PKEY *pkey, int nid) | - | ||||||||||||||||||
6 | { | - | ||||||||||||||||||
7 | int idx; | - | ||||||||||||||||||
8 | X509_ATTRIBUTE *attr; | - | ||||||||||||||||||
9 | idx = EVP_PKEY_get_attr_by_NID(pkey, nid, -1); | - | ||||||||||||||||||
10 | if (idx < 0
| 0 | ||||||||||||||||||
11 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
12 | attr = EVP_PKEY_get_attr(pkey, idx); | - | ||||||||||||||||||
13 | if (!X509at_add1_attr(&bag->attrib, attr)
| 0 | ||||||||||||||||||
14 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
15 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
16 | } | - | ||||||||||||||||||
17 | - | |||||||||||||||||||
18 | PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, X509 *cert, | - | ||||||||||||||||||
19 | struct stack_st_X509 *ca, int nid_key, int nid_cert, int iter, | - | ||||||||||||||||||
20 | int mac_iter, int keytype) | - | ||||||||||||||||||
21 | { | - | ||||||||||||||||||
22 | PKCS12 *p12 = | - | ||||||||||||||||||
23 | ((void *)0) | - | ||||||||||||||||||
24 | ; | - | ||||||||||||||||||
25 | struct stack_st_PKCS7 *safes = | - | ||||||||||||||||||
26 | ((void *)0) | - | ||||||||||||||||||
27 | ; | - | ||||||||||||||||||
28 | struct stack_st_PKCS12_SAFEBAG *bags = | - | ||||||||||||||||||
29 | ((void *)0) | - | ||||||||||||||||||
30 | ; | - | ||||||||||||||||||
31 | PKCS12_SAFEBAG *bag = | - | ||||||||||||||||||
32 | ((void *)0) | - | ||||||||||||||||||
33 | ; | - | ||||||||||||||||||
34 | int i; | - | ||||||||||||||||||
35 | unsigned char keyid[64]; | - | ||||||||||||||||||
36 | unsigned int keyidlen = 0; | - | ||||||||||||||||||
37 | - | |||||||||||||||||||
38 | - | |||||||||||||||||||
39 | if (!nid_cert
| 0 | ||||||||||||||||||
40 | - | |||||||||||||||||||
41 | - | |||||||||||||||||||
42 | - | |||||||||||||||||||
43 | nid_cert = 149; never executed: nid_cert = 149; | 0 | ||||||||||||||||||
44 | - | |||||||||||||||||||
45 | if (!nid_key
| 0 | ||||||||||||||||||
46 | nid_key = 146; never executed: nid_key = 146; | 0 | ||||||||||||||||||
47 | if (!iter
| 0 | ||||||||||||||||||
48 | iter = 2048; never executed: iter = 2048; | 0 | ||||||||||||||||||
49 | if (!mac_iter
| 0 | ||||||||||||||||||
50 | mac_iter = 1; never executed: mac_iter = 1; | 0 | ||||||||||||||||||
51 | - | |||||||||||||||||||
52 | if (!pkey
| 0 | ||||||||||||||||||
53 | ERR_put_error(35,(105),(104),__FILE__,58); | - | ||||||||||||||||||
54 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
55 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
56 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
57 | } | - | ||||||||||||||||||
58 | - | |||||||||||||||||||
59 | if (pkey
| 0 | ||||||||||||||||||
60 | if (!X509_check_private_key(cert, pkey)
| 0 | ||||||||||||||||||
61 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
62 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
63 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
64 | X509_digest(cert, EVP_sha1(), keyid, &keyidlen); | - | ||||||||||||||||||
65 | } never executed: end of block | 0 | ||||||||||||||||||
66 | - | |||||||||||||||||||
67 | if (cert
| 0 | ||||||||||||||||||
68 | bag = PKCS12_add_cert(&bags, cert); | - | ||||||||||||||||||
69 | if (name
| 0 | ||||||||||||||||||
70 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
71 | if (keyidlen
| 0 | ||||||||||||||||||
72 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
73 | } never executed: end of block | 0 | ||||||||||||||||||
74 | - | |||||||||||||||||||
75 | - | |||||||||||||||||||
76 | for (i = 0; i < sk_X509_num(ca)
| 0 | ||||||||||||||||||
77 | if (!PKCS12_add_cert(&bags, sk_X509_value(ca, i))
| 0 | ||||||||||||||||||
78 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
79 | } never executed: end of block | 0 | ||||||||||||||||||
80 | - | |||||||||||||||||||
81 | if (bags
| 0 | ||||||||||||||||||
82 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
83 | - | |||||||||||||||||||
84 | sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); | - | ||||||||||||||||||
85 | bags = | - | ||||||||||||||||||
86 | ((void *)0) | - | ||||||||||||||||||
87 | ; | - | ||||||||||||||||||
88 | - | |||||||||||||||||||
89 | if (pkey
| 0 | ||||||||||||||||||
90 | bag = PKCS12_add_key(&bags, pkey, keytype, iter, nid_key, pass); | - | ||||||||||||||||||
91 | - | |||||||||||||||||||
92 | if (!bag
| 0 | ||||||||||||||||||
93 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
94 | - | |||||||||||||||||||
95 | if (!copy_bag_attr(bag, pkey, 417)
| 0 | ||||||||||||||||||
96 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
97 | if (!copy_bag_attr(bag, pkey, 856)
| 0 | ||||||||||||||||||
98 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
99 | - | |||||||||||||||||||
100 | if (name
| 0 | ||||||||||||||||||
101 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
102 | if (keyidlen
| 0 | ||||||||||||||||||
103 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
104 | } never executed: end of block | 0 | ||||||||||||||||||
105 | - | |||||||||||||||||||
106 | if (bags
| 0 | ||||||||||||||||||
107 | ((void *)0)
| 0 | ||||||||||||||||||
108 | )
| 0 | ||||||||||||||||||
109 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
110 | - | |||||||||||||||||||
111 | sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); | - | ||||||||||||||||||
112 | bags = | - | ||||||||||||||||||
113 | ((void *)0) | - | ||||||||||||||||||
114 | ; | - | ||||||||||||||||||
115 | - | |||||||||||||||||||
116 | p12 = PKCS12_add_safes(safes, 0); | - | ||||||||||||||||||
117 | - | |||||||||||||||||||
118 | if (!p12
| 0 | ||||||||||||||||||
119 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
120 | - | |||||||||||||||||||
121 | sk_PKCS7_pop_free(safes, PKCS7_free); | - | ||||||||||||||||||
122 | - | |||||||||||||||||||
123 | safes = | - | ||||||||||||||||||
124 | ((void *)0) | - | ||||||||||||||||||
125 | ; | - | ||||||||||||||||||
126 | - | |||||||||||||||||||
127 | if ((
| 0 | ||||||||||||||||||
128 | !PKCS12_set_mac(p12, pass, -1,
| 0 | ||||||||||||||||||
129 | ((void *)0)
| 0 | ||||||||||||||||||
130 | , 0, mac_iter,
| 0 | ||||||||||||||||||
131 | ((void *)0)
| 0 | ||||||||||||||||||
132 | )
| 0 | ||||||||||||||||||
133 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
134 | - | |||||||||||||||||||
135 | return never executed: p12;return p12; never executed: return p12; | 0 | ||||||||||||||||||
136 | - | |||||||||||||||||||
137 | err: | - | ||||||||||||||||||
138 | PKCS12_free(p12); | - | ||||||||||||||||||
139 | sk_PKCS7_pop_free(safes, PKCS7_free); | - | ||||||||||||||||||
140 | sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); | - | ||||||||||||||||||
141 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
142 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
143 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
144 | - | |||||||||||||||||||
145 | } | - | ||||||||||||||||||
146 | - | |||||||||||||||||||
147 | PKCS12_SAFEBAG *PKCS12_add_cert(struct stack_st_PKCS12_SAFEBAG **pbags, X509 *cert) | - | ||||||||||||||||||
148 | { | - | ||||||||||||||||||
149 | PKCS12_SAFEBAG *bag = | - | ||||||||||||||||||
150 | ((void *)0) | - | ||||||||||||||||||
151 | ; | - | ||||||||||||||||||
152 | char *name; | - | ||||||||||||||||||
153 | int namelen = -1; | - | ||||||||||||||||||
154 | unsigned char *keyid; | - | ||||||||||||||||||
155 | int keyidlen = -1; | - | ||||||||||||||||||
156 | - | |||||||||||||||||||
157 | - | |||||||||||||||||||
158 | if ((
| 0 | ||||||||||||||||||
159 | ((void *)0)
| 0 | ||||||||||||||||||
160 | ) | - | ||||||||||||||||||
161 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
162 | - | |||||||||||||||||||
163 | - | |||||||||||||||||||
164 | - | |||||||||||||||||||
165 | - | |||||||||||||||||||
166 | - | |||||||||||||||||||
167 | name = (char *)X509_alias_get0(cert, &namelen); | - | ||||||||||||||||||
168 | - | |||||||||||||||||||
169 | if (name
| 0 | ||||||||||||||||||
170 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
171 | - | |||||||||||||||||||
172 | keyid = X509_keyid_get0(cert, &keyidlen); | - | ||||||||||||||||||
173 | - | |||||||||||||||||||
174 | if (keyid
| 0 | ||||||||||||||||||
175 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
176 | - | |||||||||||||||||||
177 | if (!pkcs12_add_bag(pbags, bag)
| 0 | ||||||||||||||||||
178 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
179 | - | |||||||||||||||||||
180 | return never executed: bag;return bag; never executed: return bag; | 0 | ||||||||||||||||||
181 | - | |||||||||||||||||||
182 | err: | - | ||||||||||||||||||
183 | PKCS12_SAFEBAG_free(bag); | - | ||||||||||||||||||
184 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
185 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
186 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
187 | - | |||||||||||||||||||
188 | } | - | ||||||||||||||||||
189 | - | |||||||||||||||||||
190 | PKCS12_SAFEBAG *PKCS12_add_key(struct stack_st_PKCS12_SAFEBAG **pbags, | - | ||||||||||||||||||
191 | EVP_PKEY *key, int key_usage, int iter, | - | ||||||||||||||||||
192 | int nid_key, const char *pass) | - | ||||||||||||||||||
193 | { | - | ||||||||||||||||||
194 | - | |||||||||||||||||||
195 | PKCS12_SAFEBAG *bag = | - | ||||||||||||||||||
196 | ((void *)0) | - | ||||||||||||||||||
197 | ; | - | ||||||||||||||||||
198 | PKCS8_PRIV_KEY_INFO *p8 = | - | ||||||||||||||||||
199 | ((void *)0) | - | ||||||||||||||||||
200 | ; | - | ||||||||||||||||||
201 | - | |||||||||||||||||||
202 | - | |||||||||||||||||||
203 | if ((
| 0 | ||||||||||||||||||
204 | ((void *)0)
| 0 | ||||||||||||||||||
205 | ) | - | ||||||||||||||||||
206 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
207 | if (key_usage
| 0 | ||||||||||||||||||
208 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
209 | if (nid_key != -1
| 0 | ||||||||||||||||||
210 | bag = PKCS12_SAFEBAG_create_pkcs8_encrypt(nid_key, pass, -1, | - | ||||||||||||||||||
211 | ((void *)0) | - | ||||||||||||||||||
212 | , 0, | - | ||||||||||||||||||
213 | iter, p8); | - | ||||||||||||||||||
214 | PKCS8_PRIV_KEY_INFO_free(p8); | - | ||||||||||||||||||
215 | } never executed: elseend of block | 0 | ||||||||||||||||||
216 | bag = PKCS12_SAFEBAG_create0_p8inf(p8); never executed: bag = PKCS12_SAFEBAG_create0_p8inf(p8); | 0 | ||||||||||||||||||
217 | - | |||||||||||||||||||
218 | if (!bag
| 0 | ||||||||||||||||||
219 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
220 | - | |||||||||||||||||||
221 | if (!pkcs12_add_bag(pbags, bag)
| 0 | ||||||||||||||||||
222 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
223 | - | |||||||||||||||||||
224 | return never executed: bag;return bag; never executed: return bag; | 0 | ||||||||||||||||||
225 | - | |||||||||||||||||||
226 | err: | - | ||||||||||||||||||
227 | PKCS12_SAFEBAG_free(bag); | - | ||||||||||||||||||
228 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
229 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
230 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
231 | - | |||||||||||||||||||
232 | } | - | ||||||||||||||||||
233 | - | |||||||||||||||||||
234 | int PKCS12_add_safe(struct stack_st_PKCS7 **psafes, struct stack_st_PKCS12_SAFEBAG *bags, | - | ||||||||||||||||||
235 | int nid_safe, int iter, const char *pass) | - | ||||||||||||||||||
236 | { | - | ||||||||||||||||||
237 | PKCS7 *p7 = | - | ||||||||||||||||||
238 | ((void *)0) | - | ||||||||||||||||||
239 | ; | - | ||||||||||||||||||
240 | int free_safes = 0; | - | ||||||||||||||||||
241 | - | |||||||||||||||||||
242 | if (!*psafes
| 0 | ||||||||||||||||||
243 | *psafes = sk_PKCS7_new_null(); | - | ||||||||||||||||||
244 | if (!*psafes
| 0 | ||||||||||||||||||
245 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
246 | free_safes = 1; | - | ||||||||||||||||||
247 | } never executed: elseend of block | 0 | ||||||||||||||||||
248 | free_safes = 0; never executed: free_safes = 0; | 0 | ||||||||||||||||||
249 | - | |||||||||||||||||||
250 | if (nid_safe == 0
| 0 | ||||||||||||||||||
251 | - | |||||||||||||||||||
252 | - | |||||||||||||||||||
253 | - | |||||||||||||||||||
254 | nid_safe = 149; never executed: nid_safe = 149; | 0 | ||||||||||||||||||
255 | - | |||||||||||||||||||
256 | - | |||||||||||||||||||
257 | if (nid_safe == -1
| 0 | ||||||||||||||||||
258 | p7 = PKCS12_pack_p7data(bags); never executed: p7 = PKCS12_pack_p7data(bags); | 0 | ||||||||||||||||||
259 | else | - | ||||||||||||||||||
260 | p7 = PKCS12_pack_p7encdata(nid_safe, pass, -1, never executed: p7 = PKCS12_pack_p7encdata(nid_safe, pass, -1, ((void *)0) , 0, iter, bags); | 0 | ||||||||||||||||||
261 | ((void *)0) never executed: p7 = PKCS12_pack_p7encdata(nid_safe, pass, -1, ((void *)0) , 0, iter, bags); | 0 | ||||||||||||||||||
262 | , 0, iter, bags); never executed: p7 = PKCS12_pack_p7encdata(nid_safe, pass, -1, ((void *)0) , 0, iter, bags); | 0 | ||||||||||||||||||
263 | if (!p7
| 0 | ||||||||||||||||||
264 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
265 | - | |||||||||||||||||||
266 | if (!sk_PKCS7_push(*psafes, p7)
| 0 | ||||||||||||||||||
267 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
268 | - | |||||||||||||||||||
269 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
270 | - | |||||||||||||||||||
271 | err: | - | ||||||||||||||||||
272 | if (free_safes
| 0 | ||||||||||||||||||
273 | sk_PKCS7_free(*psafes); | - | ||||||||||||||||||
274 | *psafes = | - | ||||||||||||||||||
275 | ((void *)0) | - | ||||||||||||||||||
276 | ; | - | ||||||||||||||||||
277 | } never executed: end of block | 0 | ||||||||||||||||||
278 | PKCS7_free(p7); | - | ||||||||||||||||||
279 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
280 | - | |||||||||||||||||||
281 | } | - | ||||||||||||||||||
282 | - | |||||||||||||||||||
283 | static int pkcs12_add_bag(struct stack_st_PKCS12_SAFEBAG **pbags, | - | ||||||||||||||||||
284 | PKCS12_SAFEBAG *bag) | - | ||||||||||||||||||
285 | { | - | ||||||||||||||||||
286 | int free_bags; | - | ||||||||||||||||||
287 | if (!pbags
| 0 | ||||||||||||||||||
288 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
289 | if (!*pbags
| 0 | ||||||||||||||||||
290 | *pbags = sk_PKCS12_SAFEBAG_new_null(); | - | ||||||||||||||||||
291 | if (!*pbags
| 0 | ||||||||||||||||||
292 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
293 | free_bags = 1; | - | ||||||||||||||||||
294 | } never executed: elseend of block | 0 | ||||||||||||||||||
295 | free_bags = 0; never executed: free_bags = 0; | 0 | ||||||||||||||||||
296 | - | |||||||||||||||||||
297 | if (!sk_PKCS12_SAFEBAG_push(*pbags, bag)
| 0 | ||||||||||||||||||
298 | if (free_bags
| 0 | ||||||||||||||||||
299 | sk_PKCS12_SAFEBAG_free(*pbags); | - | ||||||||||||||||||
300 | *pbags = | - | ||||||||||||||||||
301 | ((void *)0) | - | ||||||||||||||||||
302 | ; | - | ||||||||||||||||||
303 | } never executed: end of block | 0 | ||||||||||||||||||
304 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
305 | } | - | ||||||||||||||||||
306 | - | |||||||||||||||||||
307 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||
308 | - | |||||||||||||||||||
309 | } | - | ||||||||||||||||||
310 | - | |||||||||||||||||||
311 | PKCS12 *PKCS12_add_safes(struct stack_st_PKCS7 *safes, int nid_p7) | - | ||||||||||||||||||
312 | { | - | ||||||||||||||||||
313 | PKCS12 *p12; | - | ||||||||||||||||||
314 | if (nid_p7 <= 0
| 0 | ||||||||||||||||||
315 | nid_p7 = 21; never executed: nid_p7 = 21; | 0 | ||||||||||||||||||
316 | p12 = PKCS12_init(nid_p7); | - | ||||||||||||||||||
317 | - | |||||||||||||||||||
318 | if (!p12
| 0 | ||||||||||||||||||
319 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
320 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
321 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
322 | - | |||||||||||||||||||
323 | if (!PKCS12_pack_authsafes(p12, safes)
| 0 | ||||||||||||||||||
324 | PKCS12_free(p12); | - | ||||||||||||||||||
325 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
326 | ((void *)0) never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
327 | ; never executed: return ((void *)0) ; | 0 | ||||||||||||||||||
328 | } | - | ||||||||||||||||||
329 | - | |||||||||||||||||||
330 | return never executed: p12;return p12; never executed: return p12; | 0 | ||||||||||||||||||
331 | - | |||||||||||||||||||
332 | } | - | ||||||||||||||||||
Switch to Source code | Preprocessed file |