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