OpenCoverage

p12_kiss.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/pkcs12/p12_kiss.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5static int parse_pk12( PKCS12 *p12, const char *pass, int passlen,-
6 EVP_PKEY **pkey, struct stack_st_X509 *ocerts);-
7-
8static int parse_bags( struct stack_st_PKCS12_SAFEBAG *bags, const char *pass,-
9 int passlen, EVP_PKEY **pkey, struct stack_st_X509 *ocerts);-
10-
11static 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-
20int-
21PKCS12_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
!p12Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
33 ERR_put_error(35,(0xfff),(105),__FILE__,90);-
34 return
never executed: return 0;
0;
never executed: return 0;
0
35 }-
36-
37 if (pkey
pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
38 *
never executed: *pkey = ((void *)0) ;
pkey =
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
certDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
42 *
never executed: *cert = ((void *)0) ;
cert =
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
!passDescription
TRUEnever evaluated
FALSEnever evaluated
|| !*pass
!*passDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
46 if (PKCS12_verify_mac(p12,
PKCS12_verify_...void *)0) , 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
47 ((void *)0)
PKCS12_verify_...void *)0) , 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
48 , 0)
PKCS12_verify_...void *)0) , 0)Description
TRUEnever evaluated
FALSEnever evaluated
)
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)
PKCS12_verify_mac(p12, "", 0)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
53 pass = "";
never executed: pass = "";
0
54 else {-
55 ERR_put_error(35,(0xfff),(113),__FILE__,113);-
56 goto
never executed: goto err;
err;
never executed: goto err;
0
57 }-
58 } else if (!PKCS12_verify_mac(p12, pass, -1)
!PKCS12_verify...p12, pass, -1)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
59 ERR_put_error(35,(0xfff),(113),__FILE__,117);-
60 goto
never executed: goto err;
err;
never executed: goto err;
0
61 }-
62-
63-
64 ocerts = ((struct stack_st_X509 *)sk_new_null());-
65 if (!ocerts
!ocertsDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
66 ERR_put_error(35,(0xfff),((1|64)),__FILE__,124);-
67 return
never executed: return 0;
0;
never executed: return 0;
0
68 }-
69-
70 if (!parse_pk12 (p12, pass, -1, pkey, ocerts)
!parse_pk12 (p... pkey, ocerts)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
71 ERR_put_error(35,(0xfff),(114),__FILE__,129);-
72 goto
never executed: goto err;
err;
never executed: goto err;
0
73 }-
74-
75 while ((
(x = (X509 *)s...st_X509*)0))))Description
TRUEnever evaluated
FALSEnever evaluated
x = (X509 *)sk_pop(((_STACK*) (1 ? (ocerts) : (struct stack_st_X509*)0))))
(x = (X509 *)s...st_X509*)0))))Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
76 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
77 if (X509_check_private_key(x, *pkey)
X509_check_pri..._key(x, *pkey)Description
TRUEnever evaluated
FALSEnever evaluated
) {
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
caDescription
TRUEnever evaluated
FALSEnever evaluated
&& x
xDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
86 if (!*ca
!*caDescription
TRUEnever evaluated
FALSEnever evaluated
)
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
!*caDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
89 goto
never executed: goto err;
err;
never executed: goto err;
0
90 if (!sk_push(((_STACK*) (1 ? (*ca) : (struct stack_st_X509*)0)), ((void*) (1 ? (x) : (X509*)0)))
!sk_push(((_ST... : (X509*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
91 goto
never executed: goto err;
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
ocertsDescription
TRUEnever evaluated
FALSEnever evaluated
)
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: return 1;
1;
never executed: return 1;
0
103-
104err:-
105 if (pkey
pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
&& *
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
pkey
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
106 EVP_PKEY_free(*pkey);
never executed: EVP_PKEY_free(*pkey);
0
107 if (cert
certDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
108 X509_free(*cert);
never executed: X509_free(*cert);
0
109 X509_free(x);-
110 if (ocerts
ocertsDescription
TRUEnever evaluated
FALSEnever evaluated
)
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: return 0;
0;
never executed: return 0;
0
113}-
114-
115-
116-
117static int-
118parse_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))
!(asafes = PKC...thsafes (p12))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
127 return
never executed: return 0;
0;
never executed: return 0;
0
128 for (i = 0; i < sk_num(((_STACK*) (1 ? (asafes) : (struct stack_st_PKCS7*)0)))
i < sk_num(((_...st_PKCS7*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
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
bagnid == 21Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
132 bags = PKCS12_unpack_p7data(p7);-
133 }
never executed: end of block
else if (bagnid == 26
bagnid == 26Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
134 bags = PKCS12_unpack_p7encdata(p7, pass, passlen);-
135 }
never executed: end of block
else
0
136 continue;
never executed: continue;
0
137 if (!bags
!bagsDescription
TRUEnever evaluated
FALSEnever evaluated
) {
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: return 0;
0;
never executed: return 0;
0
140 }-
141 if (!parse_bags(bags, pass, passlen, pkey, ocerts)
!parse_bags(ba... pkey, ocerts)Description
TRUEnever evaluated
FALSEnever evaluated
) {
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: return 0;
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: return 1;
1;
never executed: return 1;
0
150}-
151-
152static int-
153parse_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)))
i < sk_num(((_..._SAFEBAG*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
159 if (!parse_bag(((PKCS12_SAFEBAG *)sk_value(((_STACK*) (1 ? (bags) : (struct stack_st_PKCS12_SAFEBAG*)0)), (i))), pass, passlen,
!parse_bag(((P... pkey, ocerts)Description
TRUEnever evaluated
FALSEnever evaluated
0
160 pkey, ocerts)
!parse_bag(((P... pkey, ocerts)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
161 return
never executed: return 0;
0;
never executed: return 0;
0
162 }
never executed: end of block
0
163 return
never executed: return 1;
1;
never executed: return 1;
0
164}-
165-
166static int-
167parse_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 ((
(attrib = PKCS...>attrib, 156))Description
TRUEnever evaluated
FALSEnever evaluated
attrib = PKCS12_get_attr_gen(bag->attrib, 156))
(attrib = PKCS...>attrib, 156))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
181 fname = attrib->value.bmpstring;
never executed: fname = attrib->value.bmpstring;
0
182-
183 if ((
(attrib = PKCS...>attrib, 157))Description
TRUEnever evaluated
FALSEnever evaluated
attrib = PKCS12_get_attr_gen(bag->attrib, 157))
(attrib = PKCS...>attrib, 157))Description
TRUEnever evaluated
FALSEnever evaluated
)
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: case 150:
150:
never executed: case 150:
0
188 if (!pkey
!pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
|| *
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
pkey
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
189 return
never executed: return 1;
1;
never executed: return 1;
0
190 if (!(*pkey = EVP_PKCS82PKEY(bag->value.keybag))
!(*pkey = EVP_...value.keybag))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
191 return
never executed: return 0;
0;
never executed: return 0;
0
192 break;
never executed: break;
0
193-
194 case
never executed: case 151:
151:
never executed: case 151:
0
195 if (!pkey
!pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
|| *
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
pkey
*pkeyDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
196 return
never executed: return 1;
1;
never executed: return 1;
0
197 if (!(p8 = PKCS12_decrypt_skey(bag, pass, passlen))
!(p8 = PKCS12_...ass, passlen))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
198 return
never executed: return 0;
0;
never executed: return 0;
0
199 *pkey = EVP_PKCS82PKEY(p8);-
200 PKCS8_PRIV_KEY_INFO_free(p8);-
201 if (!(*pkey)
!(*pkey)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
202 return
never executed: return 0;
0;
never executed: return 0;
0
203 break;
never executed: break;
0
204-
205 case
never executed: case 152:
152:
never executed: case 152:
0
206 if (OBJ_obj2nid(bag->value.bag->type) != 158
OBJ_obj2nid(ba...->type) != 158Description
TRUEnever evaluated
FALSEnever evaluated
)
0
207 return
never executed: return 1;
1;
never executed: return 1;
0
208 if (!(x509 = PKCS12_certbag2x509(bag))
!(x509 = PKCS1...bag2x509(bag))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
209 return
never executed: return 0;
0;
never executed: return 0;
0
210 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
211 X509_free(x509);-
212 return
never executed: return 0;
0;
never executed: return 0;
0
213 }-
214 if (fname
fnameDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
215 int len, r;-
216 unsigned char *data;-
217 len = ASN1_STRING_to_UTF8(&data, fname);-
218 if (len >= 0
len >= 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
219 r = X509_alias_set1(x509, data, len);-
220 free(data);-
221 if (!r
!rDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
222 X509_free(x509);-
223 return
never executed: return 0;
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)))
!sk_push(((_ST... : (X509*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
229 X509_free(x509);-
230 return
never executed: return 0;
0;
never executed: return 0;
0
231 }-
232-
233 break;
never executed: break;
0
234-
235 case
never executed: case 155:
155:
never executed: case 155:
0
236 return
never executed: return parse_bags(bag->value.safes, pass, passlen, pkey, ocerts);
parse_bags(bag->value.safes, pass, passlen,
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: return 1;
1;
never executed: return 1;
0
242 break;
dead code: break;
-
243 }-
244 return
never executed: return 1;
1;
never executed: return 1;
0
245}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2